@genesislcap/design-system-configurator 14.447.1 → 14.447.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{106.106.4d31fd4666dc595a8e11.js → 106.106.696e1cdd3fbdfd054b0b.js} +1 -1
- package/dist/{151.151.795d449893bf15202b83.js → 151.151.3a56243fdde3cf0d9d1a.js} +1 -1
- package/dist/{163.163.00e2949056cefb8ad99b.js → 163.163.460f67e3972c823c8c80.js} +1 -1
- package/dist/{182.182.f5e2fef5880552e5d810.js → 182.182.aa3afb677b1345ac7e94.js} +3 -3
- package/dist/{210.210.b24f034568b8b5b0740c.js → 210.210.f3ff1900c987d63f04c4.js} +2 -2
- package/dist/{445.717a42a8e3c4201b6ba272bc6d86b1b2.js.map → 445.1fdfb2e70b9713d819add4eace2521b1.js.map} +1 -1
- package/dist/{445.445.8649233e206dbe3d60cc.js → 445.445.34419944fa8151cf200f.js} +6 -6
- package/dist/{627.627.a9ffb595dc42194110f8.js → 627.627.5b5c8415f1e2055f976b.js} +3 -3
- package/dist/{72.72.26fe1ba712f46756abda.js → 72.72.a4e0149197171ef309b4.js} +1 -1
- package/dist/{881.881.ff91b0c822d2025b08c4.js → 881.881.c756c9604c525e890b90.js} +2 -2
- package/dist/{designSystemConfigurator.5c1814c5165e75830258a4b1ccd27652.js.map → designSystemConfigurator.56a118d255437062ea967761b6b18c9f.js.map} +1 -1
- package/dist/index.html +1 -1
- package/dist/{main.9c294f2b831044f4bcb0.js → main.1980aa00cc8a24455105.js} +2 -2
- package/dist/{main.80ce3903e1c6e1a46074f1b4925bea50.js.map → main.efa20c254c9c46d1269460a2082c65c8.js.map} +1 -1
- package/dist/remoteEntry.js +2 -2
- package/package.json +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"445.445.xxxxxxxxxxxxxxxxxxxx.js","mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCDtB,MAAMovB,EAA0B,EAAApvB,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECA9BqvB,EAA0B,EAAArvB,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECA9BsvB,EAA4B,EAAAtvB,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCOtC,MAAMuvB,EAAwB,EAAAvvB,GAAI;IACrCmvB;IACA;IACAC;IACAC;IACAC;iCCbG,MAAME,EAAuB,CAEhCjF,WAAY,wBACZC,MAAO,mBAEPiF,WAAY,yBACZlX,YAAa,0BACbwT,YAAa,0BAEbd,cAAe,4BAEfjC,eAAgB,6BAChBpR,gBAAiB,8BACjBE,gBAAiB,+BACjB4X,kBAAmB,iCAEnBhE,gBAAiB,8BAEjB7nB,MAAO,mBAEP3C,QAAS,qBAETyuB,YAAa,0BAEbhH,kBAAmB,sBACnBE,kBAAmB,sBACnBE,wBAAyB,6BACzBI,gBAAiB,qBACjBE,mBAAoB,wBACpB4C,2BAA4B,gC,gCC7BzB,MAAM2D,EAAqC,CAC9C/rB,MAAO,mBACP4mB,SAAU,kBACVkF,YAAa,0BACbE,gBAAiB,oB,mNCDd,SAAShb,EAAqBrO,GACjC,OAAQA,aAAmC,EAASA,EAAKoU,eACrD,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,aACL,IAAK,SACD,MAAO,uBACX,IAAK,OACL,IAAK,WACD,MAAO,qBACX,IAAK,SACL,IAAK,OACD,MAAO,sBACX,QACI,MAAO,qBAEnB,CAQO,SAASkV,EAAqCjqB,GACjD,OAAQA,EAAMW,MACV,KAAK,IAAcgP,KACnB,KAAK,IAAcG,SACf,MAAO,CACH6F,WAAY,SAAUC,EAA2BH,GAC7C,IAAKA,EACD,OAAQ,EACZ,MAAMI,EAAgB,IAAIC,KAAKL,GAAWM,SAAS,EAAG,EAAG,EAAG,GACtDC,EAAkBJ,EAA0BK,UAClD,OAAIJ,IAAkBG,EACX,EAEPH,EAAgBG,GACR,EAERH,EAAgBG,EACT,OADX,CAGJ,EACAf,QAAS,CAAC,QAAS,SACnBC,cAAc,EACdC,cAAc,EACdC,iBAAkB,EAClBc,mBAAmB,GAG3B,KAAK,IAAclG,KACf,OAAO,QAAoBhQ,EAAOgP,EAAqBhP,EAAMW,OAGzE,C,oCC1BA,IAAIupB,EAA2B,eAAuC,OAAe,OACjF,WAAApmB,GACIC,SAASC,WAETzL,KAAK4xB,eAAiB,GAEtB5xB,KAAKyV,gBAAkB,CACnBC,IAAK,GACLC,OAAQ,GACRnE,OAAQ,GACR0G,SAAU,GAEdlY,KAAKuV,2BAA4B,EACjCvV,KAAK6xB,+BAAgC,EACrC7xB,KAAK8xB,eAAgB,EACrB9xB,KAAK+xB,mBAAoB,EACzB/xB,KAAKgyB,YAAc,EACnBhyB,KAAKiyB,eAAiB,CAC1B,CAEA,eAAAtI,CAAgBC,EAAaC,GACzB,OAAO,QAAU7pB,UAAM,OAAQ,EAAQ,YACnC,MAAM8pB,EAAyBF,KAAgB,EAAAG,EAAA,GAAkBF,EAAa,MAC1E7pB,KAAKmT,WAAW+e,aAAepI,UACzB9pB,KAAKoW,qBAEnB,EACJ,CACA,cAAA+b,CAAeC,EAAYC,GACvB,MAAMC,EAAwBF,IAAeC,EACzCryB,KAAKmT,WAAW+e,aAAeI,GAC/BtyB,KAAKoW,oBAEb,CACA,mBAAAsT,CAAoBrgB,EAAUC,GACrBD,GAAYA,IAAaC,GAE9BtJ,KAAKya,SACT,CACA,iBAAAxL,GACIzD,MAAMyD,oBACN,MAAMgb,EAAmBjqB,KAAKiqB,iBAC9B,EAAAhG,IAAIC,YAAY,KACP+F,IAELjqB,KAAKF,OACLE,KAAK6V,0BAEb,CACA,oBAAAqU,GACI1e,MAAM0e,uBACN,MAAMC,EAAsBnqB,KAAKmqB,oBACjC,EAAAlG,IAAIC,YAAY,KACPiG,IAELnqB,KAAK8C,UACL9C,KAAKqW,8BAEb,CACA,SAAAxG,GACI,MAAMC,EAAOtE,MAAMqE,YAiBnB,OAhBAC,EAAKsa,oBAAsB,CAAC,EACxBpqB,KAAKoqB,qBACLziB,OAAOoI,KAAK/P,KAAKoqB,qBAAqBpa,QAAS3K,IACE,mBAAlCrF,KAAKoqB,oBAAoB/kB,GAChCyK,EAAKsa,oBAAoB/kB,GAAOrF,KAAKoqB,oBAAoB/kB,GAAK4K,KAAKH,GAEtD,eAARzK,GAAwBrF,KAAKoqB,oBAAoB/kB,GAAKgF,OAC3DyF,EAAKsa,oBAAoB/kB,GAAOrF,KAAKuyB,iBAAiBltB,EAAKyK,GAG3DA,EAAKsa,oBAAoB/kB,GAAO6K,gBAAgBlQ,KAAKoqB,oBAAoB/kB,MAIrFyK,EAAKua,qBAAuBna,gBAAgBlQ,KAAKqqB,sBACjDva,EAAKwC,QAAUpC,gBAAgBlQ,KAAKsS,SAC7BxC,CACX,CACA,gBAAAyiB,CAAiBltB,EAAKyK,GAClB,OAAO9P,KAAKoqB,oBAAoB/kB,GAAKuO,IAAK4e,IACtC,MAAMC,EAAiB,CAAC,EASxB,OARA9qB,OAAOoI,KAAKyiB,GAAkBxiB,QAAS0iB,IACO,mBAA/BF,EAAiBE,GACxBD,EAAeC,GAAYF,EAAiBE,GAAUziB,KAAKH,GAG3D2iB,EAAeC,GAAYxiB,gBAAgBsiB,EAAiBE,MAG7DD,GAEf,CASA,IAAA3yB,CAAKyV,GACD,OAAO,QAAUvV,UAAM,OAAQ,EAAQ,YACnCA,KAAK+T,MAAM,IAAqBoY,WAAY,CACxC5W,4BACApJ,QAASxE,OAAOC,OAAO,CAAEujB,SAAWprB,GAAWA,EAAOyB,KAAKxB,KAAKyR,QAAUzR,KAAKoqB,uBAGnFpqB,KAAKoF,iBAAiB,IAAqBgnB,MAAQvrB,IAAU,QAAUb,UAAM,OAAQ,EAAQ,YACzF,MAAM,WAAEyb,GAAe5a,EAAMkC,OAC7B/C,KAAKyb,WAAaA,QACZzb,KAAK2yB,kBACf,GAAI,CAAEpF,MAAM,IAEZvtB,KAAK4yB,UAAY5yB,KAAKwR,OACjBqhB,MAAK,EAAAC,EAAA,GAAK,IAAI,EAAAC,EAAA,GAFQ,MAE0B,EAAAC,EAAA,GAAKC,GAAMzK,EAAA,EAAOnC,MAAM,wBAAyB4M,KACjGhd,UAAWgH,IACZjd,KAAKoW,sBAEb,EACJ,CAKA,OAAAtT,GACI,IAAIyB,EACJikB,EAAA,EAAOnC,MAAM,qCAAsCrmB,KAAKmS,cACpDnS,KAAKkzB,UACLlzB,KAAKkzB,QAAQld,cACbhW,KAAKkzB,aAAU/xB,GAEfnB,KAAK4yB,YACL5yB,KAAK4yB,UAAU5c,cACfhW,KAAK4yB,eAAYzxB,GAEjBnB,KAAK+V,gBACL/V,KAAK+V,cAAcC,cACnBhW,KAAK+V,mBAAgB5U,GAEzBnB,KAAKmzB,gBAAahyB,EAClBnB,KAAKwqB,eACLxqB,KAAK8xB,eAAgB,EACrB9xB,KAAK+xB,mBAAoB,EACzB/xB,KAAKgyB,YAAc,EACnBhyB,KAAKiyB,eAAiB,EACtBjyB,KAAK+T,MAAM,IAAqBjR,SAChC9C,KAAK6xB,+BAAgC,EACrC7xB,KAAKsV,qBAAsB,EAC3BtV,KAAKsR,oBAAsB,IAAIC,IACR,QAAtBhN,EAAKvE,KAAKwR,cAA2B,IAAPjN,GAAyBA,EAAGyR,cAC3DhW,KAAKwR,OAAS,IAAI4hB,EAAA,EAAgB,IAAI7hB,KACtCvR,KAAKmW,iBAAgB,GAErBnW,KAAKmT,WAAWrQ,SACpB,CAMA,MAAAuwB,GACI7K,EAAA,EAAOnC,MAAM,oCAAqCrmB,KAAKmS,cACvDnS,KAAK8C,SACT,CAMA,KAAAwwB,GACI9K,EAAA,EAAOnC,MAAM,mCAAoCrmB,KAAKmS,cACtDnS,KAAK8C,SACT,CAKA,OAAA2X,GACI,OAAO,QAAUza,UAAM,OAAQ,EAAQ,YACnCA,KAAK8C,gBACC9C,KAAKF,KAAKE,KAAKuV,0BACzB,EACJ,CAIA,WAAAge,GACIvzB,KAAKwzB,uBACLxzB,KAAKyzB,eAAezzB,KAAK4xB,eAC7B,CAOA,YAAApH,CAAakD,GAAiB,GAC1B1tB,KAAKwV,QAAU,IAAIjE,IACnBvR,KAAK4xB,eAAiB,GACtB5xB,KAAKyV,gBAAkB,CAAEC,IAAK,GAAIC,OAAQ,GAAInE,OAAQ,GAAI0G,SAAU,GAEpElY,KAAK+T,MAAM,IAAqB4Z,YAAa,CACzCC,cAAeF,IAAmB1tB,KAAKuV,2BAE/C,CAMA,UAAAme,CAAWle,GACP,OAAO,QAAUxV,UAAM,OAAQ,EAAQ,YACnC,MAAM2sB,QAAqB3sB,KAAK4sB,gBAAgB5sB,KAAKmT,WAAWsZ,eAC5DE,GACA3sB,KAAK+T,MAAM,IAAqB8Y,cAAe,CAC3CC,OAAQH,EACRI,SAAU/sB,KAAKmT,WAAWsZ,gBAGlC,MAAMjrB,EAAOxB,KAAKua,cAAgBva,KAAKua,cAAc/E,GAAWA,EAChExV,KAAK+T,MAAM,IAAqBuZ,iBAEhCttB,KAAKyV,gBAAkB,CAAEC,IAAKlU,EAAO,IAAIA,GAAQ,GAAImU,OAAQ,GAAInE,OAAQ,GAAI0G,SAAU,GACvFlY,KAAK2zB,gBAAgB3zB,KAAKyV,iBAE1BzV,KAAKwzB,uBACLxzB,KAAK6xB,+BAAgC,CACzC,EACJ,CAKA,oBAAA2B,GACIxzB,KAAK4xB,eAAiBpf,MAAMC,KAAKzS,KAAKwV,QAAQ5Q,SAClD,CAKA,cAAA6uB,CAAejyB,EAAMoyB,GAAgB,GACjC5zB,KAAK+T,MAAM,IAAqBsd,WAAY,CACxC7vB,OACAoyB,iBAER,CAKA,eAAAD,CAAgB5Z,GACZ/Z,KAAK+T,MAAM,IAAqBoG,YAAa,CACzCC,QAASL,IAEa,IAAtB/Z,KAAKwV,QAAQiE,MACZM,EAAYrE,IAAIrL,QAChB0P,EAAYvI,OAAOnH,QACnB0P,EAAYpE,OAAOtL,OAIpBrK,KAAK+T,MAAM,IAAqByF,iBAHhCxZ,KAAK+T,MAAM,IAAqB2F,gBAKxC,CAQA,kBAAAtD,GACI,OAAO,QAAUpW,UAAM,OAAQ,EAAQ,YACnCwoB,EAAA,EAAOnC,MAAM,gDAAiDrmB,KAAKmS,cAC/DnS,KAAKkzB,UACLlzB,KAAKkzB,QAAQld,cACbhW,KAAKkzB,aAAU/xB,GAGnBnB,KAAKgyB,YAAc,EACnBhyB,KAAKiyB,eAAiB,EACtBjyB,KAAKmT,WAAW0gB,oBAAoB,GACpC7zB,KAAKmT,WAAW2V,YAAS3nB,EACzBnB,KAAKwqB,aArTS,MAsTdxqB,KAAK+T,MAAM,IAAqB6W,gBAChC5qB,KAAKmW,iBAAgB,SACfnW,KAAK2yB,iBAzTC,KA0ThB,EACJ,CASA,gBAAAA,GACI,OAAO,QAAU3yB,KAAMyL,eAAW,EAAQ,UAAWqoB,GAAe,GAChE,MAAMC,EAAwBD,IAAiB9zB,KAAKmT,WAAW+e,YAC/D,IAGI,WADqBlyB,KAAKkU,qBAAqBlU,KAAKuD,oBAAqBwwB,GAAuB,IAI5F,OAFAvL,EAAA,EAAOnC,MAAM,sCAAsCrmB,KAAKmS,qBACxDnS,KAAKwqB,eAIT,GADAxqB,KAAK+T,MAAM,IAAmCsY,UAC1CrsB,KAAKuQ,WAAY,CACjB,MAAMoU,QAAe3kB,KAAKmT,WAAWkR,WACrC,GAAIM,EAAQ,CACR,MAAMnP,EAAUxV,KAAKg0B,eAAerP,GACpC3kB,KAAK0zB,WAAWle,EACpB,CACA,MACJ,CACAgT,EAAA,EAAOnC,MAAM,uBAAuBrmB,KAAKmS,sBACnCnS,KAAKmT,WAAWkB,cACtBrU,KAAKkzB,QAAUlzB,KAAKmT,WAAW2V,OAC1B+J,MAAK,EAAAoB,EAAA,GAAYC,IAClB,IAAI3vB,EAGJ,OADAvE,KAAKwT,cAAuF,QAAxEjP,EAAK2vB,aAAiC,EAASA,EAAIhL,uBAAoC,IAAP3kB,OAAgB,EAASA,EAAG4kB,SAAW+K,aAAiC,EAASA,EAAIxgB,UAAYwgB,EAAK,UACnM,OAENje,UAAW0O,IACZ3kB,KAAKmzB,WAAaxO,EAAOa,WACzB,MAAMqC,EAAsB,cAAelD,EACrCwP,EAAuB,eAAgBxP,EACvCyP,EAAwBp0B,KAAKmT,WAAWkhB,eAAiB,IAAahhB,gBAAkB,gBAAiBsR,EAC/G3kB,KAAK+xB,kBAAoBlK,IAAwBsM,EAE7CC,IACAp0B,KAAKgyB,YAAcrN,EAAOuD,cAE1BvD,aAAuC,EAASA,EAAOwE,QACvDnpB,KAAKwT,aAAamR,EAAOwE,MAAO,YAEpC,MAAMvE,EAAcD,EAAOE,aAC3B,GAAID,GAAeA,IAAgB,KAAYE,WAG3C,OAFA9kB,KAAKwT,aAAa,0BAA0BxT,KAAKmS,6BAA8B,mBAC/EnS,KAAKsV,qBAAsB,GAO/B,GAJAtV,KAAKsV,qBAAsB,EACvBuS,GACA7nB,KAAKs0B,qBAAqB3P,EAAOM,UAAWN,EAAOa,YAEnDb,EAAOH,IAAK,CACZ,MAAMW,GAAc,EAAAC,EAAAC,GAAuBV,GAE3C,GADA3kB,KAAKu0B,mBAAmBpP,GACpB0C,GAAuBlD,EAAOM,YAAcjlB,KAAK8xB,cAAe,CAChE,MAAM0C,EAAiB,CACnBzW,SAAU4G,EAAOM,UACjBrF,UAAW+E,EAAOa,YAEtBxlB,KAAK+T,MAAM,IAAmC0d,gBAAiB+C,GAC/Dx0B,KAAK8xB,cAAgBnN,EAAOM,SAChC,CACJ,MAEIjlB,KAAKu0B,mBAAmB5P,IAGpC,CACA,MAAOlf,GACH,IAAI,QAAEiO,GAAYjO,EACdA,EAAMyjB,kBACNxV,EAAUjO,EAAMyjB,gBAAgBC,OAEpCX,EAAA,EAAO/iB,MAAMiO,GAEb1T,KAAKwT,aAAaE,EAAS,UAC/B,CACJ,EACJ,CACA,cAAAsgB,CAAerP,GACX,OAAInS,MAAMmB,QAAQgR,GACPA,EACPA,EAAOsD,MACAtD,EAAOsD,MAEdtD,EAAOH,KACA,EAAAY,EAAAC,GAAuBV,GAAQ4B,QAEnC5B,EAAO4B,OAClB,CACA,kBAAAgO,CAAmB5P,GACVA,IAED3kB,KAAK2R,gBACL3R,KAAKy0B,uBAAuB9P,GAG5B3kB,KAAK00B,oBAAoB/P,GAEjC,CASA,oBAAA2P,CAAqBvW,EAAU6B,GAC3B5f,KAAK+T,MAAM,IAAqBud,kBAAmB,CAC/CqD,YAAa5W,EACb6B,aAER,CACA,sBAAA6U,CAAuBG,GACnB,IAAIrwB,EACJ,MAAMswB,EAAe70B,KAAKwV,QAAQiE,KAC5Bqb,EAAoBF,EAAoB3M,MAC9C,IAAKzV,MAAMmB,QAAQmhB,MAC+B,QAA3CvwB,EAAKqwB,EAAoB/P,oBAAiC,IAAPtgB,OAAgB,EAASA,EAAGuqB,WAAW,SAE7F,YADAtG,EAAA,EAAO/iB,MAAM,uCAAwCmvB,GAGzD,GAAI50B,KAAK6xB,8BAA+B,CACpC,IAAIkD,GAAe,EACnB,IAAK,MAAM3c,KAAc0c,GAAqB,GAAI,CAC9C,MAAMxM,EAAkBlQ,EAAWpY,KAAKyR,OACxC,IAAK6W,EAAiB,CAClB,IAAKyM,EAAc,CACf,MAAMxM,EAAiB,wBAAwBvoB,KAAKyR,8JACpD+W,EAAA,EAAO/iB,MAAM8iB,GACbwM,GAAe,CACnB,CACA,KACJ,CACA/0B,KAAKwV,QAAQzC,IAAIuV,EAAiBlQ,EACtC,CACA,GAAI2c,EAEA,YADA/0B,KAAK8C,UAIT9C,KAAKwzB,uBACL,MAAMhe,EAAUxV,KAAKwV,QAAQiE,KAAO,EAAIzZ,KAAK4xB,eAAiBkD,EAG9D,OAFA90B,KAAKg1B,kBAAkBH,EAAc70B,KAAKwV,QAAQiE,WAClDzZ,KAAK0zB,WAAWle,EAEpB,CACA,MAAMyZ,EAAe,GAErBjvB,KAAKwzB,uBACL,MAAMrE,EAAenvB,KAAK4xB,eAAe7Z,OAAQgX,IAC7C,MAAMkG,EAAQH,EAAkBrsB,KAAMjH,GAASA,EAAKxB,KAAKyR,SAAWsd,EAAI/uB,KAAKyR,QAC7E,OAAIwjB,IACAhG,EAAaxW,KAAKwc,IACX,KAIT/F,EAAe4F,EAAkB/c,OAAQvW,IAAUxB,KAAKwV,QAAQ6C,IAAI7W,EAAKxB,KAAKyR,SACpFzR,KAAKyV,gBAAkB,CAAEC,IAAK,GAAIC,OAAQ,GAAInE,OAAQ,IACtDxR,KAAKgY,oBAAoBkX,GACzBlvB,KAAK0Y,oBAAoByW,GACzBnvB,KAAKgZ,oBAAoBiW,GACzBjvB,KAAK2zB,gBAAgB3zB,KAAKyV,iBAC1BzV,KAAKg1B,kBAAkBH,EAAc70B,KAAKwV,QAAQiE,KACtD,CACA,mBAAAib,CAAoBQ,GAChB,IAAI3wB,EACJ,MAAMswB,EAAe70B,KAAKwV,QAAQiE,KAClC,GAAIzZ,KAAK6xB,8BAQL,OAPoC,QAAnCttB,EAAK2wB,EAAiB3O,eAA4B,IAAPhiB,GAAyBA,EAAGyL,QAASoI,IAC7EpY,KAAKwV,QAAQzC,IAAIqF,EAAWpY,KAAKyR,OAAQ2G,KAG7CpY,KAAKwzB,uBACLxzB,KAAK0zB,WAAW1zB,KAAK4xB,qBACrB5xB,KAAKg1B,kBAAkBH,EAAc70B,KAAKwV,QAAQiE,MAGtDzZ,KAAKyV,gBAAkB,CAAEC,IAAK,GAAIC,OAAQ,GAAInE,OAAQ,IACtDxR,KAAKgY,oBAAoBkd,EAAiB3O,SAC1CvmB,KAAK0Y,oBAAoBwc,EAAiBpF,SAC1C9vB,KAAKgZ,oBAAoBkc,EAAiBrF,SAC1C7vB,KAAK2zB,gBAAgB3zB,KAAKyV,iBAC1BzV,KAAKg1B,kBAAkBH,EAAc70B,KAAKwV,QAAQiE,KACtD,CAEA,eAAAmT,CAAgBrW,GACZ,OAAO,QAAUvW,UAAM,OAAQ,EAAQ,YAGnC,OAF+BA,KAAKsW,+BAA+BC,EAAgBmb,EAAsCjb,EAG7H,EACJ,CACA,SAAA7D,CAAUC,EAAWC,GACjB9S,KAAKsR,oBAAoByB,IAAIF,EAAWC,GACxC9S,KAAKwR,OAAOwB,KAAKhT,KAAKsR,oBAC1B,CACA,YAAA2B,CAAaJ,GACT7S,KAAKsR,oBAAoB4B,OAAOL,GAChC7S,KAAKwR,OAAOwB,KAAKhT,KAAKsR,oBAC1B,CACA,gBAAA+I,CAAiBN,GACb/Z,KAAK2zB,gBAAgB5Z,EACzB,CACA,iBAAAib,CAAkBG,EAASC,GACnBD,IAAYC,GAEhBp1B,KAAK+T,MAAM,IAAmCwd,YAAa,CACvDtxB,MAAOm1B,EACP/rB,SAAU8rB,GAElB,CACA,mBAAAnd,CAAoBuO,EAAU,IAC1B/a,MAAMwM,oBAAoBuO,EAASvmB,KAAK+xB,kBAAoB/xB,KAAK4xB,eAAevnB,OAAS,GACzFrK,KAAKwzB,sBACT,CACA,mBAAAxa,CAAoB6W,EAAU,IAC1BrkB,MAAMwN,oBAAoB6W,GAC1B7vB,KAAKwzB,sBACT,CAKA,mBAAA9a,CAAoBoX,EAAU,IAC1BtkB,MAAMkN,oBAAoBoX,GAC1B9vB,KAAKwzB,sBACT,CACA,QAAAhZ,GACI,OAAQxa,KAAKmT,WAAWkhB,cACpB,KAAK,IAAagB,WACd,IAAIjjB,EACApS,KAAKoS,YACLpS,KAAKiyB,gBAAkBjyB,KAAKoS,WAAa,EACzCA,EAAapS,KAAKiyB,gBAGlBjyB,KAAKiyB,gBAAkB,EAE3BjyB,KAAKsU,QAAQwP,YAAY9jB,KAAKmzB,WAAY/gB,GAC1C,MACJ,KAAK,IAAaiB,eACdrT,KAAKiyB,gBAAkB,EAY/BjyB,KAAKmT,WAAW0gB,oBAAoB7zB,KAAKiyB,eAC7C,IAEJ,QAAW,EACP,IAAAld,MAAK,CAAEC,KAAM,UAAWC,UAAW,qCACpC0c,EAAyBjwB,UAAW,iCAA6B,GACpEiwB,GAA2B,QAAW,EAClC,IAAAniB,eAAc,CACVpD,KAAM,iCAEXulB,E,mJCplBI,SAAS2D,EAAoB7tB,EAAOya,GACvC,MAAmB,wBAAfA,EACO,CACH3B,QAAS,CACL,CACIxI,OAAQ,sBAEZ,CACIA,OAAQ,oBACRnB,aAAc,CACVhS,OAAQ6C,EAAMiQ,gBAMf,sBAAfwK,EACO,CACHtd,OAAQ6C,EAAMiQ,kBAFtB,CAMJ,CAQO,SAAS6d,EAAcC,GAC1B,OAAQA,aAAmD,EAASA,EAAahZ,eAC7E,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,aACL,IAAK,SACD,MAAO,gBAEnB,CAOO,SAASiZ,GAAmB,MAAEx1B,IACjC,OAAO,QAAoBA,EAC/B,CAOO,SAASy1B,GAAuB,MAAEz1B,IACrC,OAAO,QAAwBA,EACnC,CAUO,SAAS01B,EAAgBC,GAC5B,OAAO,IAAIrY,KAAKqY,GACXC,cACAC,MAAM,EAXa,IAYnBxU,QAAQ,KAAM,IACdA,QAAQ,IAAK,IACtB,CAKO,MAAMyU,EAAwB,EAKxBC,EAAoB,CAC7BC,qBAAsB,0BAMbC,EAAoB,CAC7B/iB,WAAY,aACZgjB,QAAS,WAOAC,EAAgB,CACzB,eACA,yBACA,wBACA,kBACA,eACA,WACA,YACA,qBACA,oBACA,eACA,yBACA,iBACA,iBACA,sBACA,sBACA,mBACA,sBACA,mBACA,aACA,sBACA,WACA,UACA,qBACA,aACA,QACA,aACA,uBACA,qBACA,yBACA,WACA,8BACA,qBACA,gBACA,yBACA,2BACA,cACA,gBACA,2BACA,4BACA,gCACA,+BACA,cACA,YACA,UACA,sBACA,oBACA,qBACA,eACA,eACA,aACA,cACA,mBACA,sBACA,cACA,WACA,YACA,kBACA,YACA,eACA,oBACA,wBACA,oBACA,yBACA,uBACA,2BACA,6BACA,kBACA,mBACA,kCACA,mBACA,mBACA,oBACA,qBACA,iBACA,0BACA,4BACA,iBACA,6BACA,0BACA,sBACA,2BACA,iBACA,gBACA,WACA,wCACA,4BACA,wBACA,oBACA,2BACA,6BACA,2BACA,QACA,wBACA,wBACA,uBACA,qBACA,0BACA,2BACA,mBACA,yBACA,aACA,oBACA,kBACA,kBACA,yBACA,wBACA,mBACA,uBACA,4BACA,8BACA,yBACA,2BACA,uBACA,oBACA,mBACA,+BACA,YACA,gBACA,sBACA,iCACA,sBACA,gCACA,wBACA,gCACA,+BACA,6BACA,qCACA,8BACA,yBACA,8BACA,YACA,0BACA,+BACA,yBACA,4BACA,mBACA,oBACA,cACA,uBACA,4BACA,kCACA,YACA,oBACA,mBACA,iBACA,kBACA,8BACA,kBACA,kBACA,qBACA,0BACA,uBACA,uBACA,aACA,yBACA,0BACA,kCACA,sBACA,mBACA,sCACA,iBACA,eACA,0BACA,aACA,yBACA,8BACA,yBACA,sBACA,oBACA,WACA,eACA,8BACA,0BACA,iBACA,6BACA,0BACA,4BACA,uBACA,yBACA,+BACA,eACA,8BACA,gCACA,gCACA,0BACA,gCACA,oCACA,uCACA,oBACA,iBACA,oBACA,8BACA,sBACA,gCACA,gBACA,0BACA,gCACA,4BACA,sBACA,kCACA,gCACA,0BACA,4BACA,yBACA,2BACA,0BACA,kBACA,uBACA,4CACA,gCACA,sBACA,qBACA,uBACA,UACA,kBACA,eACA,4BACA,+BACA,uBACA,4CACA,+BACA,kBACA,mCACA,4BACA,6BACA,yBACA,iBACA,yBACA,mBACA,kBACA,yBACA,8BACA,2BACA,gCACA,wBACA,kBACA,WACA,8BACA,cACA,mBACA,4BACA,wBACA,iCACA,sBACA,+BACA,0BACA,mCACA,yBACA,kCACA,qBACA,8BACA,gBACA,0BACA,eACA,cACA,cACA,sBACA,mBACA,uBACA,0BACA,iBACA,eACA,iBACA,kBACA,uBACA,kBACA,qBACA,gBACA,2BACA,cACA,mBACA,gBACA,cACA,cACA,eACA,4BACA,iCACA,4BACA,2BACA,wBACA,oBACA,uBACA,uBACA,gBACA,+BACA,2BACA,gCACA,iCACA,uBACA,8BACA,8BACA,WACA,qBAOSC,EAAuB,CAChC,YACA,kBACA,YACA,eACA,oBACA,wBACA,oBACA,yBACA,uBACA,2BACA,6BACA,kBACA,mBACA,kCACA,mBACA,mBACA,oBACA,qBACA,iBACA,0BACA,4BACA,iBACA,6BACA,0BACA,sBACA,2BACA,iBACA,gBACA,YAOSC,EAAwB,CACjC,wCACA,4BACA,wBACA,oBACA,2BACA,6BACA,2BACA,QACA,wBACA,wBACA,uBACA,qBACA,0BACA,2BACA,mBACA,yBACA,aACA,oBACA,kBACA,kBACA,yBACA,wBACA,mBACA,uBACA,4BACA,8BACA,yBACA,2BACA,uBACA,oBACA,mBACA,+BACA,YACA,gBACA,sBACA,iCACA,sBACA,gCACA,wBACA,gCACA,+BACA,6BACA,qCACA,8BACA,yBACA,8BACA,YACA,0BACA,+BACA,yBACA,4BACA,mBACA,oBACA,cACA,uBACA,4BACA,kCACA,YACA,oBACA,mBACA,iBACA,kBACA,8BACA,kBACA,kBACA,qBACA,0BACA,uBACA,uBACA,aACA,yBACA,0BACA,kCACA,sBACA,mBACA,sCACA,iBACA,eACA,0BACA,aACA,yBACA,8BACA,yBACA,sBACA,oBACA,WACA,eACA,8BACA,0BACA,iBACA,6BACA,0BACA,4BACA,uBACA,yBACA,+BACA,eACA,8BACA,gCACA,gCACA,0BACA,gCACA,oCACA,uCACA,oBACA,iBACA,oBACA,8BACA,sBACA,gCACA,gBACA,0BACA,gCACA,4BACA,sBACA,kCACA,gCACA,0BACA,4BACA,yBAC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","sources":["webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/date.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/multiselect.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/number.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/select.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/string.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/action.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/actions-menu.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/boolean.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/editable.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/icon.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/select.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/status-pill.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/text-field.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/text.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/utils/accessor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell/cell.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell/cell.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/column/column.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/column/column.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/base.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/base.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/client-side.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/error-handler.dialog.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.grid-definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-base.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-dataserver.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-reqrep.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-head-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/fonts.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-grid-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-alpine-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-balham-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-material-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/index.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/datasource-events.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/grid-pro-genesis-datasource.config.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/client-side.grid-definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/grid-pro-genesis-datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.styles.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/state-persistence/local-state.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/state-persistence/state-persistence.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/label-value.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/load-more.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/pagination.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/reload.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/row-count.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/tooltips/error-tooltip.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/array.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/error.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/logger.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/map.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/string.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/mixins/lifecycle/lifecycle.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/delay.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/dom.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/logger.js"],"sourcesContent":["import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\ndayjs.extend(utc);\n/**\n * The AG Date Editor element.\n * @public\n * @tagname %%prefix%%-date-editor\n */\nexport class DateEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.dateFormat = params.withTime ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD';\n this.inputType = params.withTime ? 'datetime-local' : 'date';\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n changeHandler(event) {\n const dateValue = event.target.control.valueAsNumber;\n this.value = !isNaN(dateValue) ? dateValue : undefined;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], DateEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], DateEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agDateEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param prefix - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getDateEditorTemplate = (prefix = 'foundation') => html `\n <${prefix}-text-field\n ${ref('input')}\n :value=${(x) => x.value === undefined || x.value === null ? '' : dayjs.utc(x.value).format(x.dateFormat)}\n type=${(x) => x.inputType}\n @input=${(x, c) => x.changeHandler(c.event)}\n style=\"width: ${(x) => x.actualWidth}px\"\n ></${prefix}-text-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-editor\\>\n */\nexport const foundationDateEditor = DateEditor.compose({\n baseName: 'date-editor',\n styles: agDateEditorStyles,\n template: getDateEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Multiselect Editor element.\n * @public\n * @tagname %%prefix%%-multiselect-editor\n */\nexport class MultiselectEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.selectedOptions = params.value;\n // DATASERVER does not support array type so selected options could be fetched from another resource\n if (this.params.selectedOptionsCallback) {\n this.params.selectedOptionsCallback(this.params.data).then((selectedOptions) => {\n this.selectedOptions = selectedOptions;\n });\n }\n // if value was provided as string component will assume it's in csv syntax\n if (typeof params.value === 'string') {\n this.selectedOptions = params.value.split(',');\n }\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.selectedOptions;\n }\n isPopup() {\n return true;\n }\n changeHandler(event) {\n this.selectedOptions = event.detail;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], MultiselectEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], MultiselectEditor.prototype, \"selectedOptions\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agMultiselectEditorStyles = css ``;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getMultiselectEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-multiselect\n style=\"width: 100%\"\n ?async=${(x) => x.params.async}\n :selectedOptions=${(x) => x.selectedOptions || []}\n @selectionChange=${(x, c) => x.changeHandler(c.event)}\n >\n <multiselect-datasource\n resourceName=${(x) => x.params.allOptionsResourceName}\n value-field=${(x) => x.params.valueField}\n label-field=${(x) => x.params.labelField}\n :datasourceConfig=${(x) => x.params.datasourceOptions}\n ></multiselect-datasource>\n </${designSystem}-multiselect>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-multiselect-editor\\>\n */\nexport const foundationMultiselectEditor = MultiselectEditor.compose({\n baseName: 'multiselect-editor',\n styles: agMultiselectEditorStyles,\n template: getMultiselectEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Number Editor element.\n * @public\n * @tagname %%prefix%%-number-editor\n */\nexport class NumberEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n changeHandler(event) {\n const value = parseFloat(event.target.value);\n this.value = !isNaN(value) ? value : undefined;\n if (this.params.onChange)\n this.params.onChange(this.value, this.params);\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], NumberEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], NumberEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], NumberEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Number Editor Styles.\n * @public\n */\nexport const agNumberEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getNumberEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-number-field\n ${ref('input')}\n withFormatting=${(x) => x.params.withFormatting}\n :options=${(x) => x.params.formatOptions}\n :value=${(x) => (x.value === undefined ? '' : String(x.value))}\n @input=${(x, c) => {\n x.changeHandler(c.event);\n}}\n placeholder=${(x) => x.params.placeholder}\n ?disabled=${(x) => x.params.disabled}\n hideStep\n style=\"width: ${(x) => x.actualWidth}px\"\n ></${designSystem}-number-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-number-editor\\>\n */\nexport const foundationNumberEditor = NumberEditor.compose({\n baseName: 'number-editor',\n styles: agNumberEditorStyles,\n template: getNumberEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Select Editor element.\n * @public\n * @tagname %%prefix%%-select-editor\n */\nexport class SelectEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.combobox.open = true;\n }\n changeHandler(event) {\n var _a;\n this.value = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.value;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], SelectEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], SelectEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], SelectEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agSelectEditorStyles = css ``;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getSelectEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-combobox\n style=\"width: ${(x) => x.actualWidth}px\"\n ${ref('combobox')}\n position=${(x) => (x.params.position ? x.params.position(x.params.data) : '')}\n ?async=${(x) => x.params.async}\n @value-change=${(x, c) => x.changeHandler(c.event)}\n >\n <options-datasource\n resourceName=${(x) => x.params.allOptionsResourceName}\n value-field=${(x) => x.params.valueField}\n label-field=${(x) => x.params.labelField}\n option-element=\"${designSystem}-option\"\n ?allow-custom-options=${(x) => x.params.allowCustomOptions}\n :datasourceConfig=${(x) => x.params.datasourceOptions}\n :data=${(x) => x.params.values}\n :initialSelectedValue=${(x) => x.params.value}\n ></options-datasource>\n </${designSystem}-combobox>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-editor\\>\n */\nexport const foundationSelectEditor = SelectEditor.compose({\n baseName: 'select-editor',\n styles: agSelectEditorStyles,\n template: getSelectEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG String Editor element.\n * @public\n * @tagname %%prefix%%-string-editor\n */\nexport class StringEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n changeHandler(event) {\n this.value = event.target.value;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], StringEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], StringEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], StringEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG String Renderer Styles.\n * @public\n */\nexport const agStringEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed String template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A String component template prefixed with the correct design system.\n * @public\n */\nexport const getStringEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-text-field\n ${ref('input')}\n :value=${(x) => (x.value === undefined ? '' : x.value)}\n @input=${(x, c) => {\n x.changeHandler(c.event);\n}}\n placeholder=${(x) => x.params.placeholder}\n style=\"width: ${(x) => x.actualWidth}px\"\n >\n </${designSystem}-text-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-string-editor\\>\n */\nexport const foundationStringEditor = StringEditor.compose({\n baseName: 'string-editor',\n styles: agStringEditorStyles,\n template: getStringEditorTemplate(),\n});\n","import { __awaiter, __decorate } from \"tslib\";\nimport { KeyCode } from '@ag-grid-community/core';\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { DesignToken, FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\n/**\n * The AG Action Renderer element.\n * @public\n * @tagname %%prefix%%-grid-pro-action-renderer\n */\nexport class ActionRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n params.eGridCell.addEventListener('keydown', (event) => {\n if (event.key === KeyCode.ENTER) {\n this.clickHandler();\n }\n });\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n clickHandler() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.params.actionClick)\n return;\n this.pendingAction = true;\n yield this.params.actionClick(this.params.data);\n this.pendingAction = false;\n });\n }\n get dataTestId() {\n var _a, _b;\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.dataTestId) {\n return this.params.dataTestId + ((_b = this.params.data[this.params.uniqueFieldName]) !== null && _b !== void 0 ? _b : '');\n }\n return undefined;\n }\n}\n__decorate([\n observable\n], ActionRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], ActionRenderer.prototype, \"pendingAction\", void 0);\nconst { create } = DesignToken;\n/**\n * The base height multiplier for the action renderer.\n * @remarks Results in `--action-height-multiplier`. This is a DesignToken {@link https://www.fast.design/docs/design-systems/design-tokens/#what-is-a-design-token} value. Defaults to `0.6px`. May have other values depending on the design system or can be set to a different value.\n * @public\n */\nexport const actionHeightMultiplier = create('action-height-multiplier').withDefault('0.6px');\n/**\n * The AG Action Renderer Styles.\n * @public\n */\nexport const agActionRendererStyles = css `\n .action-container {\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: center;\n }\n .action-renderer {\n align-self: center;\n display: flex;\n height: calc(\n (var(--base-height-multiplier) + var(--density)) * var(--design-unit) *\n var(--action-height-multiplier)\n );\n }\n`;\n/**\n * A function that returns a Foundation Action Renderer for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-action-renderer\\>\n */\nexport const foundationGridProActionRenderer = ActionRenderer.compose({\n baseName: 'grid-pro-action-renderer',\n styles: css `\n ${agActionRendererStyles}\n `,\n template: html `\n <div class=\"action-container\" part=\"action-container\">\n <foundation-button\n class=\"action-renderer\"\n part=\"action-renderer\"\n style=\"${(x) => x.params.actionButtonStyle || ''}\"\n data-test-id=\"${(x) => x.dataTestId}\"\n ?disabled=${(x) => { var _a; return x.pendingAction || x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n appearance=\"${(x) => x.params.appearance}\"\n @click=${(x) => x.clickHandler()}\">${(x) => x.params.actionName}</foundation-button>\n </div>`,\n});\n","import { __decorate } from \"tslib\";\nimport { html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { GridProRendererTypes } from '../grid-pro.types';\nimport { convertToKebabCase } from '../utils';\n/**\n * The Actions Menu Renderer element.\n * @remarks For multiple actions scenarios.\n * @public\n * @tagname %%prefix%%-grid-pro-actions-menu-renderer\n */\nexport class ActionsMenuRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return false;\n }\n}\n__decorate([\n observable\n], ActionsMenuRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Actions Menu for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-actions-menu-renderer\\>\n */\nexport const foundationGridProActionsMenuRenderer = ActionsMenuRenderer.compose({\n baseName: 'grid-pro-actions-menu-renderer',\n template: html `\n <foundation-actions-menu\n name=\"${(x) => x.params.headerName}\"\n :definition=${(x) => x.params}\n ></foundation-actions-menu>\n `,\n});\n/**\n * Helper function to get ColDef {@link https://www.ag-grid.com/javascript-data-grid/column-properties/} for Actions Menu Renderer.\n * Will take the parameter values for a base ColDef and merge them with the overrideDef (if specified).\n * @param actions - Array of `ActionMenuItem` to be displayed in the menu.\n * @param overrideDef - Optional override for the ColDef. Will override any of the default values. Default is an empty object.\n * @param customActionsOpenerName - Optional custom name for the button that opens the menu. Default is '⋮'.\n * @param isVertical - Optional flag to display the menu vertically. Default is false (displays the menu horizontally, follow the rowHeight).\n * @param buttonAppearance - Optional appearance for the button that opens the menu. Default is 'outline'.\n * @returns Merged ColDef (base ColDef created from the parameters + overrideDef) for Actions Menu Renderer.\n * @example\n * ```ts\n * public exampleActionsMenuDef: ColDef = getActionsMenuDef(\n * [\n * {\n * name: 'View',\n * callback: (rowData) => logger.debug('VIEWW!!!', rowData),\n * },\n * {\n * name: 'Delete',\n * callback: (rowData) => logger.debug('DELETE!!!', rowData),\n * },\n * ],\n * {\n * headerName: 'Instrument Actions',\n * width: 180,\n * },\n * '+',\n * true,\n * 'primary-gradient'\n * );\n * ```\n * @public\n */\nexport const getActionsMenuDef = (actions, overrideDef = {}, customActionsOpenerName = '⋮', isVertical = false, buttonAppearance) => {\n const actionsMenuDef = {\n cellRenderer: GridProRendererTypes.actionsMenu,\n cellRendererParams: {\n actions,\n buttonAppearance,\n isVertical,\n buttonText: customActionsOpenerName,\n },\n cellStyle: { border: 'none', overflow: 'visible' },\n field: `${convertToKebabCase(overrideDef.headerName) || 'actions-menu'}`,\n headerName: 'Actions',\n // valueGetter: (params: ValueGetterParams) => {\n // params.data.actions = actions;\n // params.data.buttonText = customActionsOpenerName;\n // return null;\n // },\n width: 150,\n };\n return Object.assign(Object.assign({}, actionsMenuDef), overrideDef);\n};\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\nimport { logger } from '../utils';\n/**\n * The AG Boolean Renderer element.\n * @public\n * @tagname %%prefix%%-boolean-renderer\n */\nexport class BooleanRenderer extends FoundationElement {\n isDisabled(data) {\n var _a, _b;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return !((_b = this.params) === null || _b === void 0 ? void 0 : _b.colDef.editable);\n }\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.selected = params.value;\n }\n /** @internal */\n userInputHandler(e) {\n // Strictly prevent any event dispatch or value change if not editable\n if (!this.params.colDef ||\n (typeof this.params.colDef.editable === 'function'\n ? !('column' in this.params &&\n this.params.colDef.editable(this.params))\n : this.params.colDef.editable !== true)) {\n return;\n }\n if (e instanceof MouseEvent) {\n if (e.type !== 'click' || e.button !== 0)\n return;\n this.selected = !this.selected;\n }\n if (e instanceof KeyboardEvent) {\n if (e.type !== 'keydown' || (e.key !== ' ' && e.key !== 'Enter'))\n return;\n this.selected = !this.selected;\n }\n const editedCells = this.params.api.getEditingCells();\n const changingCurrentlyEditedCell = !!editedCells.find((cell) => cell.rowIndex === this.params.node.rowIndex &&\n cell.column.getInstanceId() === this.params.column.getInstanceId());\n if (!changingCurrentlyEditedCell) {\n // below section allows grid renderer to act as grid editor so users can edit data without requesting edit\n // heavily inspired by https://github.com/ag-grid/ag-grid/blob/latest/grid-community-modules/core/src/ts/rendering/cellRenderers/checkboxCellRenderer.ts#L104\n const { column, node, value } = this.params;\n const eventStarted = {\n type: 'cellEditingStarted',\n column: column,\n colDef: column.getColDef(),\n data: node.data,\n node,\n rowIndex: node.rowIndex,\n rowPinned: node.rowPinned,\n value,\n };\n this.params.api.dispatchEvent(eventStarted);\n const valueChanged = this.params.node.setDataValue(this.params.column, this.selected, 'edit');\n if (this.params.onChange)\n this.params.onChange(node.data);\n const eventStopped = {\n type: 'cellEditingStopped',\n column: column,\n colDef: column.getColDef(),\n data: node.data,\n node,\n rowIndex: node.rowIndex,\n rowPinned: node.rowPinned,\n value,\n oldValue: value,\n newValue: this.selected,\n valueChanged,\n };\n this.params.api.dispatchEvent(eventStopped);\n }\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n this.selected = params.value;\n return true;\n }\n getValue() {\n return this.selected;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n /** @internal */\n getDataTestId() {\n var _a;\n if (!((_a = this.params) === null || _a === void 0 ? void 0 : _a.dataTestId))\n return undefined;\n if (typeof this.params.dataTestId === 'function')\n return this.params.dataTestId(this.params.node.data);\n return this.params.dataTestId;\n }\n}\n__decorate([\n observable\n], BooleanRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], BooleanRenderer.prototype, \"selected\", void 0);\n/**\n * The AG Boolean Renderer Styles.\n * @public\n */\nexport const agBooleanRendererStyles = css `\n :host {\n align-center: center;\n display: flex;\n height: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Checkbox template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Checkbox component template prefixed with the correct design system.\n * @public\n */\nexport const getAgBooleanRendererTemplate = (designSystem = 'foundation') => {\n const checkboxComponent = `${designSystem}-checkbox`;\n return html `\n <${checkboxComponent}\n @click=${(x, c) => x.userInputHandler(c.event)}\n @keydown=${(x, c) => x.userInputHandler(c.event)}\n :checked=${(x) => x.selected}\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n data-test-id=\"${(x) => x.getDataTestId()}\"\n ></${checkboxComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Boolean Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-boolean-renderer\\>\n */\nexport const foundationAgBooleanRenderer = BooleanRenderer.compose({\n baseName: 'boolean-renderer',\n styles: agBooleanRendererStyles,\n template: getAgBooleanRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\n/**\n * The AG Editable Renderer element.\n * @public\n * @tagname %%prefix%%-editable-renderer\n */\nexport class EditableRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.valueFormatted = params.formatValue(params.value);\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.valueFormatted = params.formatValue(params.value);\n return true;\n }\n}\n__decorate([\n observable\n], EditableRenderer.prototype, \"valueFormatted\", void 0);\n/**\n * The AG Editable Renderer Styles.\n * @public\n */\nexport const agEditableRendererStyles = css `\n :host {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n`;\n/**\n * Get a Design System prefixed Checkbox template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Checkbox component template prefixed with the correct design system.\n * @public\n */\nexport const getAgEditableRendererTemplate = (designSystem = 'foundation') => {\n return html `\n <span>${(x) => x.valueFormatted}</span>\n <${designSystem}-progress-ring style=\"margin: 0; width: 20px; height: 20px\"></${designSystem}-progress-ring>\n `;\n};\n/**\n * A function that returns a Foundation Editable Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-editable-renderer\\>\n */\nexport const foundationAgEditableRenderer = EditableRenderer.compose({\n baseName: 'editable-renderer',\n styles: agEditableRendererStyles,\n template: getAgEditableRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, when } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { classNames } from '@microsoft/fast-web-utilities';\n/**\n * The AG Icon Renderer Styles.\n * @public\n */\nexport const agIconRendererStyles = css `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n position: relative;\n }\n\n .icon-container {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 5px;\n }\n\n .icon-container.with-hover {\n padding: 5px;\n line-height: 1;\n }\n\n .icon-container.with-hover:hover {\n cursor: pointer;\n background-color: var(--neutral-stroke-hover);\n }\n\n .icon-container.disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .secondary-icon {\n position: absolute;\n top: 50%;\n bottom: 0px;\n right: -5px;\n z-index: 2;\n line-height: 1;\n }\n`;\nfunction hasIconSrc(params) {\n return (!!params && typeof params.iconSrc === 'string' && params.iconSrc.length > 0);\n}\nfunction hasIconName(params) {\n return (!!params && typeof params.iconName === 'string' && params.iconName.length > 0);\n}\n/**\n * Get a Design System prefixed Icon template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns An Icon component template prefixed with the correct design system.\n * @public\n */\nexport const getIconRendererTemplate = (designSystem = 'rapid') => {\n const iconComponent = `${designSystem}-icon`;\n return html `\n <div\n class=\"icon-container ${(x) => { var _a, _b; return classNames(['with-hover', (_a = x.params) === null || _a === void 0 ? void 0 : _a.showHover], ['disabled', (_b = x.params) === null || _b === void 0 ? void 0 : _b.disabled]); }}\"\n @click=${(x, c) => {\n var _a, _b, _c;\n return !((_a = x.params) === null || _a === void 0 ? void 0 : _a.disabled) && ((_b = x.params) === null || _b === void 0 ? void 0 : _b.clickHandler)\n ? (_c = x.params) === null || _c === void 0 ? void 0 : _c.clickHandler(c.event, x.params.data)\n : null;\n }}\n >\n ${when((x) => hasIconSrc(x.params), html `\n <img\n class=\"icon-image\"\n src=\"${(x) => (hasIconSrc(x.params) ? x.params.iconSrc : '')}\"\n style=\"${(x) => {\n if (!hasIconSrc(x.params))\n return '';\n let styles = `height: ${x.params.iconHeight || '14px'}; width: auto;`;\n if (x.params.iconColor)\n styles += ` color: ${x.params.iconColor};`;\n return styles;\n }}\"\n />\n `)}\n ${when((x) => hasIconName(x.params), html `\n <${iconComponent}\n class=\"${(x) => {\n var _a;\n let classes = 'icon-element';\n if ((_a = x.params) === null || _a === void 0 ? void 0 : _a.showHover)\n classes += ' with-hover';\n return classes;\n }}\"\n name=\"${(x) => (hasIconName(x.params) ? x.params.iconName : '')}\"\n size=\"${(x) => (hasIconName(x.params) ? x.params.iconSize || 'md' : 'md')}\"\n style=\"${(x) => (x.params.iconColor ? `color: ${x.params.iconColor};` : '')}\"\n variant=\"${(x) => x.params.variant}\"\n ></${iconComponent}>\n `)}\n ${when((x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.secondaryIcon; }, html `\n <${iconComponent}\n class=\"secondary-icon\"\n name=\"${(x) => x.params.secondaryIcon}\"\n size=\"xs\"\n style=\"${(x) => (x.params.secondaryIconColor ? `color: ${x.params.secondaryIconColor};` : '')}\"\n ></${iconComponent}>\n `)}\n </div>\n `;\n};\n/**\n * Plain ag-Grid cell renderer for icons.\n * This renderer creates the FAST custom element using document.createElement.\n *\n * @public\n */\nexport class IconRenderer extends FoundationElement {\n // private element: HTMLElement;\n init(params) {\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n destroy() { }\n}\n__decorate([\n observable\n], IconRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Icon Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-icon-renderer\\>\n */\nexport const foundationIconRenderer = IconRenderer.compose({\n baseName: 'icon-renderer',\n template: getIconRendererTemplate(),\n styles: agIconRendererStyles,\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, repeat } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\nimport { setValueWithAccessor } from './utils';\n/**\n * The AG Select Renderer element.\n * @public\n * @tagname %%prefix%%-select-renderer\n */\nexport class SelectRenderer extends FoundationElement {\n constructor() {\n super(...arguments);\n this.selectionChanged = (e) => {\n this.value = e.target.value;\n this.params.onSelect(e.target.value, this.params);\n };\n }\n init(params) {\n var _a;\n if (!params)\n return;\n this.params = params;\n this.value = setValueWithAccessor((_a = params.node) === null || _a === void 0 ? void 0 : _a.data, params.accessor) || undefined;\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n}\n__decorate([\n observable\n], SelectRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], SelectRenderer.prototype, \"value\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agSelectRendererStyles = css `\n :host,\n .select-renderer,\n zero-option,\n ::part(listbox),\n ::part(control) {\n max-width: var(--select-renderer-max-width);\n min-width: 100%;\n }\n\n .select-renderer {\n --listbox-max-height: 4;\n --select-renderer-max-width: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getSelectRendererTemplate = (designSystem = 'foundation') => {\n const selectComponent = `${designSystem}-select`;\n const optionComponent = `${designSystem}-option`;\n return html `\n <${selectComponent}\n class=\"select-renderer\"\n position=${(x) => (x.params.position ? x.params.position(x.params.node.data) : '')}\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n @change=${(x, c) => x.selectionChanged(c.event)}\n :value=${(x) => x.value}\n >\n <${optionComponent}\n defaultSelected\n style=\"display: none;\"\n >\n ${(x) => x.params.defaultValue || 'Select option'}\n </${optionComponent}>\n ${repeat((x) => x.params.options(x.params.node.data), html `\n <${optionComponent}\n value=${(x) => x.name}\n ?disabled=${(x, c) => { var _a; return typeof x.isDisabled === 'function' ? x.isDisabled((_a = c.parent.params) === null || _a === void 0 ? void 0 : _a.data) : false; }}\n title=\"${(x) => (x.tooltip ? x.tooltip : null)}\"\n >${(x) => x.displayName}</${optionComponent}>\n `)}\n </${selectComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Select Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-renderer\\>\n */\nexport const foundationAgSelectRenderer = SelectRenderer.compose({\n baseName: 'select-renderer', // TODO: others have 'grid-pro' in the name, why not this one?\n styles: agSelectRendererStyles,\n template: getSelectRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\n/**\n * The Status Pill Renderer Styles.\n * @public\n */\nexport const agStatusPillRendererStyles = css `\n :host {\n width: 100%;\n display: flex;\n align-items: center;\n height: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Status Pill template.\n * @param designSystem - The design system prefix to use. Defaults to 'rapid'.\n * @returns A Staus Pill component template prefixed with the correct design system.\n * @public\n */\nexport const getStatusPillRendererTemplate = (designSystem = 'rapid') => {\n return html `\n <${designSystem}-status-pill\n background-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.backgroundColor; }}\"\n icon-name=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconName; }}\"\n icon-src=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconSrc; }}\"\n icon-initial=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconInitial; }}\"\n icon-initial-background-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconInitialBackgroundColor; }}\"\n icon-size=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconSize; }}\"\n text-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.textColor; }}\"\n text=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.text; }}\"\n date-countdown-unit=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownUnit; }}\"\n date-countdown=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdown; }}\"\n date-countdown-completed-message=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownCompletedMessage; }}\"\n ?hide-when-countdown-completed=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.hideWhenCountdownCompleted; }}\"\n date-countdown-visible-after=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownVisibleAfter; }}\"\n >\n </${designSystem}-status-pill>\n `;\n};\n/**\n * The AG Status Pill Renderer element.\n * @public\n * @tagname %%prefix%%-status-pill-renderer\n */\nexport class StatusPillRenderer extends FoundationElement {\n init(params) {\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n destroy() { }\n}\n__decorate([\n observable\n], StatusPillRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Status Pill Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-status-pill-renderer\\>\n */\nexport const foundationStatusPillRenderer = StatusPillRenderer.compose({\n baseName: 'status-pill-renderer',\n template: getStatusPillRendererTemplate(),\n styles: agStatusPillRendererStyles,\n});\n","import { __decorate } from \"tslib\";\nimport { sync } from '@genesislcap/foundation-utils';\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\nimport { setValueWithAccessor } from './utils';\n/**\n * The AG Text Field Renderer element.\n * @public\n * @tagname %%prefix%%-grid-text-field-renderer\n */\nexport class AgTextFieldRenderer extends FoundationElement {\n constructor() {\n super(...arguments);\n // Text field value\n this.textValue = '';\n /**\n * On text change handler\n * @param e - CustomEvent\n */\n this.textChanged = (e) => {\n this.textValue = e.target.value;\n this.params.onChange(e.target.value, this.params);\n };\n }\n init(params) {\n var _a;\n if (!params)\n return;\n this.params = params;\n this.textValue =\n this.textValue === ''\n ? setValueWithAccessor((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.data, params.accessor)\n : this.textValue;\n // Intercept keyboard events on the text field element\n this.addEventListener('keydown', (event) => {\n // Check if the key pressed is an arrow key\n if (['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n // Only stop propagation if cursor isn't at the boundaries\n const input = this.textField.control;\n const caretPos = input.selectionStart;\n if (event.key === 'ArrowLeft' && caretPos > 0) {\n event.stopPropagation();\n }\n else if (event.key === 'ArrowRight' && caretPos < input.value.length) {\n event.stopPropagation();\n }\n }\n });\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n}\n__decorate([\n observable\n], AgTextFieldRenderer.prototype, \"textValue\", void 0);\n__decorate([\n observable\n], AgTextFieldRenderer.prototype, \"params\", void 0);\n/**\n * The AG Text Field Renderer Styles.\n * @public\n */\nexport const textFieldRendererStyles = css `\n :host {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n }\n .text-renderer {\n width: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Text Field template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Text Field component template prefixed with the correct design system.\n * @public\n */\nexport const getTextFieldRendererTemplate = (designSystem = 'foundation') => {\n const textComponent = `${designSystem}-text-field`;\n return html `\n <${textComponent}\n ${ref('textField')}\n type=\"text\"\n class=\"text-renderer\"\n prefix=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.prefix; }}\"\n suffix=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.suffix; }}\"\n ?hide-affix-from-screen-reader=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.hideAffixFromScreenReader; }}\"\n :maxlength=\"${(x) => x.params.maxLength}\"\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n :value=\"${sync((x) => x.textValue)}\"\n @change=\"${(x, c) => x.textChanged(c.event)}\"\n ></${textComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Text Field Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-text-field-renderer\\>\n */\nexport const foundationAgTextFieldRenderer = AgTextFieldRenderer.compose({\n baseName: 'grid-pro-text-renderer',\n styles: textFieldRendererStyles,\n template: getTextFieldRendererTemplate(),\n});\n","// TODO: DEPRECATED due the incorrect \"text\" name\nimport { AgTextFieldRenderer, getTextFieldRendererTemplate, textFieldRendererStyles, } from './text-field.renderer';\n/**\n * @public\n * @deprecated - Use AgTextFieldRenderer instead\n * @tagname %%prefix%%-grid-text-renderer\n */\nexport class AgTextRenderer extends AgTextFieldRenderer {\n}\n/**\n * @public\n * @deprecated - Use textFieldRendererStyles instead\n */\nexport const textRendererStyles = textFieldRendererStyles;\n/**\n * @public\n * @deprecated - Use getTextFieldRendererTemplate instead\n */\nexport const getTextRendererTemplate = getTextFieldRendererTemplate;\n/**\n * A function that returns a Foundation Text Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-text-renderer\\>\n * @deprecated - Use foundationAgTextFieldRenderer instead\n */\nexport const foundationAgTextRenderer = AgTextRenderer.compose({\n baseName: 'grid-text-renderer',\n styles: textRendererStyles,\n template: getTextRendererTemplate(),\n});\n","export const setValueWithAccessor = (data, accessor) => {\n // if no '.', then it's not a deep value\n if (accessor.indexOf('.') < 0) {\n // data[field] = newValue;\n return data[accessor];\n }\n else {\n // otherwise it is a deep value, so need to dig for it\n const accessorPieces = accessor.split('.');\n let currentObject = data;\n while (accessorPieces.length > 0 && currentObject) {\n const fieldPiece = accessorPieces.shift();\n if (accessorPieces.length === 0) {\n return currentObject[fieldPiece];\n }\n else {\n currentObject = currentObject[fieldPiece];\n }\n }\n }\n};\n","import { __decorate } from \"tslib\";\nimport { customElement, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { CellTemplate as template } from './cell.template';\n/**\n * The Grid Pro Cell element.\n * @remarks Used inside the Grid Pro Column element, to define a cell renderer from the template.\n * @public\n */\nlet GridProCell = class GridProCell extends FoundationElement {\n connectedCallback() {\n super.connectedCallback();\n const wrapperGridProColumn = this.parentElement;\n if (this.renderer) {\n wrapperGridProColumn.definition.cellRenderer = this.renderer;\n }\n if (this.rendererParams) {\n wrapperGridProColumn.definition.cellRendererParams = this.rendererParams;\n }\n }\n init(params) {\n this.rendererParams = params;\n }\n getGui() {\n if (typeof this.renderer !== 'string') {\n return this.renderer(this.rendererParams);\n }\n return this;\n }\n destroy() { }\n refresh(params) {\n return false;\n }\n slottedAgRendererChanged() { }\n};\n__decorate([\n observable\n], GridProCell.prototype, \"renderer\", void 0);\n__decorate([\n observable\n], GridProCell.prototype, \"rendererParams\", void 0);\n__decorate([\n observable\n], GridProCell.prototype, \"slottedRenderer\", void 0);\nGridProCell = __decorate([\n customElement({\n name: 'grid-pro-cell',\n template,\n })\n], GridProCell);\nexport { GridProCell };\n","import { html, slotted } from '@microsoft/fast-element';\n/**\n * The Grid Pro Cell Template.\n * @public\n */\nexport const CellTemplate = html `\n <template>\n <slot ${slotted('slottedRenderer')} @slotchange=\"${(x) => x.slottedAgRendererChanged()}\"></slot>\n </template>\n`;\n","import { __decorate } from \"tslib\";\nimport { LifecycleMixin } from '@genesislcap/foundation-utils';\nimport { customElement, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { ColumnTemplate as template } from './column.template';\n/**\n * The Grid Pro Column element.\n * @remarks Used insde the Grid Pro element, to specify the column definitions (ColDef) for a given column.\n * @public\n */\nlet GridProColumn = class GridProColumn extends LifecycleMixin(FoundationElement) {\n constructor() {\n super(...arguments);\n this.definition = {};\n }\n slottedAgCellChanged() { }\n deepClone() {\n const copy = super.deepClone();\n copy.definition = {};\n if (this.definition) {\n Object.keys(this.definition).forEach((key) => {\n if (typeof this.definition[key] === 'function') {\n copy.definition[key] = this.definition[key].bind(copy);\n }\n else {\n copy.definition[key] = structuredClone(this.definition[key]);\n }\n });\n }\n return copy;\n }\n};\n__decorate([\n observable\n], GridProColumn.prototype, \"slottedAgCell\", void 0);\n__decorate([\n observable\n], GridProColumn.prototype, \"definition\", void 0);\nGridProColumn = __decorate([\n customElement({\n name: 'grid-pro-column',\n template,\n })\n], GridProColumn);\nexport { GridProColumn };\n","import { html, slotted } from '@microsoft/fast-element';\n/**\n * The Grid Pro Column Template.\n * @public\n */\nexport const ColumnTemplate = html `\n <template>\n <slot ${slotted('slottedAgCell')} @slotchange=\"${(x) => x.slottedAgCellChanged()}\"></slot>\n </template>\n`;\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Connect, Datasource, DatasourceDefaults, DatasourceEventHandler, FieldTypeEnum, logger, normaliseCriteria, ResourceType, } from '@genesislcap/foundation-comms';\nimport { attr, nullableNumberConverter, observable, volatile } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { BehaviorSubject } from 'rxjs';\nimport { datasourceEventNames, } from '../grid-pro-genesis-datasource/datasource-events.types';\nimport { dateTimeValueFormatter, dateValueFormatter, getColumnType } from '../grid-pro.definitions';\nimport { GridProRendererTypes, GridProStatusBarTypes } from '../grid-pro.types';\nimport { baseDatasourceEventNames } from './base.types';\n/**\n * The delimiter for the criteria string.\n * @public\n */\nexport const criteriaDelimiter = ';';\n/**\n * The join for the criteria string.\n * @public\n */\nexport const criteriaJoin = ' && ';\n/**\n * The base datasource element for the grid-pro element.\n * @public\n *\n * @fires base-datasource-error - Fired when a datasource error is reported\n * @fires datasource-error - Fired when a datasource error occurs (for grid integration)\n * @fires base-datasource-connected - Fired when error state is cleared after connection succeeds\n * @fires datasource-loading-finished - Fired when pending stream transactions are flushed with no row changes\n * @fires datasource-no-data-available - Fired when loading finishes with an empty row set\n * @fires datasource-data-changed - Fired when row data changes from applied stream transactions\n */\nexport class GenesisGridDatasourceElement extends DatasourceEventHandler(FoundationElement) {\n constructor() {\n super(...arguments);\n /**\n * Request a snapshot from the server.\n * @remarks Defaults to false.\n */\n this.isSnapshot = false;\n /**\n * Maximum number of rows to be returned as part of the initial message, and as part of any additional MORE_ROWS messages.\n * @remarks This will not affect the number of rows displayed. Defaults to 250.\n */\n this.maxRows = DatasourceDefaults.MAX_ROWS_250;\n /**\n * Maximum number of rows to track as part of a client \"view\".\n * @remarks DATASERVER only. Defaults to 1000.\n */\n this.maxView = DatasourceDefaults.MAX_VIEW_1000;\n /**\n * If true, when the maximum number of rows defined in max-view is reached, the Data Server will start discarding the oldest rows (in terms of timestamp) and sending newer rows.\n * @remarks DATASERVER only. If false, the updates in the server will be sent to the front end regardless of order. Note that this will only update the UI; no changes will be performed in the database. Defaults to false.\n */\n this.movingView = false;\n /**\n * Option that changes the Data Server index iteration.\n * @remarks DATASERVER only. For example, if you are using the default index, the query will return rows in order from the newest database records to the oldest. Defaults to false.\n */\n this.reverse = false;\n // REQUEST_SERVER only\n /**\n * Disables polling if set to true (data updates for the grid will not be fetched automatically).\n * @remarks REQUEST_SERVER only. Defaults to false.\n */\n this.disablePolling = false;\n /**\n * The offset for pagination in REQUEST_SERVER scenarios.\n * @remarks REQUEST_SERVER only.\n */\n this.offset = DatasourceDefaults.DEFAULT_REQ_REP_OFFSET;\n /**\n * Custom polling frequency (in milliseconds) for a Request Server resource.\n * @remarks REQUEST_SERVER only. Note that this option only works with Request Server resources; if your resource is a Data Server query, your grid is updated in real time. Defaults to 5000ms.\n */\n this.pollingInterval = DatasourceDefaults.REQ_REP_POLLING_INTERVAL_MS;\n /**\n * Array of event names that will trigger a poll when received as commit responses.\n * @remarks REQUEST_SERVER only.\n */\n this.pollTriggerEvents = [];\n /**\n * Attribute to set whether the REQUEST object should be automatically set up.\n * @remarks Defaults to `true`. Only applies to REQUEST_SERVER (REQ-REP) resources.\n * @privateRemarks To avoid breaking changes for now, once V15 is out this will be removed and the default behavior will be the same as `false` here.\n */\n this.requestAutoSetup = true;\n /**\n * Attribute to set whether the datasource should restart when it reconnects.\n * @remarks Defaults to `true`.\n * @privateRemarks This attribute is shared across all datasources to ensure consistent behavior.\n */\n this.restartOnReconnection = true;\n this.criteriaFromFilters = new Map();\n this.update = new BehaviorSubject(new Map());\n }\n /**\n * Returns the `row-id` attribute, depending on the resource type.\n * @remarks Will favour the `row-id` attribute if set.\n * @internal\n */\n get rowId() {\n if (this.rowIdAttr)\n return this.rowIdAttr;\n if (this.isRequestServer)\n return DatasourceDefaults.REQUEST_SERVER_ROW_ID;\n return DatasourceDefaults.DATASERVER_ROW_ID;\n }\n /**\n * Returns whether the `row-id` attribute is the default one, depending on the resource type.\n * @internal\n */\n get hasDefaultRowId() {\n return (!this.rowIdAttr ||\n this.rowIdAttr === DatasourceDefaults.REQUEST_SERVER_ROW_ID ||\n this.rowIdAttr === DatasourceDefaults.DATASERVER_ROW_ID);\n }\n get defaultRowIdByResourceType() {\n return this.isRequestServer\n ? DatasourceDefaults.REQUEST_SERVER_ROW_ID\n : DatasourceDefaults.DATASERVER_ROW_ID;\n }\n datasourceOptions() {\n return {\n // Common between DATASERVER and REQUEST_SERVER (REQ-REP)\n criteria: this.buildCriteria(),\n isSnapshot: this.isSnapshot,\n maxRows: +this.maxRows,\n orderBy: this.orderBy,\n resourceName: this.resourceName,\n viewNumber: +this.viewNumber,\n // DATASERVER only\n fields: this.fields,\n maxView: +this.maxView,\n movingView: this.movingView,\n reverse: this.reverse,\n // REQUEST_SERVER only\n disablePolling: this.disablePolling,\n offset: this.offset,\n pollingInterval: this.pollingInterval,\n pollTriggerEvents: this.pollTriggerEvents,\n request: this.request,\n requestAutoSetup: this.requestAutoSetup,\n };\n }\n buildCriteria() {\n var _a;\n const initialCriteria = ((_a = this.criteria) === null || _a === void 0 ? void 0 : _a.split(criteriaDelimiter)) || [];\n const criteria = initialCriteria.concat(Array.from(this.criteriaFromFilters.values()));\n const normalisedCriteria = normaliseCriteria(criteria.join(criteriaJoin), criteriaDelimiter);\n return normalisedCriteria ? normalisedCriteria : undefined;\n }\n setFilter(fieldName, newFilter) {\n this.criteriaFromFilters.set(fieldName, newFilter);\n this.update.next(this.criteriaFromFilters);\n }\n removeFilter(fieldName) {\n this.criteriaFromFilters.delete(fieldName);\n this.update.next(this.criteriaFromFilters);\n }\n get isRequestServer() {\n var _a;\n return ((_a = this.datasource.status) === null || _a === void 0 ? void 0 : _a.type) === ResourceType.REQUEST_SERVER;\n }\n // protected isRequestServer = false;\n datasourceStatusChanged(prev, next) {\n // this.isRequestServer = next.type === ResourceType.REQUEST_SERVER;\n // TODO: this is not triggered after first init :(\n }\n /**\n * Handles errors and emits appropriate error events.\n * @param errors - The error message or array of error messages\n * @param type - The type of error that occurred\n * @public\n */\n handleErrors(errors, type = 'unknown') {\n let message;\n if (Array.isArray(errors)) {\n const stringArray = errors.map((item) => {\n if (typeof item === 'string') {\n return item;\n }\n else if (typeof item === 'object' && item !== null && 'TEXT' in item) {\n return item.TEXT;\n }\n else {\n return String(item);\n }\n });\n message = stringArray.join(', ');\n }\n else if (typeof errors === 'string') {\n message = errors;\n }\n else {\n message = String(errors);\n }\n if (message) {\n logger.error(`${type}: ${message}`);\n // Emit both the old event for backward compatibility and the new event for grid handling\n this.$emit(baseDatasourceEventNames.error, { message, type });\n this.$emit(datasourceEventNames.error, { message, type });\n }\n }\n /**\n * Clears error state and emits connected event.\n * @public\n */\n clearErrors() {\n this.$emit(baseDatasourceEventNames.connected);\n }\n /**\n * Override datasource initialization to handle errors properly.\n * @internal\n */\n initializeDatasource(options_1) {\n return __awaiter(this, arguments, void 0, function* (options, fetchMeta = true, startStream = true) {\n try {\n const success = yield this.datasource.init(options, fetchMeta, startStream);\n if (success) {\n this.clearErrors();\n return true;\n }\n else {\n // Determine error type based on the initialization failure\n const resourceName = options.resourceName;\n if (!resourceName) {\n this.handleErrors('Resource name is required', 'resource-validation');\n }\n else if (!this.connect.isConnected) {\n this.handleErrors(`Unable to connect to ${this.connect.host}`, 'connection');\n }\n else {\n // Check if it's a resource validation issue\n const isValidResource = yield this.connect.getMetadata(resourceName).catch(() => null);\n if (!isValidResource) {\n this.handleErrors(`Resource '${resourceName}' does not exist on ${this.connect.host}`, 'resource-validation');\n }\n else {\n this.handleErrors(`Failed to initialize datasource for ${resourceName}`, 'unknown');\n }\n }\n return false;\n }\n }\n catch (error) {\n let errorMessage = 'Unknown initialization error';\n let errorType = 'unknown';\n if (error instanceof Error) {\n errorMessage = error.message;\n // Categorize error types based on message content\n if (errorMessage.includes('connect') || errorMessage.includes('connection')) {\n errorType = 'connection';\n }\n else if (errorMessage.includes('resource') || errorMessage.includes('does not exist')) {\n errorType = 'resource-validation';\n }\n else if (errorMessage.includes('metadata')) {\n errorType = 'metadata';\n }\n else if (errorMessage.includes('stream')) {\n errorType = 'stream';\n }\n else if (errorMessage.includes('criteria')) {\n errorType = 'criteria';\n }\n }\n this.handleErrors(errorMessage, errorType);\n return false;\n }\n });\n }\n}\n__decorate([\n Connect\n], GenesisGridDatasourceElement.prototype, \"connect\", void 0);\n__decorate([\n Datasource\n], GenesisGridDatasourceElement.prototype, \"datasource\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"deferredGridOptions\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"deferredColumnStates\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"rowDataMapper\", void 0);\n__decorate([\n attr\n], GenesisGridDatasourceElement.prototype, \"criteria\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'is-snapshot' })\n], GenesisGridDatasourceElement.prototype, \"isSnapshot\", void 0);\n__decorate([\n attr({ attribute: 'max-rows', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"maxRows\", void 0);\n__decorate([\n attr({ attribute: 'order-by' })\n], GenesisGridDatasourceElement.prototype, \"orderBy\", void 0);\n__decorate([\n attr({ attribute: 'resource-name' })\n], GenesisGridDatasourceElement.prototype, \"resourceName\", void 0);\n__decorate([\n attr({ attribute: 'view-number', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"viewNumber\", void 0);\n__decorate([\n attr\n], GenesisGridDatasourceElement.prototype, \"fields\", void 0);\n__decorate([\n attr({ attribute: 'max-view', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"maxView\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'moving-view' })\n], GenesisGridDatasourceElement.prototype, \"movingView\", void 0);\n__decorate([\n attr({ mode: 'boolean' })\n], GenesisGridDatasourceElement.prototype, \"reverse\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'disable-polling' })\n], GenesisGridDatasourceElement.prototype, \"disablePolling\", void 0);\n__decorate([\n attr({ converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"offset\", void 0);\n__decorate([\n attr({ attribute: 'polling-interval' })\n], GenesisGridDatasourceElement.prototype, \"pollingInterval\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"pollTriggerEvents\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"request\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'request-auto-setup' })\n], GenesisGridDatasourceElement.prototype, \"requestAutoSetup\", void 0);\n__decorate([\n attr({ attribute: 'row-id' })\n], GenesisGridDatasourceElement.prototype, \"rowIdAttr\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'restart-on-reconnection' })\n], GenesisGridDatasourceElement.prototype, \"restartOnReconnection\", void 0);\n__decorate([\n volatile\n], GenesisGridDatasourceElement.prototype, \"isRequestServer\", null);\n/**\n * The operation type for the {@link GridProBaseDatasource.mapTransaction} method.\n * @internal\n */\nexport var OperationType;\n(function (OperationType) {\n OperationType[\"Add\"] = \"add\";\n OperationType[\"Update\"] = \"update\";\n OperationType[\"Remove\"] = \"remove\";\n})(OperationType || (OperationType = {}));\nexport class GridProBaseDatasource extends GenesisGridDatasourceElement {\n constructor() {\n super(...arguments);\n this.dataSubWasLoggedOff = false;\n this.keepColDefsOnClearRowData = false;\n this.rowData = new Map();\n this.transactionData = {\n add: [],\n remove: [],\n update: [],\n };\n this._isDisconnected = false;\n }\n subscribeToConnection() {\n var _a;\n if (this.connect && this.connect.isConnected$) {\n (_a = this.connectionSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.connectionSub = this.connect.isConnected$.subscribe((isConnected) => {\n if (isConnected && this.isDisconnected()) {\n this.setDisconnected(false);\n if (this.restartOnReconnection) {\n this.reloadResourceData();\n }\n }\n else if (!isConnected) {\n this.setDisconnected(true);\n }\n });\n }\n }\n unsubscribeFromConnection() {\n var _a;\n (_a = this.connectionSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.connectionSub = undefined;\n }\n generateColumnDefsFromMetadata(fieldsMetadata, getFilterParamsByFieldType, getFilterByFieldType) {\n return fieldsMetadata === null || fieldsMetadata === void 0 ? void 0 : fieldsMetadata.flatMap((field) => {\n const colDefBase = {};\n colDefBase.filterParams = getFilterParamsByFieldType(field);\n switch (field.type) {\n case FieldTypeEnum.STRING:\n colDefBase.cellEditor = GridProRendererTypes.stringEditor;\n break;\n case FieldTypeEnum.NUMBER:\n colDefBase.cellEditor = GridProRendererTypes.numberEditor;\n break;\n case FieldTypeEnum.BOOLEAN:\n colDefBase.cellRenderer = GridProRendererTypes.boolean;\n colDefBase.cellEditor = GridProRendererTypes.boolean;\n break;\n case FieldTypeEnum.DATE:\n colDefBase.valueFormatter = dateValueFormatter;\n colDefBase.cellEditor = GridProRendererTypes.dateEditor;\n break;\n case FieldTypeEnum.DATETIME:\n colDefBase.valueFormatter = dateTimeValueFormatter;\n colDefBase.cellEditor = GridProRendererTypes.dateEditor;\n colDefBase.cellEditorParams = {\n withTime: true,\n };\n break;\n case FieldTypeEnum.ENUM:\n if (field.enumOptions) {\n colDefBase.cellEditor = GridProRendererTypes.selectEditor;\n colDefBase.cellEditorParams = {\n values: field.enumOptions.map((option) => ({ value: option, label: option })),\n valueField: 'value',\n labelField: 'label',\n };\n }\n else {\n logger.warn(`No enumOptions found for field ${field.name}. Default cell editor applied.`);\n }\n break;\n default:\n break;\n }\n if (this.fields && !this.fields.includes(field.name)) {\n return [];\n }\n return Object.assign({ field: field.name, type: getColumnType(field.type), filter: getFilterByFieldType(field.type) }, colDefBase);\n });\n }\n handleStreamInserts(insertedRows, addIndex = 0) {\n // Create a local counter for the insertion index when we need to do sequential inserts\n let currentAddIndex = addIndex;\n insertedRows === null || insertedRows === void 0 ? void 0 : insertedRows.forEach((insertData) => {\n const rowId = insertData[this.rowId];\n if (!rowId) {\n logger.warn('Attempted to insert row without valid rowId', insertData);\n return;\n }\n const existsInInternalState = this.rowData.has(rowId);\n if (existsInInternalState || this.dataSubWasLoggedOff) {\n const existingData = this.rowData.get(rowId);\n const updatedRow = Object.assign(Object.assign({}, existingData), insertData);\n this.transactionData.update.push(updatedRow);\n this.rowData.set(rowId, updatedRow);\n }\n else {\n this.transactionData.add.push(insertData);\n // Use the current add index for this insertion\n this.transactionData.addIndex = currentAddIndex;\n this.rowData.set(rowId, insertData);\n // Only increment the index if we're not inserting at the beginning (addIndex > 0)\n // This ensures rows are inserted in sequence when appending to the end of the grid\n if (addIndex > 0) {\n // Increment for the next insertion\n currentAddIndex += 1;\n }\n }\n });\n }\n handleStreamDeletes(deletedRows) {\n deletedRows === null || deletedRows === void 0 ? void 0 : deletedRows.forEach((deleteData) => {\n if (this.hasDefaultRowId || this.isRequestServer) {\n this.transactionData.remove.push({ [this.rowId]: deleteData[this.rowId] });\n }\n else {\n const rowToBeDeleted = Object.values(Object.fromEntries(this.rowData)).find((obj) => obj[this.defaultRowIdByResourceType] === deleteData[this.defaultRowIdByResourceType]);\n this.transactionData.remove.push({ [this.rowId]: rowToBeDeleted[this.rowId] });\n }\n this.rowData.delete(deleteData[this.rowId]);\n });\n }\n handleStreamUpdates(updatedRows) {\n updatedRows === null || updatedRows === void 0 ? void 0 : updatedRows.forEach((updateData) => {\n let updatedRow;\n if (this.hasDefaultRowId || this.isRequestServer) {\n const rowToBeUpdated = this.rowData.get(updateData[this.rowId]);\n updatedRow = Object.assign(Object.assign({}, rowToBeUpdated), updateData);\n this.transactionData.update.push(updatedRow);\n }\n else {\n const rowToBeUpdated = Object.values(Object.fromEntries(this.rowData)).find((obj) => obj[this.defaultRowIdByResourceType] === updateData[this.defaultRowIdByResourceType]);\n updatedRow = Object.assign(Object.assign({}, rowToBeUpdated), updateData);\n this.transactionData.update.push(updatedRow);\n }\n this.rowData.set(updateData[this.rowId], updatedRow);\n });\n }\n applyAllTransactions() {\n var _a, _b, _c, _d, _e, _f;\n if (!((_a = this.transactionData.add) === null || _a === void 0 ? void 0 : _a.length) &&\n !((_b = this.transactionData.update) === null || _b === void 0 ? void 0 : _b.length) &&\n !((_c = this.transactionData.remove) === null || _c === void 0 ? void 0 : _c.length)) {\n this.$emit(datasourceEventNames.loadingFinished);\n if (this.rowData.size === 0) {\n this.$emit(datasourceEventNames.noDataAvailable);\n }\n return;\n }\n if (((_d = this.transactionData.add) === null || _d === void 0 ? void 0 : _d.length) > 0) {\n this.applyMappedTransaction({\n add: this.transactionData.add,\n addIndex: this.transactionData.addIndex,\n }, OperationType.Add);\n }\n if (((_e = this.transactionData.remove) === null || _e === void 0 ? void 0 : _e.length) > 0) {\n this.applyMappedTransaction({ remove: this.transactionData.remove }, OperationType.Remove);\n }\n if (((_f = this.transactionData.update) === null || _f === void 0 ? void 0 : _f.length) > 0) {\n this.applyMappedTransaction({ update: this.transactionData.update }, OperationType.Update);\n }\n }\n applyMappedTransaction(transaction, operation) {\n const mappedTransaction = this.mapTransaction(transaction, [operation]);\n this.$emit(datasourceEventNames.dataChanged, {\n changes: mappedTransaction,\n });\n }\n applyTransaction(transaction) {\n throw new Error('Method not implemented.');\n }\n /**\n * Maps the transaction data to the row data mapper function, if it exists.\n * @param transaction - The transaction data to be mapped.\n * @param operations - The operations to be mapped. Can be 'add', 'update' or 'remove'.\n * @returns The mapped transaction (if the row data mapper function exists), or the original transaction.\n */\n mapTransaction(transaction, operations = Object.values(OperationType)) {\n if (!this.rowDataMapper) {\n return transaction;\n }\n const mappedTransaction = {};\n if (operations.includes(OperationType.Add)) {\n mappedTransaction.add = this.rowDataMapper(transaction.add, this.rowData);\n }\n if (operations.includes(OperationType.Remove)) {\n mappedTransaction.remove = this.rowDataMapper(transaction.remove, this.rowData);\n }\n if (operations.includes(OperationType.Update)) {\n mappedTransaction.update = this.rowDataMapper(transaction.update, this.rowData);\n }\n if (transaction.addIndex !== undefined) {\n mappedTransaction.addIndex = transaction.addIndex;\n }\n return mappedTransaction;\n }\n loadMore() {\n throw new Error('loadMore() method must be implemented by subclass');\n }\n restart() {\n throw new Error('restart() method must be implemented by subclass');\n }\n reloadResourceData() {\n throw new Error('reloadResourceData() method must be implemented by subclass');\n }\n destroy() {\n throw new Error('destroy() method must be implemented by subclass');\n }\n /**\n * Sets the disconnected state and emits appropriate events.\n * @param disconnected - true to set, false to remove\n */\n setDisconnected(disconnected) {\n this._isDisconnected = disconnected;\n if (disconnected) {\n this.$emit(datasourceEventNames.error, {\n message: 'Datasource disconnected',\n type: 'connection',\n });\n }\n else {\n this.clearErrors();\n }\n }\n /**\n * Returns true if the datasource is disconnected.\n */\n isDisconnected() {\n return this._isDisconnected;\n }\n /**\n * Helper function to extract configuration for status bar actions\n * @internal\n */\n getStatusBarActionConfig(configValue) {\n if (typeof configValue === 'boolean') {\n return { enabled: configValue };\n }\n if (typeof configValue === 'object' && configValue !== null) {\n return {\n enabled: true,\n config: configValue,\n };\n }\n return { enabled: false };\n }\n /**\n * Gets datasource-specific status bar component configurations.\n * This method should be called by the grid to get status bar panels specific to this datasource.\n * @public\n */\n getDatasourceStatusBarPanels(isServerSide, statusBarConfig) {\n var _a, _b, _c, _d, _e, _f;\n const additionalPanels = [];\n // Extract loadMore configuration\n const loadMoreConfig = this.getStatusBarActionConfig(statusBarConfig === null || statusBarConfig === void 0 ? void 0 : statusBarConfig.loadMore);\n // Add load more button if enabled and not server-side\n if (loadMoreConfig.enabled && !isServerSide) {\n const loadMoreParams = {};\n // Use custom callback if provided, otherwise leave undefined for default behavior\n if ((_a = loadMoreConfig.config) === null || _a === void 0 ? void 0 : _a.onLoadMore) {\n loadMoreParams.onLoadMore = loadMoreConfig.config.onLoadMore;\n }\n else {\n loadMoreParams.onLoadMore = this.loadMore.bind(this);\n }\n // Add custom styling parameters\n if ((_b = loadMoreConfig.config) === null || _b === void 0 ? void 0 : _b.appearance) {\n loadMoreParams.appearance = loadMoreConfig.config.appearance;\n }\n // Add tooltip - use custom tooltip if provided, otherwise use default\n loadMoreParams.tooltip = ((_c = loadMoreConfig.config) === null || _c === void 0 ? void 0 : _c.tooltip) || 'Load More';\n additionalPanels.push({\n statusPanel: GridProStatusBarTypes.loadMore,\n statusPanelParams: loadMoreParams,\n align: this.pagination ? 'left' : 'right',\n });\n }\n // Extract reload configuration\n const reloadConfig = this.getStatusBarActionConfig(statusBarConfig === null || statusBarConfig === void 0 ? void 0 : statusBarConfig.reload);\n // Add reload button if enabled\n if (reloadConfig.enabled) {\n const reloadParams = {};\n // Use custom callback if provided, otherwise use default datasource reload\n if ((_d = reloadConfig.config) === null || _d === void 0 ? void 0 : _d.onReload) {\n reloadParams.onReload = reloadConfig.config.onReload;\n }\n else {\n reloadParams.onReload = this.reloadResourceData.bind(this);\n }\n // Add custom styling parameters\n if ((_e = reloadConfig.config) === null || _e === void 0 ? void 0 : _e.icon) {\n reloadParams.icon = reloadConfig.config.icon;\n }\n // Add tooltip - use custom tooltip if provided, otherwise use default\n reloadParams.tooltip = ((_f = reloadConfig.config) === null || _f === void 0 ? void 0 : _f.tooltip) || 'Reload';\n additionalPanels.push({\n statusPanel: GridProStatusBarTypes.reload,\n statusPanelParams: reloadParams,\n align: 'right',\n });\n }\n return additionalPanels;\n }\n}\n","/**\n * Base datasource error event names.\n * @public\n */\nexport const baseDatasourceEventNames = {\n error: 'base-datasource-error',\n connected: 'base-datasource-connected',\n};\n","import { __decorate } from \"tslib\";\nimport { customElement } from '@microsoft/fast-element';\nimport { GridProGenesisDatasource } from '../grid-pro-genesis-datasource';\n/**\n * The Genesis Datasource element, for client-side | CSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Client-Side Row Model.\n * @public\n *\n * @fires base-datasource-error - Fired when a datasource error is reported\n * @fires datasource-error - Fired when a datasource error occurs (for grid integration)\n * @fires base-datasource-connected - Fired when error state is cleared after connection succeeds\n * @fires datasource-loading-finished - Fired when loading completes with no pending row changes\n * @fires datasource-no-data-available - Fired when the grid has no rows after load\n * @fires datasource-data-changed - Fired when row data changes from stream updates\n * @fires datasource-initialize - Fired to hand off grid options and initialization flags\n * @fires datasource-destroy - Fired when the datasource is torn down\n * @fires datasource-data-cleared - Fired when row data is cleared\n * @fires datasource-schema-updated - Fired when column metadata or defs are updated\n * @fires datasource-filters-restored - Fired when persisted filters are reapplied\n * @fires datasource-data-loaded - Fired when a data payload is loaded for the grid\n * @fires datasource-loading-started - Fired when a load or refresh starts\n * @fires datasource-more-data-available - Fired when more server rows can be requested\n * @fires datasource-ready - Fired when the host grid is ready (detail includes pagination state)\n * @fires datasource-init - Fired when initial grid data is ready for the client-side model\n * @fires more-rows-changed - Fired when MORE_ROWS availability changes\n * @fires datasource-size-changed - Fired when layout or viewport sizing affects the datasource\n */\nlet GridProClientSideDatasource = class GridProClientSideDatasource extends GridProGenesisDatasource {\n};\nGridProClientSideDatasource = __decorate([\n customElement({\n name: 'grid-pro-client-side-datasource',\n })\n], GridProClientSideDatasource);\nexport { GridProClientSideDatasource };\n","import { css, html, when, repeat } from '@microsoft/fast-element';\nimport { extractErrorMessage } from '../utils';\nexport const errorHandlerDialogStyles = css `\n .overlay {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n background-color: var(--datasource-error-background-color, var(--neutral-layer-4));\n opacity: var(--datasource-error-background-opacity, 0.5);\n z-index: 1000;\n pointer-events: auto;\n border-radius: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .dialog-container {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n z-index: 1001;\n max-width: 90vw;\n max-height: 90vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n opacity: 1 !important;\n filter: none !important;\n box-sizing: border-box;\n }\n .grid-datasource-error-dialog {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin: 0 auto;\n max-width: 600px;\n width: 100%;\n box-sizing: border-box;\n background: var(--dialog-background, #2d2533);\n box-shadow: 0 4px 32px 0 rgba(0, 0, 0, 0.45);\n overflow: visible;\n min-height: 120px;\n }\n\n .grid-datasource-error-dialog div {\n width: 600px;\n }\n\n .grid-datasource-error-dialog [slot='top'] {\n margin-bottom: 0;\n }\n\n .grid-datasource-error-dialog [slot='bottom'] {\n display: flex;\n justify-content: flex-end;\n width: 100%;\n }\n\n .error-details {\n max-height: 120px;\n overflow: auto;\n width: 100%;\n margin-top: 8px;\n }\n`;\nexport function getErrorHandlerDialogTemplate(prefix, gridErrorItems) {\n const dialogTag = `${prefix}-dialog`;\n const buttonTag = `${prefix}-button`;\n return html `\n ${when(() => gridErrorItems && gridErrorItems.length > 0, html `\n <div class=\"overlay\"></div>\n <div class=\"dialog-container\">\n <${dialogTag}\n class=\"grid-datasource-error-dialog\"\n type=\"error\"\n show-close-icon=\"false\"\n open\n >\n <h2 slot=\"top\" class=\"title\">Grid unavailable</h2>\n <div>\n <p>\n This may be due to a network, server, or configuration issue.\n </p>\n <details class=\"error-details\">\n <summary>Show details</summary>\n <ul>\n ${repeat(() => gridErrorItems, html `\n <li>\n ${(x) => extractErrorMessage(x.detail) || 'Unknown error occurred'}\n </li>\n `)}\n </ul>\n </details>\n </div>\n <div slot=\"bottom\">\n <${buttonTag} appearance=\"lightweight\" @click=${(x) => {\n var _a;\n x.hideDatasourceError();\n (_a = x.gridProDatasource) === null || _a === void 0 ? void 0 : _a.restart();\n }}>\n Reload\n </${buttonTag}>\n </div>\n </${dialogTag}>\n </div>\n `)}\n `;\n}\n","import { FieldTypeEnum } from '@genesislcap/foundation-comms';\nimport { getEnumFilterParams } from '../grid-pro.definitions';\n/**\n * Returns a filter type based on the Grid Pro field/column type.\n * @param type - The type of the field/column\n * @returns The ag-grid filter type\n */\nexport function getFilterByFieldType(type) {\n switch (type === null || type === void 0 ? void 0 : type.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'agNumberColumnFilter';\n case 'date':\n case 'datetime':\n return 'agDateColumnFilter';\n case 'enum':\n return 'agSetColumnFilter';\n default:\n return 'agTextColumnFilter';\n }\n}\n/**\n * Returns the filter params based on the Grid Pro field/column type.\n * @param field - The field metadata\n * @returns the filter params for the specified field type\n * @remarks Currently only returns a default filter params object, for all field types\n * @beta\n */\nexport function getServerSideFilterParamsByFieldType(field) {\n switch (field.type) {\n case FieldTypeEnum.BOOLEAN: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'contains',\n {\n displayKey: 'true',\n displayName: 'True',\n predicate: (_, cellValue) => cellValue === 'true' || cellValue === true,\n numberOfInputs: 0,\n },\n {\n displayKey: 'false',\n displayName: 'False',\n predicate: (_, cellValue) => cellValue === 'false' || cellValue === false,\n numberOfInputs: 0,\n },\n {\n displayKey: 'true-false',\n displayName: 'True/False',\n predicate: (_, cellValue) => cellValue === 'true' ||\n cellValue === true ||\n cellValue === 'false' ||\n cellValue === false,\n numberOfInputs: 0,\n },\n ],\n };\n }\n case FieldTypeEnum.ENUM: {\n return getEnumFilterParams(field, getFilterByFieldType(field.type));\n }\n case FieldTypeEnum.DATE:\n case FieldTypeEnum.DATETIME: {\n return {\n comparator: (filterLocalDateAtMidnight, cellValue) => {\n if (!cellValue)\n return -1;\n const cellValueTime = new Date(cellValue).setHours(0, 0, 0, 0);\n const filterValueTime = filterLocalDateAtMidnight.getTime();\n if (cellValueTime === filterValueTime) {\n return 0;\n }\n if (cellValueTime < filterValueTime) {\n return -1;\n }\n if (cellValueTime > filterValueTime) {\n return 1;\n }\n },\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n browserDatePicker: true,\n filterOptions: [\n 'equals',\n 'lessThan',\n 'greaterThan',\n 'inRange',\n {\n displayKey: 'isToday',\n displayName: 'Is today',\n numberOfInputs: 0,\n predicate: () => true,\n },\n 'blank',\n 'notBlank',\n ],\n };\n }\n case FieldTypeEnum.NUMBER: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'equals',\n 'notEqual',\n 'greaterThan',\n 'greaterThanOrEqual',\n 'lessThan',\n 'lessThanOrEqual',\n 'inRange',\n 'blank',\n 'notBlank',\n ],\n };\n }\n default: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'contains',\n 'equals',\n 'notEqual',\n {\n displayKey: 'wordStartsWith',\n displayName: 'Word starts with',\n numberOfInputs: 1,\n predicate: () => true,\n },\n 'blank',\n 'notBlank',\n ],\n };\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Auth, Connect, logger, } from '@genesislcap/foundation-comms';\nimport { UUID } from '@genesislcap/foundation-utils';\n/**\n * Base class for server-side resource datasources used in Grid Pro SSRM implementations.\n * Provides common logic for filtering, sorting, and pagination.\n *\n * @beta\n */\nexport class BaseServerSideDatasource {\n constructor(options) {\n var _a;\n this.rowData = new Map();\n /**\n * The number of rows in the grid. THIS DO NOT CONSIDER CRITERIA_MATCH scenarios.\n * @internal\n */\n this.serverRowsCount = 0;\n /**\n * The number of rows in the grid. THIS IS A LOCAL COUNT CONSIDERING CONSIDER CRITERIA_MATCH scenarios.\n * @internal\n */\n this.clientRowsCount = 0;\n this.moreRows = false;\n this.calculatedRowsCount = 0;\n this.currentSequenceId = null;\n this.reloadResourceDataFunc = options.reloadResourceDataFunc;\n this.errorHandlerFunc = options.errorHandlerFunc;\n this.resourceName = options.resourceName;\n this.resourceParams = options.resourceParams;\n this.originalCriteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n this.resourceIndexes = options.resourceIndexes;\n this.resourceColDefs = options.resourceColDefs;\n this.maxRows = options.maxRows;\n this.maxView = options.maxView;\n this.rowId = options.rowId;\n this.pagination = options.pagination;\n this.zeroBasedViewNumber = options.zeroBasedViewNumber;\n this.pagingMode = options.pagingMode;\n this.criteriaOnlyRequest = (_a = options.criteriaOnlyRequest) !== null && _a !== void 0 ? _a : false;\n }\n /**\n * Gets a resource parameter, handling both REQUEST_SERVER (DETAILS structure) and DATASERVER (flat structure)\n * @param key - The parameter key to retrieve\n * @returns The parameter value, or undefined if not found\n * @internal\n */\n getResourceParam(key) {\n var _a, _b;\n // Check if this is a REQUEST_SERVER structure with DETAILS\n if (((_a = this.resourceParams) === null || _a === void 0 ? void 0 : _a.DETAILS) && typeof this.resourceParams.DETAILS === 'object') {\n return this.resourceParams.DETAILS[key];\n }\n // Otherwise, it's a DATASERVER flat structure\n return (_b = this.resourceParams) === null || _b === void 0 ? void 0 : _b[key];\n }\n /**\n * Sets a resource parameter, handling both REQUEST_SERVER (DETAILS structure) and DATASERVER (flat structure)\n * @param key - The parameter key to set\n * @param value - The value to set\n * @internal\n */\n setResourceParam(key, value) {\n var _a;\n // Check if this is a REQUEST_SERVER structure with DETAILS\n if (((_a = this.resourceParams) === null || _a === void 0 ? void 0 : _a.DETAILS) && typeof this.resourceParams.DETAILS === 'object') {\n this.resourceParams.DETAILS[key] = value;\n }\n else {\n // Otherwise, it's a DATASERVER flat structure\n this.resourceParams[key] = value;\n }\n }\n getRows(params) {\n throw new Error('Method not implemented.');\n }\n /**\n * Handles filtering setup for server-side datasources.\n * Common logic used by both dataserver and req-rep implementations.\n */\n setupFiltering(params) {\n return __awaiter(this, void 0, void 0, function* () {\n const filterModelBeingApplied = params.request.filterModel;\n const filtersAreBeingApplied = Object.keys(filterModelBeingApplied).length > 0;\n const filtersAreGettingCleaned = Object.keys(filterModelBeingApplied).length === 0;\n const filterModelBeingAppliedDiffersFromCurrent = JSON.stringify(filterModelBeingApplied) !== JSON.stringify(this.currentFilterModel);\n if (filterModelBeingAppliedDiffersFromCurrent || filtersAreBeingApplied) {\n if (filtersAreGettingCleaned && this.currentFilterModel) {\n this.currentFilterModel = null;\n this.setResourceParam('CRITERIA_MATCH', this.originalCriteriaMatch);\n yield this.refreshDatasource(params);\n return;\n }\n else if (filterModelBeingAppliedDiffersFromCurrent && filtersAreBeingApplied) {\n this.currentFilterModel = filterModelBeingApplied;\n this.setResourceParam('CRITERIA_MATCH', this.buildCriteriaMatchFromFilters());\n yield this.refreshDatasource(params);\n return;\n }\n }\n });\n }\n /**\n * Legacy method that combines filtering and sorting.\n * Kept for backward compatibility. New implementations should use setupFiltering and setupSorting directly.\n * @deprecated Use setupFiltering() and setupSorting() separately instead\n */\n setupFilteringAndSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n });\n }\n destroy() {\n this.rowData = new Map();\n this.clientRowsCount = 0;\n this.calculatedRowsCount = 0;\n this.serverRowsCount = 0;\n this.currentSequenceId = 0;\n this.moreRows = false;\n this.sourceRef = undefined;\n this.lastSuccessRowData = undefined;\n }\n refreshDatasource(params) {\n return __awaiter(this, void 0, void 0, function* () {\n this.destroy();\n this.updateResourceParams(params);\n yield this.reloadResourceDataFunc({\n criteria: this.getResourceParam('CRITERIA_MATCH'),\n orderBy: this.getResourceParam('ORDER_BY'),\n reverse: this.getResourceParam('REVERSE'),\n });\n });\n }\n updateResourceParams(params) {\n if (params.criteria !== undefined) {\n this.originalCriteriaMatch = params.criteria;\n this.setResourceParam('CRITERIA_MATCH', this.buildCriteriaMatchFromFilters());\n }\n if (params.orderBy !== undefined) {\n this.setResourceParam('ORDER_BY', params.orderBy);\n }\n if (params.reverse !== undefined) {\n this.setResourceParam('REVERSE', params.reverse);\n }\n }\n getOrderByAndToBeSortedColIds(map, searchValue) {\n for (const [key, value] of map.entries()) {\n const searchIndex = value.findIndex((x) => x === searchValue);\n if (searchIndex !== -1) {\n const copy = [...value];\n const toBeSorted = copy.splice(searchIndex, 1);\n return { orderBy: key, toBeSorted };\n }\n }\n }\n buildCriteriaMatchFromFilters() {\n this.setResourceParam('CRITERIA_MATCH', this.originalCriteriaMatch);\n let criteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n if (criteriaMatch && typeof criteriaMatch === 'string') {\n criteriaMatch = criteriaMatch.split(';');\n this.setResourceParam('CRITERIA_MATCH', criteriaMatch);\n }\n if (!criteriaMatch) {\n criteriaMatch = [];\n this.setResourceParam('CRITERIA_MATCH', criteriaMatch);\n }\n const criteria = criteriaMatch.concat(this.criteriaFromFilters());\n return criteria.join(' && ');\n }\n criteriaFromFilters() {\n const filters = [];\n this.getFiltersByType('text').forEach((k) => {\n if (!this.currentFilterModel[k].filter &&\n (this.currentFilterModel[k].type === 'false' || this.currentFilterModel[k].type === 'true')) {\n filters.push(`${k} == ${this.currentFilterModel[k].type}`);\n }\n else {\n switch (this.currentFilterModel[k].type) {\n case 'blank':\n filters.push(`(${k} == '' || ${k} == null)`);\n break;\n case 'contains':\n filters.push(`Expr.containsIgnoreCase(${k}, '${this.currentFilterModel[k].filter}')`);\n break;\n case 'equals':\n filters.push(`${k} == '${this.currentFilterModel[k].filter}'`);\n break;\n case 'notBlank':\n filters.push(`(${k} != '' && ${k} != null)`);\n break;\n case 'notEqual':\n filters.push(`${k} != '${this.currentFilterModel[k].filter}'`);\n break;\n case 'wordStartsWith':\n filters.push(`Expr.containsWordsStartingWithIgnoreCase(${k}, '${this.currentFilterModel[k].filter}')`);\n break;\n }\n }\n });\n // TODO: Handle multi filters if we decide we want to use them in SSRM\n // Handle set filters (typically used for enum fields with ag-set-column-filter)\n this.getFiltersByType('set').forEach((k) => {\n var _a, _b, _c;\n const model = (_a = this.currentFilterModel) === null || _a === void 0 ? void 0 : _a[k];\n const selectedValues = ((_b = model === null || model === void 0 ? void 0 : model.values) !== null && _b !== void 0 ? _b : []);\n if (!selectedValues || selectedValues.length === 0) {\n // Nothing selected means no additional criteria\n return;\n }\n // Try to detect \"all values selected\" using VALID_VALUES from metadata.\n // In that case we don't want to send any criteria, as it would be equivalent\n // to no filter at all.\n const colMeta = (_c = this.resourceColDefs) === null || _c === void 0 ? void 0 : _c.find((o) => o.NAME === k);\n let allValues;\n if (colMeta === null || colMeta === void 0 ? void 0 : colMeta.VALID_VALUES) {\n try {\n allValues = Array.isArray(colMeta.VALID_VALUES)\n ? colMeta.VALID_VALUES\n : colMeta.VALID_VALUES.split('|');\n }\n catch (_d) {\n allValues = undefined;\n }\n }\n if (allValues &&\n allValues.length === selectedValues.length &&\n allValues.every((v) => selectedValues.includes(v))) {\n // All enum options are selected – skip adding criteria for this column\n return;\n }\n const orConditions = selectedValues.map((val) => {\n const safeVal = String(val).replace(/'/g, \"\\\\'\");\n return `${k} == '${safeVal}'`;\n });\n if (orConditions.length > 0) {\n filters.push(`(${orConditions.join(' || ')})`);\n }\n });\n this.getFiltersByType('number').forEach((k) => {\n const value = this.currentFilterModel[k].filter;\n const valueTwo = this.currentFilterModel[k].filterTo;\n switch (this.currentFilterModel[k].type) {\n case 'equals':\n !isNaN(value) && filters.push(`${k} == ${value}`);\n break;\n case 'notEqual':\n !isNaN(value) && filters.push(`${k} != ${value}`);\n break;\n case 'greaterThan':\n !isNaN(value) && filters.push(`${k} > ${value}`);\n break;\n case 'greaterThanOrEqual':\n !isNaN(value) && filters.push(`${k} >= ${value}`);\n break;\n case 'lessThan':\n !isNaN(value) && filters.push(`${k} < ${value}`);\n break;\n case 'lessThanOrEqual':\n !isNaN(value) && filters.push(`${k} <= ${value}`);\n break;\n case 'inRange':\n !isNaN(value) &&\n !isNaN(valueTwo) &&\n filters.push(`${k} >= ${value} && ${k} <= ${valueTwo}`);\n break;\n case 'blank':\n filters.push(`${k} == 0`);\n break;\n case 'notBlank':\n filters.push(`${k} != 0`);\n break;\n }\n });\n this.getFiltersByType('date').forEach((k) => {\n var _a, _b;\n const dateFrom = (_a = this.currentFilterModel[k].dateFrom) === null || _a === void 0 ? void 0 : _a.replace(/-/g, '').replace('T', '-').split(' ')[0];\n const dateTo = (_b = this.currentFilterModel[k].dateTo) === null || _b === void 0 ? void 0 : _b.replace(/-/g, '').replace('T', '-').split(' ')[0];\n switch (this.currentFilterModel[k].type) {\n case 'equals':\n filters.push(`Expr.dateIsEqual(${k}, '${dateFrom}')`);\n break;\n case 'lessThan':\n filters.push(`Expr.dateIsBefore(${k}, '${dateFrom}')`);\n break;\n case 'greaterThan':\n filters.push(`Expr.dateIsAfter(${k}, '${dateFrom}')`);\n break;\n case 'inRange':\n filters.push(`Expr.dateIsAfter(${k}, '${dateFrom}') && Expr.dateIsBefore(${k}, '${dateTo}')`);\n break;\n case 'isToday':\n const now = new Date();\n const year = now.getFullYear();\n const month = (now.getMonth() + 1).toString().padStart(2, '0');\n const day = now.getDate().toString().padStart(2, '0');\n const todayStr = `${year}-${month}-${day} 00:00:00`;\n filters.push(`Expr.dateIsEqual(${k}, '${todayStr}')`);\n break;\n case 'blank':\n filters.push(`${k} == null`);\n break;\n case 'notBlank':\n filters.push(`${k} != null`);\n break;\n }\n });\n return filters;\n }\n getFiltersByType(filterType) {\n var _a;\n return Object.keys((_a = this.currentFilterModel) !== null && _a !== void 0 ? _a : {})\n .filter((k) => this.resourceColDefs.findIndex((o) => o.NAME === k) !== -1)\n .filter((k) => this.currentFilterModel[k].filterType === filterType);\n }\n getPageNumber(start, recordsPerPage, totalRecords, zeroBasedViewNumber = true) {\n if (totalRecords !== undefined && start > totalRecords) {\n start = Math.floor((totalRecords - 1) / recordsPerPage) * recordsPerPage + 1;\n }\n const currentPageIndex = Math.ceil(start / recordsPerPage);\n return zeroBasedViewNumber ? currentPageIndex : currentPageIndex + 1;\n }\n getCorrectRowCount(params) {\n const currentLastRowNumber = params.request.endRow;\n this.calculatedRowsCount = this.clientRowsCount || currentLastRowNumber;\n const defaultCount = Math.min(this.serverRowsCount, this.maxView);\n let rowCount;\n const criteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n if (this.pagination) {\n rowCount = !criteriaMatch ? Math.min(this.serverRowsCount, this.maxView) : undefined;\n if (criteriaMatch) {\n rowCount = defaultCount;\n }\n return rowCount;\n }\n if (currentLastRowNumber === this.serverRowsCount) {\n rowCount = this.serverRowsCount;\n }\n else if (currentLastRowNumber > this.maxView ||\n currentLastRowNumber > this.calculatedRowsCount) {\n rowCount = Math.min(defaultCount, this.calculatedRowsCount);\n }\n else if (!this.moreRows && this.serverRowsCount > this.calculatedRowsCount) {\n rowCount = this.calculatedRowsCount;\n }\n return rowCount;\n }\n get isNotFirstViewNumber() {\n return this.zeroBasedViewNumber ? this.currentSequenceId > 0 : this.currentSequenceId > 1;\n }\n /**\n * Determines the effective paging mode based on criteriaOnlyRequest availability and user settings\n */\n getEffectivePagingMode() {\n // If user explicitly set a paging mode\n if (this.pagingMode) {\n // If criteriaOnlyRequest is not available but user wants offsetBased, warn and use viewBased\n if (this.pagingMode === 'offsetBased' && !this.criteriaOnlyRequest) {\n logger.warn('offsetBased paging mode requires criteriaOnlyRequest support. Falling back to viewBased mode.');\n return 'viewBased';\n }\n return this.pagingMode;\n }\n // Auto-determine based on criteriaOnlyRequest availability\n return this.criteriaOnlyRequest ? 'offsetBased' : 'viewBased';\n }\n}\n__decorate([\n Auth\n], BaseServerSideDatasource.prototype, \"auth\", void 0);\n__decorate([\n Connect\n], BaseServerSideDatasource.prototype, \"connect\", void 0);\n__decorate([\n UUID\n], BaseServerSideDatasource.prototype, \"uuid\", void 0);\n","import { __awaiter } from \"tslib\";\nimport { MessageType, dataServerResultFilter, logger, } from '@genesislcap/foundation-comms';\nimport { DOM } from '@microsoft/fast-element';\nimport { getAvailableIndexes, getAvailableIndexFields } from '../utils';\nimport { BaseServerSideDatasource } from './server-side.resource-base';\n/**\n * The DATASERVER IServerSideDatasource implementation, used for SSRM (Server-Side Row Model) in the grid.\n * @beta\n */\nexport class DataserverServerSideDatasource extends BaseServerSideDatasource {\n constructor(options) {\n super(options);\n this.createDataserverStreamFunc = options.createDataserverStreamFunc;\n }\n refreshDatasource(params) {\n const _super = Object.create(null, {\n refreshDatasource: { get: () => super.refreshDatasource }\n });\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n (_a = this.dataserverStreamSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.dataserverStreamSubscription = undefined;\n yield _super.refreshDatasource.call(this, params);\n });\n }\n getRows(params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Use separated filtering and sorting setup\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {\n params.success(this.lastSuccessRowData);\n return;\n }\n if (!this.dataserverStream) {\n this.dataserverStream = yield this.createDataserverStreamFunc(this.resourceParams);\n }\n if (this.currentSequenceId >= 1 &&\n (this.moreRows ||\n params.request.startRow >= Number(this.maxRows) ||\n params.request.startRow === 0)) {\n if (this.pagination) {\n this.resourceParams.VIEW_NUMBER = this.getPageNumber(params.request.startRow, this.maxRows, this.maxView, this.zeroBasedViewNumber);\n // if (this.resourceParams.VIEW_NUMBER === 1) {\n // await this.refreshDatasource(params);\n // return;\n // }\n }\n this.connect.getMoreRows(this.sourceRef, this.resourceParams.VIEW_NUMBER);\n }\n let applyResult = true;\n this.dataserverStreamSubscription = this.dataserverStream.subscribe((dataserverResult) => {\n if (applyResult) {\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n // TODO: this is a bit of hack, due GSF not returning a different ROWS_COUNT when there is a CRITERIA_MATCH\n if (this.resourceParams.CRITERIA_MATCH && this.pagination) {\n const updatedInfo = yield this.connect.snapshot(this.resourceName, {\n MAX_ROWS: this.maxView,\n MAX_VIEW: this.maxView,\n CRITERIA_MATCH: this.resourceParams.CRITERIA_MATCH,\n });\n if (!updatedInfo.ROW && !updatedInfo.ROWS_COUNT) {\n logger.warn('No data returned when criteria is applied.');\n this.serverRowsCount = 0;\n this.clientRowsCount = 0;\n }\n else {\n this.serverRowsCount = this.resourceParams.CRITERIA_MATCH\n ? updatedInfo.ROW.length\n : updatedInfo.ROWS_COUNT;\n }\n }\n this.applyServerSideData(params, dataserverResult);\n applyResult = false;\n }));\n }\n });\n });\n }\n applyServerSideData(params, result) {\n var _a;\n const messageType = result.MESSAGE_TYPE;\n if (messageType &&\n (messageType === MessageType.LOGOFF_ACK || messageType === MessageType.MSG_NACK)) {\n // Trigger error dialog for connection/authentication errors\n if (this.errorHandlerFunc) {\n const errorMessage = messageType === MessageType.LOGOFF_ACK\n ? `Connection lost to ${this.resourceName}`\n : `Authentication failed for ${this.resourceName}`;\n this.errorHandlerFunc(errorMessage, 'connection');\n }\n params.fail();\n return;\n }\n this.moreRows = result.MORE_ROWS;\n if (result.ROW) {\n const nextMessage = dataServerResultFilter(result);\n this.handleCurrentStreamLoad(nextMessage);\n }\n else {\n this.rowData = new Map();\n const successRowData = { rowData: [] };\n successRowData.rowCount = 0;\n params.success(successRowData);\n return;\n }\n this.currentSequenceId = result.SEQUENCE_ID;\n if (this.currentSequenceId === 1) {\n this.sourceRef = result.SOURCE_REF;\n if (this.serverRowsCount === 0) {\n this.serverRowsCount = (_a = result.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;\n }\n }\n const successRowData = {\n rowData: Array.from(this.rowData.values()),\n };\n successRowData.rowCount = this.getCorrectRowCount(params);\n this.lastSuccessRowData = successRowData;\n params.success(successRowData);\n }\n /**\n * Dataserver-specific sorting setup that validates columns are part of an index.\n * This is required because dataserver needs indexed columns for efficient sorting.\n */\n setupSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const toBeAppliedSortModel = params.request.sortModel;\n if (((_a = this.currentSortModel) === null || _a === void 0 ? void 0 : _a.length) !== toBeAppliedSortModel.length ||\n toBeAppliedSortModel.length > 0) {\n if (toBeAppliedSortModel.length === 0 && this.currentSortModel) {\n this.calculatedRowsCount = 0;\n this.currentSortModel = null;\n this.resourceParams.ORDER_BY = null;\n this.resourceParams.REVERSE = null;\n yield this.refreshDatasource(params);\n return;\n }\n else if (toBeAppliedSortModel.length > 0) {\n const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user\n const sortTypeBeingApplied = toBeAppliedSortModel[0].sort;\n const orderByAndToBeSortedColIds = this.getOrderByAndToBeSortedColIds(this.resourceIndexes, coldIdBeingSorted);\n if (!orderByAndToBeSortedColIds) {\n this.calculatedRowsCount = 0;\n const availableIndexes = getAvailableIndexes(this.resourceIndexes);\n const availableIndexFields = getAvailableIndexFields(this.resourceIndexes);\n logger.warn(`The FIELD/column (${coldIdBeingSorted}) being sorted is not part of an INDEX, required for the [orderBy] operation. See https://learn.genesis.global/docs/database/data-types/index-entities/`);\n logger.debug('Available indexes:', availableIndexes);\n logger.debug('Columns that can be sorted with the available indexes:', availableIndexFields);\n params.fail();\n return;\n }\n else if (JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel)) {\n this.currentSortModel = toBeAppliedSortModel;\n this.resourceParams.ORDER_BY = orderByAndToBeSortedColIds.orderBy;\n this.resourceParams.REVERSE = sortTypeBeingApplied === 'desc' ? true : false;\n yield this.refreshDatasource(params);\n return;\n }\n }\n }\n });\n }\n destroy() {\n const _super = Object.create(null, {\n destroy: { get: () => super.destroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.dataserverStream = undefined;\n (_a = this.dataserverStreamSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.dataserverStreamSubscription = undefined;\n yield _super.destroy.call(this);\n });\n }\n handleCurrentStreamLoad(result) {\n var _a, _b;\n if (!result)\n return;\n const rows = new Map();\n (_a = result.inserts) === null || _a === void 0 ? void 0 : _a.forEach((insertData) => {\n rows.set(insertData[this.rowId], insertData);\n });\n this.clientRowsCount += (_b = result.inserts.length) !== null && _b !== void 0 ? _b : 0;\n this.rowData = rows;\n }\n}\n","import { __awaiter } from \"tslib\";\nimport { MessageType, } from '@genesislcap/foundation-comms';\nimport debounce from 'lodash.debounce';\nimport { logger } from '../utils';\nimport { BaseServerSideDatasource } from './server-side.resource-base';\n/**\n * Debounce time for stream creation after user stops scrolling (in ms)\n */\nconst POLLING_STREAM_DEBOUNCE_MS = 300;\n/**\n * The REQUEST_SERVER IServerSideDatasource implementation, used for SSRM (Server-Side Row Model) in the grid.\n * @beta\n */\nexport class ReqRepServerSideDatasource extends BaseServerSideDatasource {\n constructor(options) {\n var _a, _b, _c, _d, _e;\n super(options);\n // Track the total discovered row count when we reach the last page\n this.discoveredTotalRowCount = null;\n this.currentNextOffset = 0;\n this.createReqRepRequestFunc = options.createReqRepRequestFunc;\n this.createReqRepStreamFunc = options.createReqRepStreamFunc;\n this.onPollingUpdate = options.onPollingUpdateFunc;\n this.resetPreviousPollResult = options.resetPreviousPollResultFunc;\n this.usePolling = (_a = options.usePolling) !== null && _a !== void 0 ? _a : false;\n // Initialize debounced stream creation function\n this.debouncedCreateStream = debounce((params) => this.createPollingStream(params), POLLING_STREAM_DEBOUNCE_MS);\n const effectivePagingMode = this.getEffectivePagingMode();\n // Initialize based on paging mode\n if (effectivePagingMode === 'viewBased') {\n if (!((_c = (_b = options.resourceParams) === null || _b === void 0 ? void 0 : _b.DETAILS) === null || _c === void 0 ? void 0 : _c.VIEW_NUMBER)) {\n this.resourceParams.DETAILS.VIEW_NUMBER = this.zeroBasedViewNumber ? 0 : 1;\n }\n }\n else {\n // offsetBased\n if (!((_e = (_d = options.resourceParams) === null || _d === void 0 ? void 0 : _d.DETAILS) === null || _e === void 0 ? void 0 : _e.OFFSET)) {\n this.resourceParams.DETAILS.OFFSET = 0;\n }\n }\n }\n getRows(params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Use custom filtering and sorting setup for req-rep\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {\n params.success(this.lastSuccessRowData);\n return;\n }\n const effectivePagingMode = this.getEffectivePagingMode();\n // Update pagination params based on paging mode\n this.updatePaginationParams(params, effectivePagingMode);\n const requestParams = {\n DETAILS: this.buildRequestDetails(effectivePagingMode),\n };\n const requestResult = yield this.createReqRepRequestFunc(requestParams);\n // Determine if this is the last view/page\n const isLastView = yield this.determineIsLastView(requestResult, requestParams, effectivePagingMode);\n // Apply the result to the grid\n this.applyServerSideData(params, requestResult, isLastView);\n // If polling enabled, schedule stream creation after user stops scrolling\n this.schedulePollingStream(requestParams);\n });\n }\n /**\n * Update pagination params based on paging mode\n */\n updatePaginationParams(params, effectivePagingMode) {\n if (effectivePagingMode === 'viewBased') {\n if (this.currentSequenceId !== null && this.currentSequenceId >= 0 && this.moreRows) {\n if (this.pagination) {\n this.resourceParams.DETAILS.VIEW_NUMBER = this.getPageNumber(params.request.startRow, this.maxRows, undefined, // Don't pass maxView as totalRecords since it's not a valid total count\n this.zeroBasedViewNumber);\n }\n else {\n this.resourceParams.DETAILS.VIEW_NUMBER += 1;\n }\n }\n }\n else {\n // offsetBased: use startRow as the OFFSET to ensure correct block-to-offset mapping,\n // even when blocks are re-requested out of order (e.g. polling refresh of block 0)\n this.resourceParams.DETAILS.OFFSET = params.request.startRow;\n }\n }\n /**\n * Determine if this is the last view/page\n */\n determineIsLastView(requestResult, requestParams, effectivePagingMode) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const hasMoreRowsInResult = 'MORE_ROWS' in requestResult;\n let isLastView = false;\n if (effectivePagingMode === 'viewBased') {\n if (hasMoreRowsInResult) {\n isLastView = !requestResult.MORE_ROWS;\n }\n else if (requestResult.NEXT_VIEW !== -1) {\n const preCheckRequestParams = Object.assign(Object.assign({}, requestParams), { DETAILS: Object.assign(Object.assign({}, requestParams.DETAILS), { VIEW_NUMBER: requestResult.NEXT_VIEW }) });\n const moreRowsPreCheck = yield this.createReqRepRequestFunc(preCheckRequestParams);\n isLastView = moreRowsPreCheck.NEXT_VIEW === -1 && ((_a = moreRowsPreCheck.REPLY) === null || _a === void 0 ? void 0 : _a.length) === 0;\n }\n }\n else {\n // offsetBased\n isLastView = hasMoreRowsInResult && !requestResult.MORE_ROWS;\n if ('NEXT_OFFSET' in requestResult && requestResult.NEXT_OFFSET !== -1) {\n this.currentNextOffset = requestResult.NEXT_OFFSET;\n }\n else {\n this.currentNextOffset = 0;\n }\n }\n return isLastView;\n });\n }\n /**\n * Schedules polling stream creation if enabled.\n * @remarks\n * Destroys any existing stream and schedules a new one after the user stops scrolling (debounced).\n * This prevents excessive stream recreation during rapid scrolling.\n */\n schedulePollingStream(requestParams) {\n if (this.usePolling && this.createReqRepStreamFunc) {\n this.destroyPollingStream();\n this.debouncedCreateStream(requestParams);\n }\n }\n applyServerSideData(params, result, isLastView) {\n var _a, _b;\n const messageType = result.MESSAGE_TYPE;\n if (messageType &&\n (messageType === MessageType.LOGOFF_ACK || messageType === MessageType.MSG_NACK)) {\n // Trigger error dialog for connection/authentication errors\n if (this.errorHandlerFunc) {\n const errorMessage = messageType === MessageType.LOGOFF_ACK\n ? `Connection lost to ${this.resourceName}`\n : `Authentication failed for ${this.resourceName}`;\n this.errorHandlerFunc(errorMessage, 'connection');\n }\n params.fail();\n return;\n }\n const effectivePagingMode = this.getEffectivePagingMode();\n // TODO: the code below will be tweaked/removed when gsf <8.14 is no longer supported\n if ('MORE_ROWS' in result) {\n this.moreRows = result.MORE_ROWS;\n }\n else {\n // Fall back to the existing logic for backwards compatibility\n if (effectivePagingMode === 'viewBased') {\n this.moreRows =\n !isLastView &&\n result.NEXT_VIEW !== -1 &&\n result.NEXT_VIEW > this.resourceParams.DETAILS.VIEW_NUMBER;\n }\n else {\n // offsetBased\n this.moreRows =\n !isLastView &&\n result.NEXT_OFFSET !== -1 &&\n result.NEXT_OFFSET > this.resourceParams.DETAILS.OFFSET;\n }\n }\n if (result.REPLY) {\n this.handleCurrentStreamLoad(result.REPLY);\n }\n else {\n this.rowData = new Map();\n const successRowData = { rowData: [] };\n successRowData.rowCount = 0;\n params.success(successRowData);\n return;\n }\n // Update current sequence ID based on paging mode\n if (effectivePagingMode === 'viewBased') {\n this.currentSequenceId = this.resourceParams.DETAILS.VIEW_NUMBER;\n }\n else {\n // For offsetBased, use OFFSET / maxRows to get the sequence\n this.currentSequenceId = Math.floor(this.resourceParams.DETAILS.OFFSET / this.maxRows);\n }\n this.sourceRef = result.SOURCE_REF;\n // For req-rep, store the total row count when we reach the last page\n if (!this.moreRows) {\n const currentBatchSize = this.rowData.size;\n this.discoveredTotalRowCount = params.request.startRow + currentBatchSize;\n }\n // Reset serverRowsCount accumulation for req-rep pagination\n if (this.pagination) {\n this.serverRowsCount = (_a = result.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;\n }\n else {\n this.serverRowsCount += (_b = result.ROWS_COUNT) !== null && _b !== void 0 ? _b : this.rowData.size;\n }\n const successRowData = {\n rowData: Array.from(this.rowData.values()),\n };\n successRowData.rowCount = this.getCorrectRowCount(params);\n this.lastSuccessRowData = successRowData;\n params.success(successRowData);\n }\n getCorrectRowCount(params) {\n let rowCount;\n if (this.pagination) {\n if (this.moreRows) {\n // More data available, return -1 to indicate unknown total\n rowCount = -1;\n }\n else {\n // Use discovered total if available, otherwise calculate from current position\n rowCount = this.discoveredTotalRowCount || params.request.startRow + this.rowData.size;\n }\n return rowCount;\n }\n // Non-pagination mode (streaming)\n if (this.moreRows) {\n rowCount = -1; // More data available, unknown total\n }\n else {\n // Use discovered total or calculate from current batch\n rowCount = this.discoveredTotalRowCount || params.request.startRow + this.rowData.size;\n }\n return rowCount;\n }\n handleCurrentStreamLoad(reply) {\n if (!reply || reply.length == 0)\n return;\n const rows = new Map();\n reply.forEach((insertData) => {\n const insertDataRowId = insertData[this.rowId];\n if (insertDataRowId) {\n rows.set(insertDataRowId, insertData);\n return;\n }\n const noRowIdMessage = `The specified rowId (${this.rowId}) is not present in the data. Since this is a snapshot (isSnapshot=true), an auto-generated UUID will be used. For custom identifiers, use the 'row-id' attribute.`;\n logger.error(noRowIdMessage);\n const tempId = this.uuid.createId();\n insertData[this.rowId] = tempId;\n rows.set(tempId, insertData);\n });\n this.rowData = rows;\n }\n /**\n * Req-rep specific sorting setup that allows any column to be sorted\n * (unlike dataserver which requires indexed columns only)\n */\n setupSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const toBeAppliedSortModel = params.request.sortModel;\n if (((_a = this.currentSortModel) === null || _a === void 0 ? void 0 : _a.length) !== toBeAppliedSortModel.length ||\n toBeAppliedSortModel.length > 0) {\n if (toBeAppliedSortModel.length === 0 && this.currentSortModel) {\n this.calculatedRowsCount = 0;\n this.currentSortModel = null;\n this.resourceParams.DETAILS.ORDER_BY = undefined;\n yield this.refreshDatasource(params);\n return;\n }\n else if (toBeAppliedSortModel.length > 0) {\n const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user\n const sortTypeBeingApplied = toBeAppliedSortModel[0].sort;\n // For req-rep, we can sort by any column without requiring it to be part of an index\n if (JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel)) {\n this.currentSortModel = toBeAppliedSortModel;\n this.resourceParams.DETAILS.ORDER_BY =\n coldIdBeingSorted + (sortTypeBeingApplied === 'desc' ? ' DESC' : ' ASC'); // Use the column directly\n yield this.refreshDatasource(params);\n return;\n }\n }\n }\n });\n }\n refreshDatasource(params) {\n const _super = Object.create(null, {\n refreshDatasource: { get: () => super.refreshDatasource }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyPollingStream();\n if (this.debouncedCreateStream) {\n this.debouncedCreateStream.cancel();\n }\n this.discoveredTotalRowCount = null;\n this.currentNextOffset = 0;\n this.resourceParams.DETAILS.VIEW_NUMBER = this.zeroBasedViewNumber ? 0 : 1;\n this.resourceParams.DETAILS.OFFSET = 0;\n yield _super.refreshDatasource.call(this, params);\n });\n }\n destroy() {\n const _super = Object.create(null, {\n destroy: { get: () => super.destroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyPollingStream();\n if (this.debouncedCreateStream) {\n this.debouncedCreateStream.cancel();\n }\n yield _super.destroy.call(this);\n });\n }\n /**\n * Creates a polling stream for the currently loaded data.\n * @remarks\n * This method creates a separate datasource instance that polls all currently loaded rows\n * (from offset 0 to current offset + maxRows). The polling results are sent to the parent\n * datasource via the `onPollingUpdate` callback for change detection and grid updates.\n *\n * The stream will only apply updates if the request params haven't changed (user hasn't\n * scrolled away or changed filters/sorting).\n * @param requestParams - The request parameters for the current view\n */\n createPollingStream(requestParams) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n this.destroyPollingStream();\n this.currentStreamParams = requestParams;\n const { stream, datasource } = yield this.createReqRepStreamFunc(requestParams);\n this.reqRepPollingStream = stream;\n this.reqRepPollingDatasource = datasource;\n this.reqRepPollingSubscription = this.reqRepPollingStream.subscribe({\n next: (result) => {\n if (this.currentStreamParams &&\n JSON.stringify(this.currentStreamParams) === JSON.stringify(requestParams)) {\n if (this.onPollingUpdate) {\n this.onPollingUpdate(result);\n }\n }\n },\n error: (error) => {\n var _a;\n logger.error('Polling stream error:', error);\n if (this.errorHandlerFunc) {\n this.errorHandlerFunc(((_a = error === null || error === void 0 ? void 0 : error.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || (error === null || error === void 0 ? void 0 : error.message), 'stream');\n }\n },\n });\n logger.debug('Polling stream created for params:', requestParams);\n }\n catch (error) {\n logger.error('Failed to create polling stream:', error);\n }\n });\n }\n /**\n * Destroys the current polling stream and associated datasource.\n * @remarks\n * Cleans up the polling subscription, destroys the separate polling datasource instance,\n * and resets the previous poll comparison state. Called when:\n * - User scrolls to a new page\n * - Filters or sorting changes\n * - The datasource is being destroyed\n */\n destroyPollingStream() {\n if (this.reqRepPollingSubscription) {\n this.reqRepPollingSubscription.unsubscribe();\n this.reqRepPollingSubscription = undefined;\n logger.debug('Polling subscription destroyed');\n }\n if (this.reqRepPollingDatasource) {\n this.reqRepPollingDatasource.destroy();\n this.reqRepPollingDatasource = undefined;\n logger.debug('Polling datasource destroyed');\n }\n this.reqRepPollingStream = undefined;\n this.currentStreamParams = undefined;\n if (this.resetPreviousPollResult) {\n this.resetPreviousPollResult();\n }\n }\n buildRequestDetails(effectivePagingMode) {\n const baseDetails = {\n CRITERIA_MATCH: this.resourceParams.DETAILS.CRITERIA_MATCH,\n MAX_ROWS: this.resourceParams.DETAILS.MAX_ROWS,\n ORDER_BY: this.resourceParams.DETAILS.ORDER_BY,\n };\n if (effectivePagingMode === 'viewBased') {\n return Object.assign(Object.assign({}, baseDetails), { VIEW_NUMBER: this.resourceParams.DETAILS.VIEW_NUMBER });\n }\n else {\n // offsetBased\n return Object.assign(Object.assign({}, baseDetails), { OFFSET: this.resourceParams.DETAILS.OFFSET });\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { dataServerResultFilter, Datasource, MessageType, normaliseCriteria, toFieldMetadata, } from '@genesislcap/foundation-comms';\nimport { insertDocumentCSSRule, JSONSerializer, LifecycleMixin, } from '@genesislcap/foundation-utils';\nimport { attr, customElement, DOM, observable } from '@microsoft/fast-element';\nimport { gridProGenesisDatasourceEventNames } from '../grid-pro-genesis-datasource';\nimport { datasourceEventNames, } from '../grid-pro-genesis-datasource/datasource-events.types';\nimport { logger } from '../utils';\nimport { GridProBaseDatasource } from './base.datasource';\nimport { getFilterByFieldType, getServerSideFilterParamsByFieldType, } from './server-side.grid-definitions';\nimport { DataserverServerSideDatasource } from './server-side.resource-dataserver';\nimport { ReqRepServerSideDatasource } from './server-side.resource-reqrep';\nconst criteriaDelimiter = ';';\nconst withoutColumnDefs = null;\n/**\n * Custom CSS for server-side datasource sort indicators\n * Makes sort indicators always visible with custom styling\n */\nconst serverSideSortIndicatorCSS = `\n .grid-pro-server-side .ag-header-cell-sortable .ag-sort-indicator-container {\n opacity: 1 !important;\n visibility: visible !important;\n }\n \n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-container {\n opacity: 0.4 !important;\n }\n \n .grid-pro-server-side .ag-header-cell-sorted .ag-sort-indicator-container {\n opacity: 1 !important;\n }\n \n .grid-pro-server-side .ag-sort-ascending-icon::before,\n .grid-pro-server-side .ag-sort-descending-icon::before,\n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-icon::before {\n font-family: var(--ag-icon-font-family, agGridAlpine) !important;\n font-size: var(--ag-icon-size, 16px) !important;\n color: var(--ag-header-foreground-color, var(--ag-foreground-color)) !important;\n }\n \n .grid-pro-server-side .ag-sort-ascending-icon::before {\n content: \"\\\\e90d\" !important; /* AG Grid sort up icon */\n }\n \n .grid-pro-server-side .ag-sort-descending-icon::before {\n content: \"\\\\e90c\" !important; /* AG Grid sort down icon */\n }\n \n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-icon::before {\n content: \"\\\\e90b\" !important; /* AG Grid sort icon */\n opacity: 0.6 !important;\n }\n \n /* Ensure the sort indicator is always visible for sortable columns in server-side mode */\n .grid-pro-server-side .ag-header-cell-sortable .ag-sort-indicator-icon {\n display: inline-block !important;\n }\n`;\n/**\n * A Genesis Datasource element, for server-side | SSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Server-Side Row Model. Requires `@ag-grid-enterprise/server-side-row-model` setup and valid AG Grid Enterprise license.\n *\n * **Custom Sort Indicators**: This datasource automatically applies custom sort indicators that are always visible (instead of only on hover).\n * Sortable columns will show a subtle sort icon even when not sorted, and active sort indicators will be more prominent.\n * The custom styling uses AG Grid's native icon font for consistency with the grid theme.\n *\n * @beta\n *\n * @fires base-datasource-error - Fired when a datasource error is reported\n * @fires datasource-error - Fired when a datasource error occurs (for grid integration)\n * @fires base-datasource-connected - Fired when error state is cleared after connection succeeds\n * @fires datasource-loading-finished - Fired when pending stream transactions are flushed with no row changes\n * @fires datasource-no-data-available - Fired when loading finishes with an empty row set\n * @fires datasource-data-changed - Fired when row data changes from applied stream transactions\n * @fires cache-filter-config - Fired to persist filter configuration for the grid\n * @fires refresh-server-side - Fired to request a server-side refresh\n * @fires set-server-side-datasource - Fired to attach or clear the server-side row model datasource\n * @fires datasource-loading-started - Fired when a server-side load cycle starts\n * @fires add-grid-css-class - Fired to add a CSS class on the grid host (e.g. server-side styling)\n * @fires remove-grid-css-class - Fired to remove a CSS class from the grid host\n * @fires datasource-initialize - Fired to hand off server-side grid options\n * @fires datasource-init - Fired when the server-side grid model should initialize data\n * @fires datasource-schema-updated - Fired when column metadata or defs are updated\n * @fires datasource-filters-restored - Fired when persisted filters are reapplied\n * @fires datasource-data-cleared - Fired when server-side row data is cleared\n * @fires apply-server-side-transaction - Fired to apply a server-side row transaction\n * @fires datasource-ready - Fired when the host grid is ready (detail includes pagination state)\n */\nlet GridProServerSideDatasource = class GridProServerSideDatasource extends LifecycleMixin(GridProBaseDatasource) {\n constructor() {\n super(...arguments);\n /**\n * The starting VIEW_NUMBER of the data to be fetched.\n * @remarks The VIEW_NUMBER isincremented by the grid as the user scrolls or changes pages.\n */\n this.zeroBasedViewNumber = false;\n /**\n * Enable live updates for the grid.\n * @remarks Only works with DATASERVER resources (StreamDatasource) right now.\n */\n this.liveUpdates = false;\n this.request = {};\n this.sortIndicatorCSSDestroy = null;\n /**\n * Stores the previous poll result for comparison (poll N vs poll N-1).\n * @remarks\n * This enables efficient change detection by comparing consecutive polls instead of\n * maintaining the entire dataset in memory. Only stores the last poll result.\n * @internal\n */\n this.previousPollResult = new Map();\n /**\n * Tracks whether the baseline poll has been captured for the current polling stream.\n * @remarks\n * Used to distinguish \"no baseline yet\" from \"baseline is empty\". Without this flag,\n * an empty initial poll (e.g. resource starts with zero rows) leaves\n * `previousPollResult.size === 0`, so the next poll — which contains newly-inserted\n * rows — is treated as another \"first poll\" and stored as baseline instead of being\n * applied. The first inserted row would then never appear in the grid.\n * @internal\n */\n this.hasCapturedFirstPollResult = false;\n }\n resourceNameChanged(oldValue, newValue) {\n if (!oldValue || oldValue === newValue)\n return;\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n yield this.restart();\n }));\n }\n criteriaChanged(oldCriteria, newCriteria) {\n const criteriaIsNotDuplicate = oldCriteria !== normaliseCriteria(newCriteria, criteriaDelimiter);\n if (this.ssrmDatasource && criteriaIsNotDuplicate) {\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n yield this.ssrmDatasource.refreshDatasource({\n criteria: newCriteria,\n });\n }));\n }\n }\n connectedCallback() {\n super.connectedCallback();\n const shouldRunConnect = this.shouldRunConnect;\n DOM.queueUpdate(() => {\n if (!shouldRunConnect)\n return;\n this.init();\n this.subscribeToConnection();\n });\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n const shouldRunDisconnect = this.shouldRunDisconnect;\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n if (!shouldRunDisconnect)\n return;\n yield this.destroy();\n this.unsubscribeFromConnection();\n }));\n }\n deepClone() {\n const copy = super.deepClone();\n copy.deferredGridOptions = structuredClone(this.deferredGridOptions);\n copy.deferredColumnStates = structuredClone(this.deferredColumnStates);\n return copy;\n }\n /**\n * Resets the grid data while keeping columnDefs and reloads data.\n * @remarks This is used when the grid is already initialized and we want to reload the data due to a criteria/filter change.\n * @beta\n */\n reloadResourceData(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.datasource.destroy();\n (_a = this.liveUpdatesStream) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.liveUpdatesStream = undefined;\n // Emit event to cache current filter model before clearing data\n this.$emit(datasourceEventNames.cacheFilterConfig);\n this.clearRowData(withoutColumnDefs);\n this.setDisconnected(false);\n // Emit event to refresh server side with purge\n this.$emit(datasourceEventNames.refreshServerSide, { purge: true });\n if (params) {\n const options = Object.assign(Object.assign({}, this.datasourceOptions()), params);\n const initOK = yield this.initializeDatasource(options, true, false);\n if (!initOK) {\n // Emit event to set server side datasource to null\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n logger.error('Genesis Datasource re-init failed on filtering/sorting.');\n }\n }\n else {\n if (this.ssrmDatasource) {\n yield this.ssrmDatasource.destroy();\n this.ssrmDatasource = undefined;\n }\n // Emit events instead of direct grid access\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n this.$emit(datasourceEventNames.loadingStarted);\n yield this.init();\n }\n });\n }\n /**\n * Applies custom sort indicator styling for server-side datasource\n * @internal\n */\n applyServerSideSortIndicatorStyling() {\n // Remove existing styling if present\n this.removeServerSideSortIndicatorStyling();\n // Emit event to add CSS class to grid element\n this.$emit(datasourceEventNames.addGridCssClass, { className: 'grid-pro-server-side' });\n // Insert custom CSS rules\n this.sortIndicatorCSSDestroy = insertDocumentCSSRule(serverSideSortIndicatorCSS, 'grid-pro-server-side-sort');\n }\n /**\n * Removes custom sort indicator styling\n * @internal\n */\n removeServerSideSortIndicatorStyling() {\n // Emit event to remove CSS class from grid element\n this.$emit(datasourceEventNames.removeGridCssClass, { className: 'grid-pro-server-side' });\n // Remove custom CSS rules\n if (this.sortIndicatorCSSDestroy) {\n this.sortIndicatorCSSDestroy();\n this.sortIndicatorCSSDestroy = null;\n }\n }\n init() {\n return __awaiter(this, void 0, void 0, function* () {\n // Emit event to initialize grid with server-side options\n const gridOptions = Object.assign({ getRowId: (params) => {\n if (!params.data) {\n return null;\n }\n return String(params.data[this.rowId]);\n }, getRowStyle(params) {\n var _a, _b;\n if ((_b = (_a = params.data) === null || _a === void 0 ? void 0 : _a.ROW_REF) === null || _b === void 0 ? void 0 : _b.includes('_deleted')) {\n return { color: 'grey' };\n }\n }, cacheBlockSize: this.maxRows, defaultColDef: {\n filter: true,\n resizable: true,\n sortable: false,\n unSortIcon: true,\n }, rowBuffer: 0, rowModelType: 'serverSide', suppressServerSideInfiniteScroll: false, suppressMultiSort: true, onFilterChanged: (params) => { }, onSortChanged: (params) => { }, onPaginationChanged: (event) => this.onPaginationChanged(event) }, this.deferredGridOptions);\n this.$emit(datasourceEventNames.initialize, {\n options: gridOptions,\n keepColDefsOnClearRowData: this.keepColDefsOnClearRowData,\n });\n // TODO: refactor this to prevent rendering datasource component until grid is ready\n this.addEventListener(datasourceEventNames.ready, (event) => __awaiter(this, void 0, void 0, function* () {\n const { pagination } = event.detail;\n this.pagination = pagination;\n const initOK = yield this.initializeDatasource(this.datasourceOptions(), true, false);\n if (!initOK) {\n logger.debug(`Genesis Datasource init failed for ${this.resourceName}`);\n this.clearRowData();\n this.setDisconnected(true);\n return;\n }\n this.$emit(gridProGenesisDatasourceEventNames.dataInit);\n this.setDisconnected(false);\n this.indexes = this.getResourceIndexes(this.datasource.availableIndexes, this.datasource.availableSortableFields);\n const fieldMetadata = toFieldMetadata(this.datasource.originalFieldDef);\n const agColumnDefs = yield this.getAgColumnDefs(fieldMetadata);\n // Emit event to set column definitions\n this.$emit(datasourceEventNames.schemaUpdated, {\n schema: agColumnDefs,\n metadata: fieldMetadata,\n });\n if (this.isRequestServer) {\n // Enable polling if not in snapshot mode and polling is not disabled\n const usePolling = !this.isSnapshot && !this.disablePolling;\n this.ssrmDatasource = new ReqRepServerSideDatasource({\n createReqRepRequestFunc: this.createReqRepRequest.bind(this),\n createReqRepStreamFunc: usePolling ? this.createReqRepStream.bind(this) : undefined,\n onPollingUpdateFunc: usePolling ? this.applyReqRepPollingUpdate.bind(this) : undefined,\n resetPreviousPollResultFunc: usePolling\n ? this.resetPreviousPollResult.bind(this)\n : undefined,\n usePolling: usePolling,\n reloadResourceDataFunc: this.reloadResourceData.bind(this),\n errorHandlerFunc: this.handleErrors.bind(this),\n resourceName: this.resourceName,\n resourceParams: this.datasource.requestOnlyParams,\n resourceIndexes: this.indexes,\n resourceColDefs: this.datasource.originalFieldDef,\n maxRows: +this.maxRows,\n maxView: +this.maxView,\n rowId: this.rowId,\n pagination: this.pagination,\n zeroBasedViewNumber: this.zeroBasedViewNumber,\n pagingMode: this.pagingMode,\n criteriaOnlyRequest: this.datasource.criteriaOnlyRequest,\n });\n }\n else {\n this.ssrmDatasource = new DataserverServerSideDatasource({\n createDataserverStreamFunc: this.createDataserverStream.bind(this),\n reloadResourceDataFunc: this.reloadResourceData.bind(this),\n errorHandlerFunc: this.handleErrors.bind(this),\n resourceName: this.resourceName,\n resourceParams: this.datasource.dataserverOnlyParams,\n resourceIndexes: this.indexes,\n resourceColDefs: this.datasource.originalFieldDef,\n maxRows: +this.maxRows,\n maxView: +this.maxView,\n rowId: this.rowId,\n pagination: this.pagination,\n zeroBasedViewNumber: this.zeroBasedViewNumber,\n });\n }\n // Emit event to set server side datasource\n this.$emit(datasourceEventNames.setServerSideDatasource, {\n datasource: this.ssrmDatasource,\n });\n // Emit event to restore cached filter config\n this.$emit(datasourceEventNames.filtersRestored);\n // Apply custom sort indicator styling for server-side datasource\n this.applyServerSideSortIndicatorStyling();\n }), { once: true });\n if (!this.resourceName) {\n this.handleErrors('Application not connected or invalid resource name, datasource will not work.', 'unknown');\n }\n });\n }\n onPaginationChanged(event) {\n var _a;\n if (this.ssrmDatasource) {\n this.ssrmDatasource.isNewPageSize = (_a = event.newPage) !== null && _a !== void 0 ? _a : false;\n }\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n this.datasource.destroy();\n (_a = this.liveUpdatesStream) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.liveUpdatesStream = undefined;\n this.clearRowData();\n if (this.ssrmDatasource) {\n yield this.ssrmDatasource.destroy();\n (_b = this.pollingDatasource) === null || _b === void 0 ? void 0 : _b.destroy();\n this.ssrmDatasource = undefined;\n }\n // Remove custom sort indicator styling\n this.removeServerSideSortIndicatorStyling();\n // Emit events instead of direct grid access\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n this.$emit(datasourceEventNames.refreshServerSide, { purge: true });\n });\n }\n restart() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.destroy();\n yield this.init();\n });\n }\n clearRowData(withColumnDefs = true) {\n this.rowData = new Map();\n if (withColumnDefs) {\n // Emit event to clear column definitions\n this.$emit(datasourceEventNames.dataCleared, {\n includeSchema: true,\n });\n }\n this.transactionData = { remove: [] };\n // Emit event to apply server side transaction for removing all data\n this.$emit(datasourceEventNames.applyServerSideTransaction, {\n transaction: this.transactionData,\n });\n this.transactionData = undefined;\n }\n getResourceIndexes(avaialbleIndexes, availableSortableFields) {\n const resourceIndexesMap = new Map();\n const allSortableFields = new Set();\n // Add indexes from INDEXES metadata\n avaialbleIndexes === null || avaialbleIndexes === void 0 ? void 0 : avaialbleIndexes.forEach((index) => {\n const fields = index.FIELDS.split(' ');\n resourceIndexesMap.set(index.NAME, fields);\n fields.forEach((field) => allSortableFields.add(field));\n });\n // Add fields from SORTABLE_FIELDS metadata if available\n if (availableSortableFields && availableSortableFields.length > 0) {\n availableSortableFields.forEach((field) => allSortableFields.add(field));\n }\n // If we have SORTABLE_FIELDS but no indexes, create a synthetic index entry\n // This ensures compatibility with existing code that expects a Map structure\n if (resourceIndexesMap.size === 0 && allSortableFields.size > 0) {\n resourceIndexesMap.set('SORTABLE_FIELDS', Array.from(allSortableFields));\n }\n else if (availableSortableFields &&\n availableSortableFields.length > 0 &&\n resourceIndexesMap.size > 0) {\n // If we have both indexes and SORTABLE_FIELDS, merge them\n // Add any additional fields from SORTABLE_FIELDS that aren't already in any index\n const fieldsFromIndexes = new Set();\n resourceIndexesMap.forEach((fields) => {\n fields.forEach((field) => fieldsFromIndexes.add(field));\n });\n const additionalFields = availableSortableFields.filter((field) => !fieldsFromIndexes.has(field));\n if (additionalFields.length > 0) {\n // Add additional sortable fields as a separate entry\n resourceIndexesMap.set('SORTABLE_FIELDS', additionalFields);\n }\n }\n return resourceIndexesMap;\n }\n createReqRepRequest() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n const reqRep = yield this.datasource.snapshot(existingParams);\n return reqRep;\n });\n }\n /**\n * Creates a polling stream for REQUEST_SERVER resources.\n * @remarks\n * Creates a separate `Datasource` instance configured to poll all currently loaded rows\n * (from offset 0 to current offset + maxRows). This enables change detection across all\n * loaded data, not just the current page.\n *\n * The separate datasource instance has built-in polling logic (pollingInterval, pollTriggerEvents)\n * and manages its own lifecycle independently of the snapshot datasource.\n * @param existingParams - The current request parameters (includes OFFSET, MAX_ROWS, etc.)\n * @returns Object containing the polling stream and the datasource instance\n * @internal\n */\n createReqRepStream() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const currentOffset = (_b = (_a = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _a === void 0 ? void 0 : _a.OFFSET) !== null && _b !== void 0 ? _b : 0;\n const baseMaxRows = (_d = (_c = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _c === void 0 ? void 0 : _c.MAX_ROWS) !== null && _d !== void 0 ? _d : this.maxRows;\n const totalRowsToFetch = baseMaxRows + currentOffset;\n const datasourceOptions = Object.assign(Object.assign({}, this.datasourceOptions()), { criteria: (_f = (_e = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _e === void 0 ? void 0 : _e.CRITERIA_MATCH) !== null && _f !== void 0 ? _f : this.criteria, maxRows: totalRowsToFetch, orderBy: (_h = (_g = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _g === void 0 ? void 0 : _g.ORDER_BY) !== null && _h !== void 0 ? _h : this.orderBy });\n logger.debug('Creating polling datasource for all loaded rows:', {\n currentOffset,\n baseMaxRows,\n totalRowsToFetch,\n });\n // Initialize the polling datasource\n const initOK = yield this.pollingDatasource.init(datasourceOptions, true, true);\n if (!initOK) {\n logger.error('Polling datasource init failed');\n return;\n }\n return { stream: this.pollingDatasource.stream, datasource: this.pollingDatasource };\n });\n }\n /**\n * Resets the previous poll result comparison state.\n * @remarks\n * Called when the polling stream is destroyed or recreated with new parameters\n * (e.g., user scrolls to a different page, or filters/sorting changes).\n * @internal\n */\n resetPreviousPollResult() {\n this.previousPollResult.clear();\n this.hasCapturedFirstPollResult = false;\n logger.debug('Previous poll result cleared');\n }\n /**\n * Applies polling updates for REQUEST_SERVER resources in SSRM.\n * @remarks\n * Compares the current poll result (poll N) with the previous poll result (poll N-1)\n * to detect inserts, updates, and deletes. Changes are applied to the grid using\n * `applyServerSideTransaction` to avoid interfering with SSRM's cache management.\n *\n * The first poll is stored without applying changes (nothing to compare yet).\n * Subsequent polls are compared to detect changes efficiently.\n * @param result - The polling result from the REQUEST_SERVER resource\n * @internal\n */\n applyReqRepPollingUpdate(result) {\n var _a;\n if (!this.ssrmDatasource || !result.REPLY) {\n return;\n }\n const polledData = result.REPLY;\n if (!Array.isArray(polledData) || !((_a = result.MESSAGE_TYPE) === null || _a === void 0 ? void 0 : _a.startsWith('REP_'))) {\n logger.error('received invalid RequestServerResult for polling update', result);\n return;\n }\n if (!this.hasCapturedFirstPollResult) {\n polledData.forEach((row) => {\n this.previousPollResult.set(row[this.rowId], row);\n });\n this.hasCapturedFirstPollResult = true;\n logger.debug('First poll result stored for future comparison', {\n rowCount: this.previousPollResult.size,\n });\n return;\n }\n const currentPollMap = new Map();\n polledData.forEach((row) => {\n currentPollMap.set(row[this.rowId], row);\n });\n const rowsToUpdate = [];\n const rowsToInsert = [];\n const rowsToDelete = [];\n polledData.forEach((row) => {\n const rowId = row[this.rowId];\n if (this.previousPollResult.has(rowId)) {\n const previousRow = this.previousPollResult.get(rowId);\n if (this.serializer.serialize(previousRow) !== this.serializer.serialize(row)) {\n rowsToUpdate.push(row);\n }\n }\n else {\n rowsToInsert.push(row);\n }\n });\n this.previousPollResult.forEach((previousRow, rowId) => {\n if (!currentPollMap.has(rowId)) {\n rowsToDelete.push(previousRow);\n }\n });\n if (rowsToUpdate.length > 0 || rowsToDelete.length > 0 || rowsToInsert.length > 0) {\n this.previousPollResult = currentPollMap;\n logger.debug('Applying reqRep polling update via applyServerSideTransaction:', {\n added: rowsToInsert.length,\n updated: rowsToUpdate.length,\n removed: rowsToDelete.length,\n totalInPoll: currentPollMap.size,\n });\n this.$emit(datasourceEventNames.applyServerSideTransaction, {\n transaction: {\n add: rowsToInsert,\n update: rowsToUpdate,\n remove: rowsToDelete,\n },\n });\n }\n }\n createDataserverStream() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n if (this.liveUpdates) {\n const streamOnMessage = (message) => __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const messageType = message.MESSAGE_TYPE;\n if (messageType === MessageType.QUERY_UPDATE && message.ROW) {\n if (!this.ssrmDatasource) {\n return;\n }\n const nextMessage = dataServerResultFilter(message);\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(nextMessage.inserts);\n this.handleStreamUpdates(nextMessage.updates);\n this.handleStreamDeletes(nextMessage.deletes);\n if (message.SEQUENCE_ID > 1) {\n // Calculate net row count change (inserts - deletes)\n const netRowChange = ((_b = (_a = nextMessage.inserts) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - ((_d = (_c = nextMessage.deletes) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0);\n this.ssrmDatasource.serverRowsCount += netRowChange;\n // Calculate net row count change for client (inserts - loaded deletes)\n const clientNetRowChange = ((_f = (_e = nextMessage.inserts) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0) - ((_h = (_g = nextMessage.deletes) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0);\n this.ssrmDatasource.clientRowsCount += clientNetRowChange;\n this.applyAllTransactions();\n }\n }\n });\n const onError = (error) => {\n var _a;\n logger.error(error);\n this.handleErrors(((_a = error.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || error.message, 'stream');\n };\n this.liveUpdatesStream = this.connect\n .stream(this.resourceName, () => { }, onError, existingParams !== null && existingParams !== void 0 ? existingParams : this.datasource.dataserverOnlyParams)\n .subscribe((message) => streamOnMessage(message));\n }\n yield this.datasource.startStream();\n return this.datasource.stream;\n });\n }\n getAgColumnDefs(fieldsMetadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const colDefsFromGenesisData = this.generateColumnDefsFromMetadata(fieldsMetadata, getServerSideFilterParamsByFieldType, getFilterByFieldType);\n colDefsFromGenesisData.forEach((colDef) => {\n colDef.sortable = [].concat(...this.indexes.values()).includes(colDef.field);\n if (this.datasource.criteriaOnlyRequest) {\n colDef.filter = this.datasource.availableCriteriaFields.includes(colDef.field)\n ? colDef.filter\n : null;\n }\n });\n return colDefsFromGenesisData;\n });\n }\n applyTransaction(transaction) {\n this.$emit(datasourceEventNames.applyServerSideTransaction, { transaction });\n }\n loadMore() {\n throw new Error('loadMore() method is not supported for server-side datasource');\n }\n};\n__decorate([\n JSONSerializer\n], GridProServerSideDatasource.prototype, \"serializer\", void 0);\n__decorate([\n Datasource\n], GridProServerSideDatasource.prototype, \"pollingDatasource\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'zero-based-view-number' })\n], GridProServerSideDatasource.prototype, \"zeroBasedViewNumber\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'live-updates' })\n], GridProServerSideDatasource.prototype, \"liveUpdates\", void 0);\n__decorate([\n attr({ attribute: 'paging-mode' })\n], GridProServerSideDatasource.prototype, \"pagingMode\", void 0);\n__decorate([\n observable\n], GridProServerSideDatasource.prototype, \"request\", void 0);\nGridProServerSideDatasource = __decorate([\n customElement({\n name: 'grid-pro-server-side-datasource',\n })\n], GridProServerSideDatasource);\nexport { GridProServerSideDatasource };\n","import { css } from '@microsoft/fast-element';\n/**\n * Custom Drag n Drop CSS for Grid Pro.\n * @remarks helps with color and background issues when dragging a column.\n * @public\n */\nexport const agHeadCSS = css `\n .ag-dnd-ghost {\n background: var(--ag-header-background-color, var(--ag-background-color, #1f2126));\n border: solid 1px;\n border-color: var(--ag-header-foreground-color, var(--ag-foreground-color, #879ba6));\n border-radius: calc(var(--control-corner-radius) * 1px);\n color: var(--ag-header-foreground-color, var(--ag-foreground-color, #879ba6));\n font-family: var(--ag-font-family, var(--body-font));\n font-size: 12px;\n height: 32px;\n line-height: 28px;\n margin: 0;\n padding: 0 12px;\n position: absolute;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`;\n","import { AgGridTheme } from '../grid-pro.types';\n/**\n * The AG Alpine font face used on ag-theme-alpine/ag-theme-alpine-dark Grid Pro themes.\n * @public\n */\nexport const agGridAlpineFontFace = `\n @font-face {\n font-family: \"agGridAlpine\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * The AG Balham font face used on ag-theme-balham/ag-theme-balham-dark Grid Pro themes.\n * @public\n */\nexport const agGridBalhamFontFace = `\n @font-face {\n font-family: \"agGridBalham\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * The AG Material font face used on ag-theme-material Grid Pro theme.\n * @public\n */\nexport const agGridMaterialFontFace = `\n @font-face {\n font-family: \"agGridMaterial\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * Font Face map with all the font faces for each theme.\n * @public\n */\nexport const agThemeFontFaceMap = {\n [AgGridTheme.alpine]: agGridAlpineFontFace,\n [AgGridTheme.alpineDark]: agGridAlpineFontFace,\n [AgGridTheme.balham]: agGridBalhamFontFace,\n [AgGridTheme.balhamDark]: agGridBalhamFontFace,\n [AgGridTheme.material]: agGridMaterialFontFace,\n};\n/**\n * The default font face for Grid Pro (agGridAlpine).\n * @remarks this will change to Roboto.\n * @public\n */\nexport const defaultAgGridFontFace = agGridAlpineFontFace;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Grid core CSS.\n * @remarks without this grid will not show up.\n * @public\n */\nexport const agGridCSS = css `\n .ag-icon {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n .ag-icon-aggregation::before {\n content: var(--ag-icon-font-code-aggregation, '\\\\f101');\n }\n\n .ag-icon-arrows::before {\n content: var(--ag-icon-font-code-arrows, '\\\\f102');\n }\n\n .ag-icon-asc::before {\n content: var(--ag-icon-font-code-asc, '\\\\f103');\n }\n\n .ag-icon-cancel::before {\n content: var(--ag-icon-font-code-cancel, '\\\\f104');\n }\n\n .ag-icon-chart::before {\n content: var(--ag-icon-font-code-chart, '\\\\f105');\n }\n\n .ag-icon-checkbox-checked::before {\n content: var(--ag-icon-font-code-checkbox-checked, '\\\\f106');\n }\n\n .ag-icon-checkbox-indeterminate::before {\n content: var(--ag-icon-font-code-checkbox-indeterminate, '\\\\f107');\n }\n\n .ag-icon-checkbox-unchecked::before {\n content: var(--ag-icon-font-code-checkbox-unchecked, '\\\\f108');\n }\n\n .ag-icon-color-picker::before {\n content: var(--ag-icon-font-code-color-picker, '\\\\f109');\n }\n\n .ag-icon-columns::before {\n content: var(--ag-icon-font-code-columns, '\\\\f10a');\n }\n\n .ag-icon-contracted::before {\n content: var(--ag-icon-font-code-contracted, '\\\\f10b');\n }\n\n .ag-icon-copy::before {\n content: var(--ag-icon-font-code-copy, '\\\\f10c');\n }\n\n .ag-icon-cross::before {\n content: var(--ag-icon-font-code-cross, '\\\\f10d');\n }\n\n .ag-icon-csv::before {\n content: var(--ag-icon-font-code-csv, '\\\\f10e');\n }\n\n .ag-icon-desc::before {\n content: var(--ag-icon-font-code-desc, '\\\\f10f');\n }\n\n .ag-icon-excel::before {\n content: var(--ag-icon-font-code-excel, '\\\\f110');\n }\n\n .ag-icon-expanded::before {\n content: var(--ag-icon-font-code-expanded, '\\\\f111');\n }\n\n .ag-icon-eye-slash::before {\n content: var(--ag-icon-font-code-eye-slash, '\\\\f112');\n }\n\n .ag-icon-eye::before {\n content: var(--ag-icon-font-code-eye, '\\\\f113');\n }\n\n .ag-icon-filter::before {\n content: var(--ag-icon-font-code-filter, '\\\\f114');\n }\n\n .ag-icon-first::before {\n content: var(--ag-icon-font-code-first, '\\\\f115');\n }\n\n .ag-icon-grip::before {\n content: var(--ag-icon-font-code-grip, '\\\\f116');\n }\n\n .ag-icon-group::before {\n content: var(--ag-icon-font-code-group, '\\\\f117');\n }\n\n .ag-icon-last::before {\n content: var(--ag-icon-font-code-last, '\\\\f118');\n }\n\n .ag-icon-left::before {\n content: var(--ag-icon-font-code-left, '\\\\f119');\n }\n\n .ag-icon-linked::before {\n content: var(--ag-icon-font-code-linked, '\\\\f11a');\n }\n\n .ag-icon-loading::before {\n content: var(--ag-icon-font-code-loading, '\\\\f11b');\n }\n\n .ag-icon-maximize::before {\n content: var(--ag-icon-font-code-maximize, '\\\\f11c');\n }\n\n .ag-icon-menu::before {\n content: var(--ag-icon-font-code-menu, '\\\\f11d');\n }\n\n .ag-icon-minimize::before {\n content: var(--ag-icon-font-code-minimize, '\\\\f11e');\n }\n\n .ag-icon-next::before {\n content: var(--ag-icon-font-code-next, '\\\\f11f');\n }\n\n .ag-icon-none::before {\n content: var(--ag-icon-font-code-none, '\\\\f120');\n }\n\n .ag-icon-not-allowed::before {\n content: var(--ag-icon-font-code-not-allowed, '\\\\f121');\n }\n\n .ag-icon-paste::before {\n content: var(--ag-icon-font-code-paste, '\\\\f122');\n }\n\n .ag-icon-pin::before {\n content: var(--ag-icon-font-code-pin, '\\\\f123');\n }\n\n .ag-icon-pivot::before {\n content: var(--ag-icon-font-code-pivot, '\\\\f124');\n }\n\n .ag-icon-previous::before {\n content: var(--ag-icon-font-code-previous, '\\\\f125');\n }\n\n .ag-icon-radio-button-off::before {\n content: var(--ag-icon-font-code-radio-button-off, '\\\\f126');\n }\n\n .ag-icon-radio-button-on::before {\n content: var(--ag-icon-font-code-radio-button-on, '\\\\f127');\n }\n\n .ag-icon-right::before {\n content: var(--ag-icon-font-code-right, '\\\\f128');\n }\n\n .ag-icon-save::before {\n content: var(--ag-icon-font-code-save, '\\\\f129');\n }\n\n .ag-icon-small-down::before {\n content: var(--ag-icon-font-code-small-down, '\\\\f12a');\n }\n\n .ag-icon-small-left::before {\n content: var(--ag-icon-font-code-small-left, '\\\\f12b');\n }\n\n .ag-icon-small-right::before {\n content: var(--ag-icon-font-code-small-right, '\\\\f12c');\n }\n\n .ag-icon-small-up::before {\n content: var(--ag-icon-font-code-small-up, '\\\\f12d');\n }\n\n .ag-icon-tick::before {\n content: var(--ag-icon-font-code-tick, '\\\\f12e');\n }\n\n .ag-icon-tree-closed::before {\n content: var(--ag-icon-font-code-tree-closed, '\\\\f12f');\n }\n\n .ag-icon-tree-indeterminate::before {\n content: var(--ag-icon-font-code-tree-indeterminate, '\\\\f130');\n }\n\n .ag-icon-tree-open::before {\n content: var(--ag-icon-font-code-tree-open, '\\\\f131');\n }\n\n .ag-icon-unlinked::before {\n content: var(--ag-icon-font-code-unlinked, '\\\\f132');\n }\n\n .ag-icon-row-drag::before {\n content: var(--ag-icon-font-code-grip);\n }\n\n .ag-left-arrow::before {\n content: var(--ag-icon-font-code-left);\n }\n\n .ag-right-arrow::before {\n content: var(--ag-icon-font-code-right);\n }\n\n [class*='ag-theme-'] {\n --ag-foreground-color: #000;\n --ag-data-color: var(--ag-foreground-color);\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-header-foreground-color: var(--ag-secondary-foreground-color);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.5);\n --ag-background-color: #fff;\n --ag-header-background-color: transparent;\n --ag-tooltip-background-color: transparent;\n --ag-subheader-background-color: transparent;\n --ag-subheader-toolbar-background-color: transparent;\n --ag-control-panel-background-color: transparent;\n --ag-side-button-selected-background-color: var(--ag-control-panel-background-color);\n --ag-selected-row-background-color: #bbb;\n --ag-odd-row-background-color: var(--ag-background-color);\n --ag-modal-overlay-background-color: rgba(255, 255, 255, 0.66);\n --ag-row-hover-color: transparent;\n --ag-column-hover-color: transparent;\n --ag-range-selection-border-color: var(--ag-foreground-color);\n --ag-range-selection-border-style: solid;\n --ag-range-selection-background-color: rgba(0, 0, 0, 0.2);\n --ag-range-selection-background-color-2: var(--ag-range-selection-background-color);\n --ag-range-selection-background-color-3: var(--ag-range-selection-background-color);\n --ag-range-selection-background-color-4: var(--ag-range-selection-background-color);\n --ag-range-selection-highlight-color: var(--ag-range-selection-border-color);\n --ag-selected-tab-underline-color: var(--ag-range-selection-border-color);\n --ag-selected-tab-underline-width: 0;\n --ag-selected-tab-underline-transition-speed: 0s;\n --ag-range-selection-chart-category-background-color: rgba(0, 255, 132, 0.1);\n --ag-range-selection-chart-background-color: rgba(0, 88, 255, 0.1);\n --ag-header-cell-hover-background-color: transparent;\n --ag-header-cell-moving-background-color: var(--ag-background-color);\n --ag-value-change-value-highlight-background-color: rgba(22, 160, 133, 0.5);\n --ag-value-change-delta-up-color: #43a047;\n --ag-value-change-delta-down-color: #e53935;\n --ag-chip-background-color: transparent;\n --ag-borders: solid 1px;\n --ag-border-color: rgba(0, 0, 0, 0.25);\n --ag-borders-critical: var(--ag-borders);\n --ag-borders-secondary: var(--ag-borders);\n --ag-secondary-border-color: var(--ag-border-color);\n --ag-row-border-style: solid;\n --ag-row-border-color: var(--ag-secondary-border-color);\n --ag-row-border-width: 1px;\n --ag-cell-horizontal-border: solid transparent;\n --ag-borders-input: var(--ag-borders-secondary);\n --ag-input-border-color: var(--ag-secondary-border-color);\n --ag-borders-input-invalid: solid 2px;\n --ag-input-border-color-invalid: var(--ag-invalid-color);\n --ag-borders-side-button: var(--ag-borders);\n --ag-border-radius: 0px;\n --ag-row-border-color: var(--ag-secondary-border-color);\n --ag-header-column-separator-display: none;\n --ag-header-column-separator-height: 100%;\n --ag-header-column-separator-width: 1px;\n --ag-header-column-separator-color: var(--ag-secondary-border-color);\n --ag-header-column-resize-handle-display: none;\n --ag-header-column-resize-handle-height: 50%;\n --ag-header-column-resize-handle-width: 1px;\n --ag-header-column-resize-handle-color: var(--ag-secondary-border-color);\n --ag-invalid-color: red;\n --ag-input-disabled-border-color: var(--ag-input-border-color);\n --ag-input-disabled-background-color: transparent;\n --ag-checkbox-background-color: transparent;\n --ag-checkbox-border-radius: var(--ag-border-radius);\n --ag-checkbox-checked-color: var(--ag-foreground-color);\n --ag-checkbox-unchecked-color: var(--ag-foreground-color);\n --ag-checkbox-indeterminate-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-off-border-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-off-background-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-on-border-color: var(--ag-checkbox-checked-color);\n --ag-toggle-button-on-background-color: var(--ag-checkbox-checked-color);\n --ag-toggle-button-switch-background-color: var(--ag-background-color);\n --ag-toggle-button-switch-border-color: var(--ag-toggle-button-off-border-color);\n --ag-toggle-button-border-width: 1px;\n --ag-toggle-button-height: var(--ag-icon-size);\n --ag-toggle-button-width: calc(var(--ag-toggle-button-height) * 2);\n --ag-input-focus-box-shadow: none;\n --ag-input-focus-border-color: none;\n --ag-minichart-selected-chart-color: var(--ag-checkbox-checked-color);\n --ag-minichart-selected-page-color: var(--ag-checkbox-checked-color);\n --ag-grid-size: 4px;\n --ag-icon-size: 12px;\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-horizontal-spacing: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: var(--ag-grid-size);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-cell-widget-spacing: var(--ag-cell-horizontal-padding);\n --ag-row-height: calc(var(--ag-grid-size) * 6 + 1px);\n --ag-header-height: var(--ag-row-height);\n --ag-list-item-height: calc(var(--ag-grid-size) * 5);\n --ag-column-select-indent-size: calc(var(--ag-grid-size) + var(--ag-icon-size));\n --ag-set-filter-indent-size: calc(var(--ag-grid-size) + var(--ag-icon-size));\n --ag-row-group-indent-size: calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size));\n --ag-filter-tool-panel-group-indent: 16px;\n --ag-tab-min-width: 220px;\n --ag-menu-min-width: 181px;\n --ag-side-bar-panel-width: 200px;\n --ag-font-family: 'Helvetica Neue', sans-serif;\n --ag-font-size: 14px;\n --ag-card-radius: var(--ag-border-radius);\n --ag-card-shadow: none;\n --ag-popup-shadow: 5px 5px 10px rgba(0, 0, 0, 0.3);\n }\n\n .ag-root-wrapper,\n .ag-sticky-top,\n .ag-dnd-ghost {\n background-color: var(--ag-background-color);\n }\n\n [class*='ag-theme-'] {\n -webkit-font-smoothing: antialiased;\n font-family: var(--ag-font-family);\n font-size: var(--ag-font-size);\n line-height: normal;\n color: var(--ag-foreground-color);\n }\n\n ag-grid,\n ag-grid-angular,\n ag-grid-ng2,\n ag-grid-polymer,\n ag-grid-aurelia {\n display: block;\n }\n\n .ag-hidden {\n display: none !important;\n }\n\n .ag-invisible {\n visibility: hidden !important;\n }\n\n .ag-no-transition {\n transition: none !important;\n }\n\n .ag-drag-handle {\n cursor: grab;\n }\n\n .ag-column-drop-wrapper {\n display: flex;\n }\n\n .ag-column-drop-horizontal-half-width {\n display: inline-block;\n width: 50% !important;\n }\n\n .ag-unselectable {\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n .ag-selectable {\n -moz-user-select: text;\n -webkit-user-select: text;\n -ms-user-select: text;\n user-select: text;\n }\n\n .ag-tab {\n position: relative;\n }\n\n .ag-tab-guard {\n position: absolute;\n width: 0;\n height: 0;\n display: block;\n }\n\n .ag-select-agg-func-popup {\n position: absolute;\n }\n\n .ag-input-wrapper,\n .ag-picker-field-wrapper {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n line-height: normal;\n position: relative;\n }\n\n .ag-shake-left-to-right {\n animation-direction: alternate;\n animation-duration: 0.2s;\n animation-iteration-count: infinite;\n animation-name: ag-shake-left-to-right;\n }\n\n @keyframes ag-shake-left-to-right {\n from {\n padding-left: 6px;\n padding-right: 2px;\n }\n to {\n padding-left: 2px;\n padding-right: 6px;\n }\n }\n .ag-root-wrapper {\n cursor: default;\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .ag-root-wrapper.ag-layout-normal {\n height: 100%;\n }\n\n .ag-watermark {\n position: absolute;\n bottom: 20px;\n right: 25px;\n opacity: 0.5;\n transition: opacity 1s ease-out 3s;\n }\n .ag-watermark::before {\n content: '';\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDIzNSA0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzZXJpZj0iaHR0cDovL3d3dy5zZXJpZi5jb20vIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjI7Ij4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuNjM1NzIzLDAsMCwwLjYzNTcyMywtNDkyLjkyMSwtMzIzLjYwOCkiPgogICAgICAgIDxwYXRoIGQ9Ik0xMDk5LjQsNTQ5LjRMMTA5OS40LDUzNi45TDEwNzguMSw1MzYuOUwxMDY1LjYsNTQ5LjRMMTA5OS40LDU0OS40WiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNMTEyMy40LDUxOC40TDEwOTYuNyw1MTguNEwxMDg0LjEsNTMwLjlMMTEyMy40LDUzMC45TDExMjMuNCw1MTguNFoiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgPHBhdGggZD0iTTEwNTMuMiw1NjEuOUwxMDU5LjYsNTU1LjVMMTA4MS4yLDU1NS41TDEwODEuMiw1NjhMMTA1My4yLDU2OEwxMDUzLjIsNTYxLjlaIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMDU3LjksNTQzLjNMMTA3MS43LDU0My4zTDEwODQuMyw1MzAuOEwxMDU3LjksNTMwLjhMMTA1Ny45LDU0My4zWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNMTA0Mi44LDU2MS45TDEwNTMuMiw1NjEuOUwxMDY1LjYsNTQ5LjRMMTA0Mi44LDU0OS40TDEwNDIuOCw1NjEuOVoiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgPHBhdGggZD0iTTEwOTYuNyw1MTguNEwxMDkwLjMsNTI0LjhMMTA0OS41LDUyNC44TDEwNDkuNSw1MTIuM0wxMDk2LjcsNTEyLjNMMTA5Ni43LDUxOC40WiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNODI4LjYsNTU5LjdMODA5LDU1OS43TDgwNS42LDU2OC4xTDc5Nyw1NjguMUw4MTUuMSw1MjUuN0w4MjIuNiw1MjUuN0w4NDAuNyw1NjguMUw4MzIsNTY4LjFMODI4LjYsNTU5LjdaTTgyNS45LDU1M0w4MTguOCw1MzUuN0w4MTEuNyw1NTNMODI1LjksNTUzWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNOTYwLjEsNTQxLjNDOTYyLjYsNTM3LjYgOTY4LjksNTM3LjIgOTcxLjUsNTM3LjJMOTcxLjUsNTQ0LjRDOTY4LjMsNTQ0LjQgOTY1LjEsNTQ0LjUgOTYzLjIsNTQ1LjlDOTYxLjMsNTQ3LjMgOTYwLjMsNTQ5LjIgOTYwLjMsNTUxLjVMOTYwLjMsNTY4LjFMOTUyLjUsNTY4LjFMOTUyLjUsNTM3LjJMOTYwLDUzNy4yTDk2MC4xLDU0MS4zWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cmVjdCB4PSI5NzUuOCIgeT0iNTM3LjIiIHdpZHRoPSI3LjgiIGhlaWdodD0iMzAuOSIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTsiLz4KICAgICAgICA8cmVjdCB4PSI5NzUuOCIgeT0iNTIzLjQiIHdpZHRoPSI3LjgiIGhlaWdodD0iOS4yIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpOyIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMDIyLjMsNTIzLjRMMTAyMi4zLDU2OC4xTDEwMTQuOCw1NjguMUwxMDE0LjYsNTYzLjRDMTAxMy41LDU2NSAxMDEyLjEsNTY2LjMgMTAxMC40LDU2Ny4zQzEwMDguNyw1NjguMiAxMDA2LjYsNTY4LjcgMTAwNC4yLDU2OC43QzEwMDIuMSw1NjguNyAxMDAwLjEsNTY4LjMgOTk4LjQsNTY3LjZDOTk2LjYsNTY2LjggOTk1LDU2NS44IDk5My43LDU2NC40Qzk5Mi40LDU2MyA5OTEuMyw1NjEuMyA5OTAuNiw1NTkuNEM5ODkuOCw1NTcuNSA5ODkuNSw1NTUuMyA5ODkuNSw1NTIuOUM5ODkuNSw1NTAuNSA5ODkuOSw1NDguMyA5OTAuNiw1NDYuM0M5OTEuNCw1NDQuMyA5OTIuNCw1NDIuNiA5OTMuNyw1NDEuMkM5OTUsNTM5LjggOTk2LjYsNTM4LjcgOTk4LjQsNTM3LjlDMTAwMC4yLDUzNy4xIDEwMDIuMSw1MzYuNyAxMDA0LjIsNTM2LjdDMTAwNi42LDUzNi43IDEwMDguNiw1MzcuMSAxMDEwLjMsNTM4QzEwMTIsNTM4LjkgMTAxMy40LDU0MC4xIDEwMTQuNSw1NDEuOEwxMDE0LjUsNTIzLjVMMTAyMi4zLDUyMy41TDEwMjIuMyw1MjMuNFpNMTAwNS45LDU2MkMxMDA4LjUsNTYyIDEwMTAuNSw1NjEuMSAxMDEyLjEsNTU5LjRDMTAxMy43LDU1Ny43IDEwMTQuNSw1NTUuNCAxMDE0LjUsNTUyLjZDMTAxNC41LDU0OS44IDEwMTMuNyw1NDcuNiAxMDEyLjEsNTQ1LjhDMTAxMC41LDU0NC4xIDEwMDguNSw1NDMuMiAxMDA1LjksNTQzLjJDMTAwMy40LDU0My4yIDEwMDEuMyw1NDQuMSA5OTkuOCw1NDUuOEM5OTguMiw1NDcuNSA5OTcuNCw1NDkuOCA5OTcuNCw1NTIuNkM5OTcuNCw1NTUuNCA5OTguMiw1NTcuNiA5OTkuOCw1NTkuM0MxMDAxLjQsNTYxLjEgMTAwMy40LDU2MiAxMDA1LjksNTYyIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgIDxwYXRoIGQ9Ik04ODUuOCw1NDQuMkw4NjYuNSw1NDQuMkw4NjYuNSw1NTAuOUw4NzcuNSw1NTAuOUM4NzcuMiw1NTQuMyA4NzUuOSw1NTYuOSA4NzMuNyw1NTlDODcxLjUsNTYxIDg2OC43LDU2MiA4NjUuMSw1NjJDODYzLjEsNTYyIDg2MS4yLDU2MS42IDg1OS42LDU2MC45Qzg1Ny45LDU2MC4yIDg1Ni41LDU1OS4yIDg1NS4zLDU1Ny44Qzg1NC4xLDU1Ni41IDg1My4yLDU1NC45IDg1Mi41LDU1M0M4NTEuOCw1NTEuMSA4NTEuNSw1NDkuMSA4NTEuNSw1NDYuOEM4NTEuNSw1NDQuNSA4NTEuOCw1NDIuNSA4NTIuNSw1NDAuNkM4NTMuMSw1MzguNyA4NTQuMSw1MzcuMiA4NTUuMyw1MzUuOEM4NTYuNSw1MzQuNSA4NTcuOSw1MzMuNSA4NTkuNiw1MzIuN0M4NjEuMyw1MzIgODYzLjEsNTMxLjYgODY1LjIsNTMxLjZDODY5LjQsNTMxLjYgODcyLjYsNTMyLjYgODc0LjgsNTM0LjZMODgwLDUyOS40Qzg3Ni4xLDUyNi40IDg3MS4xLDUyNC44IDg2NS4yLDUyNC44Qzg2MS45LDUyNC44IDg1OC45LDUyNS4zIDg1Ni4yLDUyNi40Qzg1My41LDUyNy41IDg1MS4yLDUyOC45IDg0OS4zLDUzMC44Qzg0Ny40LDUzMi43IDg0NS45LDUzNSA4NDQuOSw1MzcuN0M4NDMuOSw1NDAuNCA4NDMuNCw1NDMuNCA4NDMuNCw1NDYuNkM4NDMuNCw1NDkuOCA4NDMuOSw1NTIuOCA4NDUsNTU1LjVDODQ2LjEsNTU4LjIgODQ3LjUsNTYwLjUgODQ5LjQsNTYyLjRDODUxLjMsNTY0LjMgODUzLjYsNTY1LjggODU2LjMsNTY2LjhDODU5LDU2Ny45IDg2Miw1NjguNCA4NjUuMiw1NjguNEM4NjguNCw1NjguNCA4NzEuMyw1NjcuOSA4NzMuOSw1NjYuOEM4NzYuNSw1NjUuNyA4NzguNyw1NjQuMyA4ODAuNSw1NjIuNEM4ODIuMyw1NjAuNSA4ODMuNyw1NTguMiA4ODQuNyw1NTUuNUM4ODUuNyw1NTIuOCA4ODYuMiw1NDkuOCA4ODYuMiw1NDYuNkw4ODYuMiw1NDUuM0M4ODUuOSw1NDUuMSA4ODUuOCw1NDQuNiA4ODUuOCw1NDQuMiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNOTQ2LjgsNTQ0LjJMOTI3LjUsNTQ0LjJMOTI3LjUsNTUwLjlMOTM4LjUsNTUwLjlDOTM4LjIsNTU0LjMgOTM2LjksNTU2LjkgOTM0LjcsNTU5QzkzMi41LDU2MSA5MjkuNyw1NjIgOTI2LjEsNTYyQzkyNC4xLDU2MiA5MjIuMiw1NjEuNiA5MjAuNiw1NjAuOUM5MTguOSw1NjAuMiA5MTcuNSw1NTkuMiA5MTYuMyw1NTcuOEM5MTUuMSw1NTYuNSA5MTQuMiw1NTQuOSA5MTMuNSw1NTNDOTEyLjgsNTUxLjEgOTEyLjUsNTQ5LjEgOTEyLjUsNTQ2LjhDOTEyLjUsNTQ0LjUgOTEyLjgsNTQyLjUgOTEzLjUsNTQwLjZDOTE0LjEsNTM4LjcgOTE1LjEsNTM3LjIgOTE2LjMsNTM1LjhDOTE3LjUsNTM0LjUgOTE4LjksNTMzLjUgOTIwLjYsNTMyLjdDOTIyLjMsNTMyIDkyNC4xLDUzMS42IDkyNi4yLDUzMS42QzkzMC40LDUzMS42IDkzMy42LDUzMi42IDkzNS44LDUzNC42TDk0MSw1MjkuNEM5MzcuMSw1MjYuNCA5MzIuMSw1MjQuOCA5MjYuMiw1MjQuOEM5MjIuOSw1MjQuOCA5MTkuOSw1MjUuMyA5MTcuMiw1MjYuNEM5MTQuNSw1MjcuNSA5MTIuMiw1MjguOSA5MTAuMyw1MzAuOEM5MDguNCw1MzIuNyA5MDYuOSw1MzUgOTA1LjksNTM3LjdDOTA0LjksNTQwLjQgOTA0LjQsNTQzLjQgOTA0LjQsNTQ2LjZDOTA0LjQsNTQ5LjggOTA0LjksNTUyLjggOTA2LDU1NS41QzkwNy4xLDU1OC4yIDkwOC41LDU2MC41IDkxMC40LDU2Mi40QzkxMi4zLDU2NC4zIDkxNC42LDU2NS44IDkxNy4zLDU2Ni44QzkyMCw1NjcuOSA5MjMsNTY4LjQgOTI2LjIsNTY4LjRDOTI5LjQsNTY4LjQgOTMyLjMsNTY3LjkgOTM0LjksNTY2LjhDOTM3LjUsNTY1LjcgOTM5LjcsNTY0LjMgOTQxLjUsNTYyLjRDOTQzLjMsNTYwLjUgOTQ0LjcsNTU4LjIgOTQ1LjcsNTU1LjVDOTQ2LjcsNTUyLjggOTQ3LjIsNTQ5LjggOTQ3LjIsNTQ2LjZMOTQ3LjIsNTQ1LjNDOTQ2LjksNTQ1LjEgOTQ2LjgsNTQ0LjYgOTQ2LjgsNTQ0LjIiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);\n background-repeat: no-repeat;\n background-size: 170px 40px;\n display: block;\n height: 40px;\n width: 170px;\n opacity: 0.5;\n }\n\n .ag-watermark-text {\n opacity: 0.5;\n font-weight: bold;\n font-family: Impact, sans-serif;\n font-size: 19px;\n padding-left: 0.7rem;\n }\n\n .ag-root-wrapper-body {\n display: flex;\n flex-direction: row;\n }\n .ag-root-wrapper-body.ag-layout-normal {\n flex: 1 1 auto;\n height: 0;\n min-height: 0;\n }\n\n .ag-root {\n position: relative;\n display: flex;\n flex-direction: column;\n }\n .ag-root.ag-layout-normal,\n .ag-root.ag-layout-auto-height {\n overflow: hidden;\n flex: 1 1 auto;\n width: 0;\n }\n .ag-root.ag-layout-normal {\n height: 100%;\n }\n\n .ag-header-viewport,\n .ag-floating-top-viewport,\n .ag-body-viewport,\n .ag-center-cols-viewport,\n .ag-floating-bottom-viewport,\n .ag-body-horizontal-scroll-viewport,\n .ag-body-vertical-scroll-viewport,\n .ag-virtual-list-viewport,\n .ag-sticky-top-viewport {\n position: relative;\n height: 100%;\n min-width: 0px;\n overflow: hidden;\n flex: 1 1 auto;\n }\n\n .ag-body-viewport {\n display: flex;\n }\n .ag-body-viewport.ag-layout-normal {\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n }\n\n .ag-center-cols-viewport {\n width: 100%;\n overflow-x: auto;\n }\n\n .ag-body-horizontal-scroll-viewport {\n overflow-x: scroll;\n }\n\n .ag-body-vertical-scroll-viewport {\n overflow-y: scroll;\n }\n\n .ag-virtual-list-viewport {\n overflow: auto;\n width: 100%;\n }\n\n .ag-header-container,\n .ag-floating-top-container,\n .ag-body-container,\n .ag-pinned-right-cols-container,\n .ag-center-cols-container,\n .ag-pinned-left-cols-container,\n .ag-floating-bottom-container,\n .ag-body-horizontal-scroll-container,\n .ag-body-vertical-scroll-container,\n .ag-full-width-container,\n .ag-floating-bottom-full-width-container,\n .ag-virtual-list-container,\n .ag-sticky-top-container {\n position: relative;\n }\n\n .ag-header-container,\n .ag-floating-top-container,\n .ag-floating-bottom-container,\n .ag-sticky-top-container {\n height: 100%;\n white-space: nowrap;\n }\n\n .ag-center-cols-container {\n display: block;\n }\n\n .ag-pinned-right-cols-container {\n display: block;\n }\n\n .ag-body-horizontal-scroll-container {\n height: 100%;\n }\n\n .ag-body-vertical-scroll-container {\n width: 100%;\n }\n\n .ag-full-width-container,\n .ag-floating-top-full-width-container,\n .ag-floating-bottom-full-width-container,\n .ag-sticky-top-full-width-container {\n position: absolute;\n top: 0px;\n left: 0px;\n pointer-events: none;\n }\n\n .ag-full-width-container {\n width: 100%;\n }\n\n .ag-floating-bottom-full-width-container,\n .ag-floating-top-full-width-container {\n display: inline-block;\n overflow: hidden;\n height: 100%;\n width: 100%;\n }\n\n .ag-virtual-list-container {\n overflow: hidden;\n }\n\n .ag-center-cols-clipper {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n min-height: 100%;\n transform: translate3d(0, 0, 0);\n }\n\n .ag-body {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n flex-direction: row !important;\n min-height: 0;\n }\n\n .ag-body-clipper {\n overflow: hidden;\n min-width: 0px;\n flex: 1 1 auto;\n height: 100%;\n transform: translate3d(0, 0, 0);\n }\n\n .ag-body-horizontal-scroll,\n .ag-body-vertical-scroll {\n min-height: 0;\n min-width: 0;\n display: flex;\n position: relative;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible,\n .ag-body-vertical-scroll.ag-scrollbar-invisible {\n position: absolute;\n bottom: 0;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar {\n opacity: 0;\n transition: opacity 400ms;\n visibility: hidden;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-scrolling,\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-active,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-scrolling,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-active {\n visibility: visible;\n opacity: 1;\n }\n\n .ag-body-horizontal-scroll {\n width: 100%;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible {\n left: 0;\n right: 0;\n }\n\n .ag-body-vertical-scroll {\n height: 100%;\n }\n .ag-body-vertical-scroll.ag-scrollbar-invisible {\n top: 0;\n z-index: 10;\n }\n .ag-ltr .ag-body-vertical-scroll.ag-scrollbar-invisible {\n right: 0;\n }\n .ag-rtl .ag-body-vertical-scroll.ag-scrollbar-invisible {\n left: 0;\n }\n\n .ag-force-vertical-scroll {\n overflow-y: scroll !important;\n }\n\n .ag-horizontal-left-spacer,\n .ag-horizontal-right-spacer {\n height: 100%;\n min-width: 0;\n overflow-x: scroll;\n }\n .ag-horizontal-left-spacer.ag-scroller-corner,\n .ag-horizontal-right-spacer.ag-scroller-corner {\n overflow-x: hidden;\n }\n\n .ag-header,\n .ag-pinned-left-header,\n .ag-pinned-right-header {\n display: inline-block;\n overflow: hidden;\n position: relative;\n }\n\n .ag-header-cell-sortable {\n cursor: pointer;\n }\n\n .ag-header {\n display: flex;\n width: 100%;\n white-space: nowrap;\n }\n\n .ag-pinned-left-header {\n height: 100%;\n }\n\n .ag-pinned-right-header {\n height: 100%;\n }\n\n .ag-header-row {\n position: absolute;\n overflow: hidden;\n }\n\n .ag-header-cell {\n display: inline-flex;\n align-items: center;\n position: absolute;\n height: 100%;\n overflow: hidden;\n }\n\n .ag-header-cell.ag-header-active .ag-header-cell-menu-button {\n opacity: 1;\n }\n\n .ag-header-cell-menu-button:not(.ag-header-menu-always-show) {\n transition: opacity 0.2s;\n opacity: 0;\n }\n\n .ag-header-group-cell-label,\n .ag-header-cell-label {\n display: flex;\n flex: 1 1 auto;\n overflow: hidden;\n align-items: center;\n text-overflow: ellipsis;\n align-self: stretch;\n }\n\n .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ag-header-cell:not(.ag-header-cell-auto-height) .ag-header-cell-comp-wrapper {\n height: 100%;\n display: flex;\n align-items: center;\n }\n\n .ag-header-cell-comp-wrapper {\n width: 100%;\n overflow: hidden;\n }\n\n .ag-header-cell-wrap-text .ag-header-cell-comp-wrapper {\n white-space: normal;\n }\n\n .ag-right-aligned-header .ag-header-cell-label {\n flex-direction: row-reverse;\n }\n\n .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ag-header-cell-resize {\n position: absolute;\n z-index: 2;\n height: 100%;\n width: 8px;\n top: 0;\n cursor: ew-resize;\n }\n .ag-ltr .ag-header-cell-resize {\n right: -4px;\n }\n .ag-rtl .ag-header-cell-resize {\n left: -4px;\n }\n\n .ag-pinned-left-header .ag-header-cell-resize {\n right: -4px;\n }\n\n .ag-pinned-right-header .ag-header-cell-resize {\n left: -4px;\n }\n\n .ag-header-select-all {\n display: flex;\n }\n\n .ag-column-moving .ag-cell {\n transition: left 0.2s;\n }\n .ag-column-moving .ag-header-cell {\n transition: left 0.2s;\n }\n .ag-column-moving .ag-header-group-cell {\n transition:\n left 0.2s,\n width 0.2s;\n }\n\n .ag-column-panel {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n flex: 1 1 auto;\n }\n\n .ag-column-select {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n flex: 3 1 0px;\n }\n\n .ag-column-select-header {\n position: relative;\n display: flex;\n flex: none;\n }\n\n .ag-column-select-header-icon {\n position: relative;\n }\n\n .ag-column-select-header-filter-wrapper {\n flex: 1 1 auto;\n }\n\n .ag-column-select-header-filter {\n width: 100%;\n }\n\n .ag-column-select-list {\n flex: 1 1 0px;\n overflow: hidden;\n }\n\n .ag-column-drop {\n position: relative;\n display: inline-flex;\n align-items: center;\n overflow: auto;\n width: 100%;\n }\n\n .ag-column-drop-list {\n display: flex;\n align-items: center;\n }\n\n .ag-column-drop-cell {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .ag-column-drop-cell-text {\n overflow: hidden;\n flex: 1 1 auto;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ag-column-drop-vertical {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n align-items: stretch;\n flex: 1 1 0px;\n }\n\n .ag-column-drop-vertical-title-bar {\n display: flex;\n align-items: center;\n flex: none;\n }\n\n .ag-column-drop-vertical-list {\n position: relative;\n align-items: stretch;\n flex-grow: 1;\n flex-direction: column;\n overflow-x: auto;\n }\n .ag-column-drop-vertical-list > * {\n flex: none;\n }\n\n .ag-column-drop-empty .ag-column-drop-vertical-list {\n overflow: hidden;\n }\n\n .ag-column-drop-vertical-empty-message {\n display: block;\n }\n\n .ag-column-drop.ag-column-drop-horizontal {\n white-space: nowrap;\n overflow: hidden;\n }\n\n .ag-column-drop-cell-button {\n cursor: pointer;\n }\n\n .ag-filter-toolpanel {\n flex: 1 1 0px;\n min-width: 0;\n }\n\n .ag-filter-toolpanel-header {\n position: relative;\n }\n\n .ag-filter-toolpanel-header,\n .ag-filter-toolpanel-search {\n display: flex;\n align-items: center;\n }\n .ag-filter-toolpanel-header > *,\n .ag-filter-toolpanel-search > * {\n display: flex;\n align-items: center;\n }\n\n .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n overflow: hidden;\n }\n\n .ag-row-animation .ag-row {\n transition:\n transform 0.4s,\n top 0.4s,\n background-color 0.1s,\n opacity 0.2s;\n }\n\n .ag-row-animation .ag-row.ag-after-created {\n transition:\n transform 0.4s,\n top 0.4s,\n height 0.4s,\n background-color 0.1s,\n opacity 0.2s;\n }\n\n .ag-row-no-animation .ag-row {\n transition: background-color 0.1s;\n }\n\n .ag-row {\n white-space: nowrap;\n width: 100%;\n }\n\n .ag-row-loading {\n display: flex;\n align-items: center;\n }\n\n .ag-row-position-absolute {\n position: absolute;\n }\n\n .ag-row-position-relative {\n position: relative;\n }\n\n .ag-full-width-row {\n overflow: hidden;\n pointer-events: all;\n }\n\n .ag-row-inline-editing {\n z-index: 1;\n }\n\n .ag-row-dragging {\n z-index: 2;\n }\n\n .ag-stub-cell {\n display: flex;\n align-items: center;\n }\n\n .ag-cell {\n display: inline-block;\n position: absolute;\n white-space: nowrap;\n height: 100%;\n }\n\n .ag-cell-value {\n flex: 1 1 auto;\n }\n\n .ag-cell-value,\n .ag-group-value {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ag-cell-wrap-text {\n white-space: normal;\n word-break: break-all;\n }\n\n .ag-cell-wrapper {\n display: flex;\n align-items: center;\n }\n .ag-cell-wrapper.ag-row-group {\n align-items: flex-start;\n }\n\n .ag-sparkline-wrapper {\n position: absolute;\n height: 100%;\n width: 100%;\n left: 0;\n top: 0;\n }\n\n .ag-full-width-row .ag-cell-wrapper.ag-row-group {\n height: 100%;\n align-items: center;\n }\n\n .ag-cell-inline-editing {\n z-index: 1;\n }\n .ag-cell-inline-editing .ag-cell-wrapper,\n .ag-cell-inline-editing .ag-cell-edit-wrapper,\n .ag-cell-inline-editing .ag-cell-editor,\n .ag-cell-inline-editing .ag-cell-editor .ag-wrapper,\n .ag-cell-inline-editing .ag-cell-editor input {\n height: 100%;\n width: 100%;\n line-height: normal;\n }\n\n .ag-cell .ag-icon {\n display: inline-block;\n vertical-align: middle;\n }\n\n .ag-set-filter-item {\n display: flex;\n align-items: center;\n height: 100%;\n }\n\n .ag-set-filter-item-checkbox {\n display: flex;\n overflow: hidden;\n }\n\n .ag-set-filter-group-icons {\n display: block;\n }\n .ag-set-filter-group-icons > * {\n cursor: pointer;\n }\n\n .ag-filter-body-wrapper {\n display: flex;\n flex-direction: column;\n }\n\n .ag-filter-filter {\n flex: 1 1 0px;\n }\n\n .ag-filter-condition {\n display: flex;\n justify-content: center;\n }\n\n .ag-floating-filter-body {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n height: 100%;\n }\n\n .ag-floating-filter-full-body {\n display: flex;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n align-items: center;\n overflow: hidden;\n }\n\n .ag-floating-filter-full-body > div {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-input {\n align-items: center;\n display: flex;\n width: 100%;\n }\n .ag-floating-filter-input > * {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-button {\n display: flex;\n flex: none;\n }\n\n .ag-dnd-ghost {\n position: absolute;\n display: inline-flex;\n align-items: center;\n cursor: move;\n white-space: nowrap;\n z-index: 9999;\n }\n\n .ag-overlay {\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n .ag-overlay-panel {\n display: flex;\n height: 100%;\n width: 100%;\n }\n\n .ag-overlay-wrapper {\n display: flex;\n flex: none;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n text-align: center;\n }\n\n .ag-overlay-loading-wrapper {\n pointer-events: all;\n }\n\n .ag-popup-child {\n z-index: 5;\n top: 0;\n }\n\n .ag-popup-editor {\n position: absolute;\n user-select: none;\n z-index: 1;\n }\n\n .ag-large-text-input {\n display: block;\n }\n\n .ag-virtual-list-item {\n position: absolute;\n width: 100%;\n }\n\n .ag-floating-top {\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n position: relative;\n display: flex;\n }\n\n .ag-pinned-left-floating-top {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-pinned-right-floating-top {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-floating-bottom {\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n position: relative;\n display: flex;\n }\n\n .ag-pinned-left-floating-bottom {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-pinned-right-floating-bottom {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-sticky-top {\n position: absolute;\n display: flex;\n width: 100%;\n }\n\n .ag-pinned-left-sticky-top,\n .ag-pinned-right-sticky-top {\n position: relative;\n height: 100%;\n overflow: hidden;\n }\n\n .ag-sticky-top-full-width-container {\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .ag-dialog,\n .ag-panel {\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n }\n\n .ag-panel-title-bar {\n display: flex;\n flex: none;\n align-items: center;\n cursor: default;\n }\n\n .ag-panel-title-bar-title {\n flex: 1 1 auto;\n }\n\n .ag-panel-title-bar-buttons {\n display: flex;\n }\n\n .ag-panel-title-bar-button {\n cursor: pointer;\n }\n\n .ag-panel-content-wrapper {\n display: flex;\n flex: 1 1 auto;\n position: relative;\n overflow: hidden;\n }\n\n .ag-dialog {\n position: absolute;\n }\n\n .ag-resizer {\n position: absolute;\n pointer-events: none;\n user-select: none;\n z-index: 1;\n }\n .ag-resizer.ag-resizer-topLeft {\n top: 0;\n left: 0;\n height: 5px;\n width: 5px;\n cursor: nwse-resize;\n }\n .ag-resizer.ag-resizer-top {\n top: 0;\n left: 5px;\n right: 5px;\n height: 5px;\n cursor: ns-resize;\n }\n .ag-resizer.ag-resizer-topRight {\n top: 0;\n right: 0;\n height: 5px;\n width: 5px;\n cursor: nesw-resize;\n }\n .ag-resizer.ag-resizer-right {\n top: 5px;\n right: 0;\n bottom: 5px;\n width: 5px;\n cursor: ew-resize;\n }\n .ag-resizer.ag-resizer-bottomRight {\n bottom: 0;\n right: 0;\n height: 5px;\n width: 5px;\n cursor: nwse-resize;\n }\n .ag-resizer.ag-resizer-bottom {\n bottom: 0;\n left: 5px;\n right: 5px;\n height: 5px;\n cursor: ns-resize;\n }\n .ag-resizer.ag-resizer-bottomLeft {\n bottom: 0;\n left: 0;\n height: 5px;\n width: 5px;\n cursor: nesw-resize;\n }\n .ag-resizer.ag-resizer-left {\n left: 0;\n top: 5px;\n bottom: 5px;\n width: 5px;\n cursor: ew-resize;\n }\n\n .ag-tooltip {\n position: absolute;\n pointer-events: none;\n z-index: 99999;\n }\n\n .ag-tooltip-custom {\n position: absolute;\n pointer-events: none;\n z-index: 99999;\n }\n\n .ag-value-slide-out {\n margin-right: 5px;\n opacity: 1;\n transition:\n opacity 3s,\n margin-right 3s;\n transition-timing-function: linear;\n }\n\n .ag-value-slide-out-end {\n margin-right: 10px;\n opacity: 0;\n }\n\n .ag-opacity-zero {\n opacity: 0 !important;\n }\n\n .ag-menu {\n max-height: 100%;\n overflow-y: auto;\n position: absolute;\n user-select: none;\n }\n\n .ag-menu-column-select-wrapper {\n height: 265px;\n overflow: auto;\n }\n .ag-menu-column-select-wrapper .ag-column-select {\n height: 100%;\n }\n\n .ag-menu-list {\n display: table;\n width: 100%;\n }\n\n .ag-menu-option,\n .ag-menu-separator {\n display: table-row;\n }\n\n .ag-menu-option-part,\n .ag-menu-separator-part {\n display: table-cell;\n vertical-align: middle;\n }\n\n .ag-menu-option-text {\n white-space: nowrap;\n }\n\n .ag-compact-menu-option {\n width: 100%;\n display: flex;\n flex-wrap: nowrap;\n }\n\n .ag-compact-menu-option-text {\n white-space: nowrap;\n flex: 1 1 auto;\n }\n\n .ag-rich-select {\n cursor: default;\n outline: none;\n }\n\n .ag-rich-select-value {\n display: flex;\n align-items: center;\n }\n\n .ag-rich-select-value-icon {\n flex: 1 1 auto;\n order: 1;\n }\n .ag-ltr .ag-rich-select-value-icon {\n text-align: right;\n }\n .ag-rtl .ag-rich-select-value-icon {\n text-align: left;\n }\n\n .ag-rich-select-list {\n position: relative;\n }\n\n .ag-rich-select-virtual-list-item {\n display: flex;\n }\n\n .ag-rich-select-row {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n white-space: nowrap;\n }\n\n .ag-paging-panel {\n align-items: center;\n display: flex;\n justify-content: flex-end;\n }\n\n .ag-paging-page-summary-panel {\n display: flex;\n align-items: center;\n }\n\n .ag-paging-button {\n position: relative;\n }\n\n .ag-disabled .ag-paging-page-summary-panel {\n pointer-events: none;\n }\n\n .ag-tool-panel-wrapper {\n display: flex;\n overflow-y: auto;\n overflow-x: hidden;\n cursor: default;\n user-select: none;\n }\n\n .ag-column-select-column,\n .ag-column-select-column-group,\n .ag-select-agg-func-item {\n position: relative;\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n text-overflow: ellipsis;\n white-space: nowrap;\n height: 100%;\n }\n .ag-column-select-column > *,\n .ag-column-select-column-group > *,\n .ag-select-agg-func-item > * {\n flex: none;\n }\n\n .ag-column-select-checkbox {\n display: flex;\n }\n\n .ag-tool-panel-horizontal-resize {\n cursor: ew-resize;\n height: 100%;\n position: absolute;\n top: 0;\n width: 5px;\n z-index: 1;\n }\n\n .ag-ltr .ag-side-bar-left .ag-tool-panel-horizontal-resize {\n right: -3px;\n }\n .ag-rtl .ag-side-bar-left .ag-tool-panel-horizontal-resize {\n left: -3px;\n }\n\n .ag-ltr .ag-side-bar-right .ag-tool-panel-horizontal-resize {\n left: -3px;\n }\n .ag-rtl .ag-side-bar-right .ag-tool-panel-horizontal-resize {\n right: -3px;\n }\n\n .ag-details-row {\n width: 100%;\n }\n\n .ag-details-row-fixed-height {\n height: 100%;\n }\n\n .ag-details-grid {\n width: 100%;\n }\n\n .ag-details-grid-fixed-height {\n height: 100%;\n }\n\n .ag-header-group-cell {\n display: flex;\n align-items: center;\n height: 100%;\n position: absolute;\n }\n\n .ag-cell-label-container {\n display: flex;\n justify-content: space-between;\n flex-direction: row-reverse;\n align-items: center;\n height: 100%;\n width: 100%;\n overflow: hidden;\n padding: 5px 0px;\n }\n\n .ag-right-aligned-header .ag-cell-label-container {\n flex-direction: row;\n }\n\n .ag-side-bar {\n display: flex;\n flex-direction: row-reverse;\n }\n\n .ag-side-bar-left {\n order: -1;\n flex-direction: row;\n }\n\n .ag-side-button-button {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex-wrap: nowrap;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n }\n\n .ag-side-button-label {\n writing-mode: vertical-lr;\n }\n\n .ag-status-bar {\n display: flex;\n justify-content: space-between;\n overflow: hidden;\n }\n\n .ag-status-panel {\n display: inline-flex;\n }\n\n .ag-status-name-value {\n white-space: nowrap;\n }\n\n .ag-status-bar-left {\n display: inline-flex;\n }\n\n .ag-status-bar-center {\n display: inline-flex;\n }\n\n .ag-status-bar-right {\n display: inline-flex;\n }\n\n .ag-icon {\n display: block;\n speak: none;\n }\n\n .ag-group {\n position: relative;\n width: 100%;\n }\n\n .ag-group-title-bar {\n display: flex;\n align-items: center;\n }\n\n .ag-group-title {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .ag-group-title-bar .ag-group-title {\n cursor: default;\n }\n\n .ag-group-toolbar {\n display: flex;\n align-items: center;\n }\n\n .ag-group-container {\n display: flex;\n }\n\n .ag-disabled .ag-group-container {\n pointer-events: none;\n }\n\n .ag-group-container-horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n }\n\n .ag-group-container-vertical {\n flex-direction: column;\n }\n\n .ag-column-group-icons {\n display: block;\n }\n .ag-column-group-icons > * {\n cursor: pointer;\n }\n\n .ag-group-item-alignment-stretch .ag-group-item {\n align-items: stretch;\n }\n\n .ag-group-item-alignment-start .ag-group-item {\n align-items: flex-start;\n }\n\n .ag-group-item-alignment-end .ag-group-item {\n align-items: flex-end;\n }\n\n .ag-toggle-button-icon {\n transition: right 0.3s;\n position: absolute;\n top: -1px;\n }\n\n .ag-input-field,\n .ag-select {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n\n .ag-input-field-input {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-input .ag-input-field-input[type='date'] {\n width: 1px;\n }\n\n .ag-range-field {\n display: flex;\n align-items: center;\n }\n\n .ag-angle-select {\n display: flex;\n align-items: center;\n }\n\n .ag-angle-select-wrapper {\n display: flex;\n }\n\n .ag-angle-select-parent-circle {\n display: block;\n position: relative;\n }\n\n .ag-angle-select-child-circle {\n position: absolute;\n }\n\n .ag-slider-wrapper {\n display: flex;\n }\n .ag-slider-wrapper .ag-input-field {\n flex: 1 1 auto;\n }\n\n .ag-picker-field-display {\n flex: 1 1 auto;\n }\n\n .ag-picker-field {\n display: flex;\n align-items: center;\n }\n\n .ag-picker-field-icon {\n display: flex;\n border: 0;\n padding: 0;\n margin: 0;\n cursor: pointer;\n }\n\n .ag-picker-field-wrapper {\n overflow: hidden;\n }\n\n .ag-label-align-right .ag-label {\n order: 1;\n }\n .ag-label-align-right > * {\n flex: none;\n }\n\n .ag-label-align-top {\n flex-direction: column;\n align-items: flex-start;\n }\n .ag-label-align-top > * {\n align-self: stretch;\n }\n\n .ag-label-ellipsis {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n }\n\n .ag-color-panel {\n width: 100%;\n display: flex;\n flex-direction: column;\n text-align: center;\n }\n\n .ag-spectrum-color {\n flex: 1 1 auto;\n position: relative;\n overflow: hidden;\n cursor: default;\n }\n\n .ag-spectrum-fill {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .ag-spectrum-val {\n cursor: pointer;\n }\n\n .ag-spectrum-dragger {\n position: absolute;\n pointer-events: none;\n cursor: pointer;\n }\n\n .ag-spectrum-hue {\n cursor: default;\n background: linear-gradient(\n to left,\n #ff0000 3%,\n #ffff00 17%,\n #00ff00 33%,\n #00ffff 50%,\n #0000ff 67%,\n #ff00ff 83%,\n #ff0000 100%\n );\n }\n\n .ag-spectrum-alpha {\n cursor: default;\n }\n\n .ag-spectrum-hue-background {\n width: 100%;\n height: 100%;\n }\n\n .ag-spectrum-alpha-background {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgb(0, 0, 0));\n width: 100%;\n height: 100%;\n }\n\n .ag-spectrum-tool {\n cursor: pointer;\n }\n\n .ag-spectrum-slider {\n position: absolute;\n pointer-events: none;\n }\n\n .ag-recent-colors {\n display: flex;\n }\n\n .ag-recent-color {\n cursor: pointer;\n }\n\n .ag-ltr .ag-column-select-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-column-select-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-set-filter-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-set-filter-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-row-group-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-row-group-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-column-select-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-column-select-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-set-filter-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-set-filter-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-row-group-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-row-group-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-column-select-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-column-select-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-set-filter-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-set-filter-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-row-group-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-row-group-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-column-select-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-column-select-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-set-filter-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-set-filter-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-row-group-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-row-group-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-column-select-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-column-select-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-set-filter-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-set-filter-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-row-group-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-row-group-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-column-select-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-column-select-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-set-filter-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-set-filter-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-row-group-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-row-group-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-column-select-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-column-select-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-set-filter-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-set-filter-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-row-group-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-row-group-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-column-select-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-column-select-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-set-filter-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-set-filter-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-row-group-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-row-group-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-column-select-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-column-select-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr .ag-set-filter-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-set-filter-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr .ag-row-group-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-row-group-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr {\n direction: ltr;\n }\n .ag-ltr .ag-body,\n .ag-ltr .ag-floating-top,\n .ag-ltr .ag-floating-bottom,\n .ag-ltr .ag-header,\n .ag-ltr .ag-body-viewport,\n .ag-ltr .ag-body-horizontal-scroll {\n flex-direction: row;\n }\n\n .ag-rtl {\n direction: rtl;\n }\n .ag-rtl .ag-body,\n .ag-rtl .ag-floating-top,\n .ag-rtl .ag-floating-bottom,\n .ag-rtl .ag-header,\n .ag-rtl .ag-body-viewport,\n .ag-rtl .ag-body-horizontal-scroll {\n flex-direction: row-reverse;\n }\n .ag-rtl .ag-icon-contracted,\n .ag-rtl .ag-icon-expanded,\n .ag-rtl .ag-icon-tree-closed {\n display: block;\n transform: rotate(180deg);\n }\n\n .ag-body .ag-body-viewport {\n -webkit-overflow-scrolling: touch;\n }\n\n .ag-layout-print.ag-body {\n display: block;\n height: unset;\n }\n .ag-layout-print.ag-body-clipper {\n height: unset;\n }\n .ag-layout-print.ag-root-wrapper {\n display: inline-flex;\n }\n .ag-layout-print .ag-center-cols-clipper {\n min-width: 100%;\n }\n .ag-layout-print .ag-body-vertical-scroll {\n display: none;\n }\n .ag-layout-print .ag-body-horizontal-scroll {\n display: none;\n }\n .ag-layout-print.ag-force-vertical-scroll {\n overflow-y: visible !important;\n }\n\n @media print {\n .ag-root-wrapper.ag-layout-print {\n display: table;\n }\n .ag-root-wrapper.ag-layout-print .ag-root-wrapper-body,\n .ag-root-wrapper.ag-layout-print .ag-root,\n .ag-root-wrapper.ag-layout-print .ag-body-viewport,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-container,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-viewport,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-clipper,\n .ag-root-wrapper.ag-layout-print .ag-body-horizontal-scroll-viewport,\n .ag-root-wrapper.ag-layout-print .ag-virtual-list-viewport {\n height: auto !important;\n overflow: hidden !important;\n display: block !important;\n }\n .ag-root-wrapper.ag-layout-print .ag-row,\n .ag-root-wrapper.ag-layout-print .ag-cell {\n break-inside: avoid;\n }\n }\n [class^='ag-'],\n [class^='ag-']:focus,\n [class^='ag-']:after,\n [class^='ag-']:before {\n box-sizing: border-box;\n outline: none;\n }\n\n [class^='ag-']::-ms-clear {\n display: none;\n }\n\n .ag-checkbox .ag-input-wrapper,\n .ag-radio-button .ag-input-wrapper {\n overflow: visible;\n }\n\n .ag-range-field .ag-input-wrapper {\n height: 100%;\n }\n\n .ag-toggle-button {\n flex: none;\n width: unset;\n min-width: unset;\n }\n\n .ag-ltr .ag-label-align-right .ag-label {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-label-align-right .ag-label {\n margin-right: var(--ag-grid-size);\n }\n\n input[class^='ag-'] {\n margin: 0;\n background-color: var(--ag-background-color);\n }\n\n textarea[class^='ag-'],\n select[class^='ag-'] {\n background-color: var(--ag-background-color);\n }\n\n input[class^='ag-']:not([type]),\n input[class^='ag-'][type='text'],\n input[class^='ag-'][type='number'],\n input[class^='ag-'][type='tel'],\n input[class^='ag-'][type='date'],\n input[class^='ag-'][type='datetime-local'],\n textarea[class^='ag-'] {\n font-size: inherit;\n line-height: inherit;\n color: inherit;\n border: var(--ag-borders-input) var(--ag-input-border-color);\n }\n input[class^='ag-']:not([type]):disabled,\n input[class^='ag-'][type='text']:disabled,\n input[class^='ag-'][type='number']:disabled,\n input[class^='ag-'][type='tel']:disabled,\n input[class^='ag-'][type='date']:disabled,\n input[class^='ag-'][type='datetime-local']:disabled,\n textarea[class^='ag-']:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n input[class^='ag-']:not([type]):focus,\n input[class^='ag-'][type='text']:focus,\n input[class^='ag-'][type='number']:focus,\n input[class^='ag-'][type='tel']:focus,\n input[class^='ag-'][type='date']:focus,\n input[class^='ag-'][type='datetime-local']:focus,\n textarea[class^='ag-']:focus {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-']:not([type]):invalid,\n input[class^='ag-'][type='text']:invalid,\n input[class^='ag-'][type='number']:invalid,\n input[class^='ag-'][type='tel']:invalid,\n input[class^='ag-'][type='date']:invalid,\n input[class^='ag-'][type='datetime-local']:invalid,\n textarea[class^='ag-']:invalid {\n border: var(--ag-borders-input-invalid) var(--ag-input-border-color-invalid);\n }\n\n input[class^='ag-'][type='number'] {\n -moz-appearance: textfield;\n }\n input[class^='ag-'][type='number']::-webkit-outer-spin-button,\n input[class^='ag-'][type='number']::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n input[class^='ag-'][type='range'] {\n padding: 0;\n }\n\n input[class^='ag-'][type='button']:focus,\n button[class^='ag-']:focus {\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n\n .ag-drag-handle {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-list-item,\n .ag-virtual-list-item {\n height: var(--ag-list-item-height);\n }\n\n .ag-keyboard-focus .ag-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-select-list {\n background-color: var(--ag-background-color);\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n .ag-list-item {\n display: flex;\n align-items: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .ag-list-item.ag-active-item {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-select-list-item {\n padding-left: 4px;\n padding-right: 4px;\n cursor: default;\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n .ag-select-list-item span {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .ag-select .ag-picker-field-wrapper {\n background-color: var(--ag-background-color);\n min-height: var(--ag-list-item-height);\n cursor: default;\n }\n .ag-select.ag-disabled .ag-picker-field-wrapper:focus {\n box-shadow: none;\n }\n .ag-select:not(.ag-cell-editor) {\n height: var(--ag-list-item-height);\n }\n .ag-select .ag-picker-field-display {\n margin: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .ag-select .ag-picker-field-icon {\n display: flex;\n align-items: center;\n }\n .ag-select.ag-disabled {\n opacity: 0.5;\n }\n\n .ag-rich-select {\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-rich-select-list {\n width: 100%;\n min-width: 200px;\n height: calc(var(--ag-row-height) * 6.5);\n }\n\n .ag-rich-select-value {\n height: var(--ag-row-height);\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n padding-top: 0;\n padding-bottom: 0;\n }\n .ag-ltr .ag-rich-select-value {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-rich-select-value {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n .ag-ltr .ag-rich-select-value {\n padding-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-rich-select-value {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-rich-select-virtual-list-item {\n cursor: default;\n height: var(--ag-list-item-height);\n }\n .ag-keyboard-focus .ag-rich-select-virtual-list-item:focus::after {\n content: none;\n }\n .ag-rich-select-virtual-list-item:hover {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-ltr .ag-rich-select-row {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-rich-select-row {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-rich-select-row-selected {\n background-color: var(--ag-selected-row-background-color);\n }\n\n .ag-row-drag,\n .ag-selection-checkbox,\n .ag-group-expanded,\n .ag-group-contracted {\n color: var(--ag-secondary-foreground-color);\n }\n .ag-ltr .ag-row-drag,\n .ag-ltr .ag-selection-checkbox,\n .ag-ltr .ag-group-expanded,\n .ag-ltr .ag-group-contracted {\n margin-right: var(--ag-cell-widget-spacing);\n }\n .ag-rtl .ag-row-drag,\n .ag-rtl .ag-selection-checkbox,\n .ag-rtl .ag-group-expanded,\n .ag-rtl .ag-group-contracted {\n margin-left: var(--ag-cell-widget-spacing);\n }\n\n .ag-cell-wrapper > *:not(.ag-cell-value):not(.ag-group-value) {\n --ag-internal-calculated-line-height: var(\n --ag-line-height,\n calc(var(--ag-row-height) - var(--ag-row-border-width))\n );\n --ag-internal-padded-row-height: calc(var(--ag-row-height) - var(--ag-row-border-width));\n height: min(var(--ag-internal-calculated-line-height), var(--ag-internal-padded-row-height));\n display: flex;\n align-items: center;\n flex: none;\n }\n\n .ag-group-expanded,\n .ag-group-contracted {\n cursor: pointer;\n }\n\n .ag-group-title-bar-icon {\n cursor: pointer;\n flex: none;\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-ltr .ag-group-child-count {\n margin-left: 2px;\n }\n .ag-rtl .ag-group-child-count {\n margin-right: 2px;\n }\n\n .ag-group-title-bar {\n background-color: var(--ag-subheader-background-color);\n padding: var(--ag-grid-size);\n }\n\n .ag-group-toolbar {\n padding: var(--ag-grid-size);\n background-color: var(--ag-subheader-toolbar-background-color);\n }\n\n .ag-disabled-group-title-bar,\n .ag-disabled-group-container {\n opacity: 0.5;\n }\n\n .group-item {\n margin: calc(var(--ag-grid-size) * 0.5) 0;\n }\n\n .ag-label {\n white-space: nowrap;\n }\n .ag-ltr .ag-label {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-label {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-label-align-top .ag-label {\n margin-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n\n .ag-angle-select[disabled] {\n color: var(--ag-disabled-foreground-color);\n pointer-events: none;\n }\n .ag-angle-select[disabled] .ag-angle-select-field {\n opacity: 0.4;\n }\n\n .ag-ltr .ag-slider-field,\n .ag-ltr .ag-angle-select-field {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-slider-field,\n .ag-rtl .ag-angle-select-field {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-angle-select-parent-circle {\n width: 24px;\n height: 24px;\n border-radius: 12px;\n border: solid 1px;\n border-color: var(--ag-border-color);\n background-color: var(--ag-background-color);\n }\n\n .ag-angle-select-child-circle {\n top: 4px;\n left: 12px;\n width: 6px;\n height: 6px;\n margin-left: -3px;\n margin-top: -4px;\n border-radius: 3px;\n background-color: var(--ag-secondary-foreground-color);\n }\n\n .ag-picker-field-wrapper {\n border: 1px solid;\n border-color: var(--ag-border-color);\n border-radius: 5px;\n }\n .ag-picker-field-wrapper:focus {\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n\n .ag-picker-field-button {\n background-color: var(--ag-background-color);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-dialog.ag-color-dialog {\n border-radius: 5px;\n }\n\n .ag-color-picker .ag-picker-field-display {\n height: var(--ag-icon-size);\n }\n\n .ag-color-panel {\n padding: var(--ag-grid-size);\n }\n\n .ag-spectrum-color {\n background-color: rgb(255, 0, 0);\n border-radius: 2px;\n }\n\n .ag-spectrum-tools {\n padding: 10px;\n }\n\n .ag-spectrum-sat {\n background-image: linear-gradient(to right, white, rgba(204, 154, 129, 0));\n }\n\n .ag-spectrum-val {\n background-image: linear-gradient(to top, black, rgba(204, 154, 129, 0));\n }\n\n .ag-spectrum-dragger {\n border-radius: 12px;\n height: 12px;\n width: 12px;\n border: 1px solid white;\n background: black;\n box-shadow: 0 0 2px 0px rgba(0, 0, 0, 0.24);\n }\n\n .ag-spectrum-hue-background {\n border-radius: 2px;\n }\n\n .ag-spectrum-alpha-background {\n border-radius: 2px;\n }\n\n .ag-spectrum-tool {\n margin-bottom: 10px;\n height: 11px;\n border-radius: 2px;\n }\n\n .ag-spectrum-slider {\n margin-top: -12px;\n width: 13px;\n height: 13px;\n border-radius: 13px;\n background-color: rgb(248, 248, 248);\n box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);\n }\n\n .ag-recent-color {\n margin: 0 3px;\n }\n .ag-recent-color:first-child {\n margin-left: 0;\n }\n .ag-recent-color:last-child {\n margin-right: 0;\n }\n\n .ag-dnd-ghost {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n overflow: hidden;\n text-overflow: ellipsis;\n border: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-header-height) !important;\n line-height: var(--ag-header-height);\n margin: 0;\n padding: 0 calc(var(--ag-grid-size) * 2);\n transform: translateY(calc(var(--ag-grid-size) * 2));\n }\n\n .ag-dnd-ghost-icon {\n margin-right: var(--ag-grid-size);\n color: var(--ag-foreground-color);\n }\n\n .ag-popup-child:not(.ag-tooltip-custom) {\n box-shadow: var(--ag-popup-shadow);\n }\n\n .ag-dragging-range-handle .ag-dialog,\n .ag-dragging-fill-handle .ag-dialog {\n opacity: 0.7;\n pointer-events: none;\n }\n\n .ag-dialog {\n border-radius: var(--ag-border-radius);\n border: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-panel {\n background-color: var(--ag-background-color);\n }\n\n .ag-panel-title-bar {\n background-color: var(--ag-header-background-color);\n color: var(--ag-header-foreground-color);\n height: var(--ag-header-height);\n padding: var(--ag-grid-size) var(--ag-cell-horizontal-padding);\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-ltr .ag-panel-title-bar-button {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-panel-title-bar-button {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-tooltip {\n background-color: var(--ag-tooltip-background-color);\n color: var(--ag-foreground-color);\n padding: var(--ag-grid-size);\n border: var(--ag-borders) var(--ag-border-color);\n border-radius: var(--ag-card-radius);\n transition: opacity 1s;\n white-space: normal;\n }\n .ag-tooltip.ag-tooltip-hiding {\n opacity: 0;\n }\n\n .ag-tooltip-custom {\n transition: opacity 1s;\n }\n .ag-tooltip-custom.ag-tooltip-hiding {\n opacity: 0;\n }\n\n .ag-ltr .ag-column-select-indent-1 {\n padding-left: calc(1 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-1 {\n padding-right: calc(1 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-2 {\n padding-left: calc(2 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-2 {\n padding-right: calc(2 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-3 {\n padding-left: calc(3 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-3 {\n padding-right: calc(3 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-4 {\n padding-left: calc(4 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-4 {\n padding-right: calc(4 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-5 {\n padding-left: calc(5 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-5 {\n padding-right: calc(5 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-6 {\n padding-left: calc(6 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-6 {\n padding-right: calc(6 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-7 {\n padding-left: calc(7 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-7 {\n padding-right: calc(7 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-8 {\n padding-left: calc(8 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-8 {\n padding-right: calc(8 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-9 {\n padding-left: calc(9 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-9 {\n padding-right: calc(9 * var(--ag-column-select-indent-size));\n }\n\n .ag-column-select-header-icon {\n cursor: pointer;\n }\n\n .ag-keyboard-focus .ag-column-select-header-icon:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-header-icon:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 0px;\n left: 0px;\n display: block;\n width: calc(100% - 0px);\n height: calc(100% - 0px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-ltr .ag-column-group-icons:not(:last-child),\n .ag-ltr .ag-column-select-header-icon:not(:last-child),\n .ag-ltr .ag-column-select-header-checkbox:not(:last-child),\n .ag-ltr .ag-column-select-header-filter-wrapper:not(:last-child),\n .ag-ltr .ag-column-select-checkbox:not(:last-child),\n .ag-ltr .ag-column-select-column-drag-handle:not(:last-child),\n .ag-ltr .ag-column-select-column-group-drag-handle:not(:last-child),\n .ag-ltr .ag-column-select-column-label:not(:last-child) {\n margin-right: var(--ag-widget-horizontal-spacing);\n }\n .ag-rtl .ag-column-group-icons:not(:last-child),\n .ag-rtl .ag-column-select-header-icon:not(:last-child),\n .ag-rtl .ag-column-select-header-checkbox:not(:last-child),\n .ag-rtl .ag-column-select-header-filter-wrapper:not(:last-child),\n .ag-rtl .ag-column-select-checkbox:not(:last-child),\n .ag-rtl .ag-column-select-column-drag-handle:not(:last-child),\n .ag-rtl .ag-column-select-column-group-drag-handle:not(:last-child),\n .ag-rtl .ag-column-select-column-label:not(:last-child) {\n margin-left: var(--ag-widget-horizontal-spacing);\n }\n\n .ag-keyboard-focus .ag-column-select-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 1px;\n left: 1px;\n display: block;\n width: calc(100% - 2px);\n height: calc(100% - 2px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-select-column-group:not(:last-child),\n .ag-column-select-column:not(:last-child) {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-column-select-column-readonly,\n .ag-column-select-column-group-readonly {\n color: var(--ag-disabled-foreground-color);\n pointer-events: none;\n }\n\n .ag-ltr .ag-column-select-add-group-indent {\n margin-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-column-select-add-group-indent {\n margin-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n }\n\n .ag-column-select-virtual-list-viewport {\n padding: calc(var(--ag-widget-container-vertical-padding) * 0.5) 0px;\n }\n\n .ag-column-select-virtual-list-item {\n padding: 0 var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-rtl {\n text-align: right;\n }\n\n .ag-root-wrapper {\n border: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-1 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 1);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-1 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 1);\n }\n\n .ag-ltr .ag-row-group-indent-1 {\n padding-left: calc(1 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-1 {\n padding-right: calc(1 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-1 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-1 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-2 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 2);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-2 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 2);\n }\n\n .ag-ltr .ag-row-group-indent-2 {\n padding-left: calc(2 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-2 {\n padding-right: calc(2 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-2 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-2 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-3 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 3);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-3 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 3);\n }\n\n .ag-ltr .ag-row-group-indent-3 {\n padding-left: calc(3 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-3 {\n padding-right: calc(3 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-3 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-3 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-4 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 4);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-4 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 4);\n }\n\n .ag-ltr .ag-row-group-indent-4 {\n padding-left: calc(4 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-4 {\n padding-right: calc(4 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-4 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-4 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-5 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 5);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-5 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 5);\n }\n\n .ag-ltr .ag-row-group-indent-5 {\n padding-left: calc(5 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-5 {\n padding-right: calc(5 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-5 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-5 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-6 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 6);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-6 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 6);\n }\n\n .ag-ltr .ag-row-group-indent-6 {\n padding-left: calc(6 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-6 {\n padding-right: calc(6 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-6 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-6 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-7 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 7);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-7 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 7);\n }\n\n .ag-ltr .ag-row-group-indent-7 {\n padding-left: calc(7 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-7 {\n padding-right: calc(7 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-7 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-7 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-8 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 8);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-8 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 8);\n }\n\n .ag-ltr .ag-row-group-indent-8 {\n padding-left: calc(8 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-8 {\n padding-right: calc(8 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-8 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-8 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-9 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 9);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-9 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 9);\n }\n\n .ag-ltr .ag-row-group-indent-9 {\n padding-left: calc(9 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-9 {\n padding-right: calc(9 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-9 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-9 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-10 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 10);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-10 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 10);\n }\n\n .ag-ltr .ag-row-group-indent-10 {\n padding-left: calc(10 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-10 {\n padding-right: calc(10 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-10 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-10 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-11 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 11);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-11 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 11);\n }\n\n .ag-ltr .ag-row-group-indent-11 {\n padding-left: calc(11 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-11 {\n padding-right: calc(11 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-11 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-11 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-12 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 12);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-12 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 12);\n }\n\n .ag-ltr .ag-row-group-indent-12 {\n padding-left: calc(12 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-12 {\n padding-right: calc(12 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-12 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-12 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-13 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 13);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-13 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 13);\n }\n\n .ag-ltr .ag-row-group-indent-13 {\n padding-left: calc(13 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-13 {\n padding-right: calc(13 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-13 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-13 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-14 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 14);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-14 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 14);\n }\n\n .ag-ltr .ag-row-group-indent-14 {\n padding-left: calc(14 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-14 {\n padding-right: calc(14 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-14 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-14 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-15 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 15);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-15 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 15);\n }\n\n .ag-ltr .ag-row-group-indent-15 {\n padding-left: calc(15 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-15 {\n padding-right: calc(15 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-15 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-15 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-16 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 16);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-16 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 16);\n }\n\n .ag-ltr .ag-row-group-indent-16 {\n padding-left: calc(16 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-16 {\n padding-right: calc(16 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-16 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-16 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-17 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 17);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-17 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 17);\n }\n\n .ag-ltr .ag-row-group-indent-17 {\n padding-left: calc(17 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-17 {\n padding-right: calc(17 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-17 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-17 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-18 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 18);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-18 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 18);\n }\n\n .ag-ltr .ag-row-group-indent-18 {\n padding-left: calc(18 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-18 {\n padding-right: calc(18 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-18 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-18 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-19 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 19);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-19 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 19);\n }\n\n .ag-ltr .ag-row-group-indent-19 {\n padding-left: calc(19 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-19 {\n padding-right: calc(19 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-19 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-19 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-20 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 20);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-20 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 20);\n }\n\n .ag-ltr .ag-row-group-indent-20 {\n padding-left: calc(20 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-20 {\n padding-right: calc(20 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-20 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-20 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-21 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 21);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-21 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 21);\n }\n\n .ag-ltr .ag-row-group-indent-21 {\n padding-left: calc(21 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-21 {\n padding-right: calc(21 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-21 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-21 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-22 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 22);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-22 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 22);\n }\n\n .ag-ltr .ag-row-group-indent-22 {\n padding-left: calc(22 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-22 {\n padding-right: calc(22 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-22 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-22 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-23 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 23);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-23 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 23);\n }\n\n .ag-ltr .ag-row-group-indent-23 {\n padding-left: calc(23 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-23 {\n padding-right: calc(23 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-23 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-23 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-24 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 24);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-24 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 24);\n }\n\n .ag-ltr .ag-row-group-indent-24 {\n padding-left: calc(24 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-24 {\n padding-right: calc(24 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-24 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-24 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-25 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 25);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-25 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 25);\n }\n\n .ag-ltr .ag-row-group-indent-25 {\n padding-left: calc(25 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-25 {\n padding-right: calc(25 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-25 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-25 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-26 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 26);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-26 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 26);\n }\n\n .ag-ltr .ag-row-group-indent-26 {\n padding-left: calc(26 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-26 {\n padding-right: calc(26 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-26 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-26 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-27 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 27);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-27 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 27);\n }\n\n .ag-ltr .ag-row-group-indent-27 {\n padding-left: calc(27 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-27 {\n padding-right: calc(27 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-27 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-27 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-28 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 28);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-28 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 28);\n }\n\n .ag-ltr .ag-row-group-indent-28 {\n padding-left: calc(28 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-28 {\n padding-right: calc(28 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-28 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-28 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-29 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 29);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-29 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 29);\n }\n\n .ag-ltr .ag-row-group-indent-29 {\n padding-left: calc(29 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-29 {\n padding-right: calc(29 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-29 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-29 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-30 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 30);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-30 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 30);\n }\n\n .ag-ltr .ag-row-group-indent-30 {\n padding-left: calc(30 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-30 {\n padding-right: calc(30 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-30 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-30 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-31 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 31);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-31 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 31);\n }\n\n .ag-ltr .ag-row-group-indent-31 {\n padding-left: calc(31 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-31 {\n padding-right: calc(31 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-31 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-31 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-32 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 32);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-32 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 32);\n }\n\n .ag-ltr .ag-row-group-indent-32 {\n padding-left: calc(32 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-32 {\n padding-right: calc(32 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-32 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-32 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-33 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 33);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-33 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 33);\n }\n\n .ag-ltr .ag-row-group-indent-33 {\n padding-left: calc(33 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-33 {\n padding-right: calc(33 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-33 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-33 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-34 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 34);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-34 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 34);\n }\n\n .ag-ltr .ag-row-group-indent-34 {\n padding-left: calc(34 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-34 {\n padding-right: calc(34 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-34 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-34 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-35 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 35);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-35 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 35);\n }\n\n .ag-ltr .ag-row-group-indent-35 {\n padding-left: calc(35 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-35 {\n padding-right: calc(35 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-35 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-35 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-36 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 36);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-36 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 36);\n }\n\n .ag-ltr .ag-row-group-indent-36 {\n padding-left: calc(36 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-36 {\n padding-right: calc(36 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-36 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-36 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-37 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 37);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-37 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 37);\n }\n\n .ag-ltr .ag-row-group-indent-37 {\n padding-left: calc(37 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-37 {\n padding-right: calc(37 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-37 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-37 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-38 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 38);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-38 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 38);\n }\n\n .ag-ltr .ag-row-group-indent-38 {\n padding-left: calc(38 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-38 {\n padding-right: calc(38 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-38 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-38 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-39 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 39);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-39 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 39);\n }\n\n .ag-ltr .ag-row-group-indent-39 {\n padding-left: calc(39 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-39 {\n padding-right: calc(39 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-39 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-39 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-40 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 40);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-40 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 40);\n }\n\n .ag-ltr .ag-row-group-indent-40 {\n padding-left: calc(40 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-40 {\n padding-right: calc(40 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-40 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-40 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-41 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 41);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-41 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 41);\n }\n\n .ag-ltr .ag-row-group-indent-41 {\n padding-left: calc(41 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-41 {\n padding-right: calc(41 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-41 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-41 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-42 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 42);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-42 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 42);\n }\n\n .ag-ltr .ag-row-group-indent-42 {\n padding-left: calc(42 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-42 {\n padding-right: calc(42 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-42 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-42 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-43 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 43);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-43 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 43);\n }\n\n .ag-ltr .ag-row-group-indent-43 {\n padding-left: calc(43 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-43 {\n padding-right: calc(43 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-43 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-43 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-44 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 44);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-44 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 44);\n }\n\n .ag-ltr .ag-row-group-indent-44 {\n padding-left: calc(44 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-44 {\n padding-right: calc(44 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-44 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-44 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-45 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 45);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-45 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 45);\n }\n\n .ag-ltr .ag-row-group-indent-45 {\n padding-left: calc(45 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-45 {\n padding-right: calc(45 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-45 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-45 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-46 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 46);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-46 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 46);\n }\n\n .ag-ltr .ag-row-group-indent-46 {\n padding-left: calc(46 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-46 {\n padding-right: calc(46 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-46 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-46 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-47 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 47);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-47 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 47);\n }\n\n .ag-ltr .ag-row-group-indent-47 {\n padding-left: calc(47 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-47 {\n padding-right: calc(47 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-47 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-47 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-48 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 48);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-48 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 48);\n }\n\n .ag-ltr .ag-row-group-indent-48 {\n padding-left: calc(48 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-48 {\n padding-right: calc(48 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-48 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-48 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-49 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 49);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-49 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 49);\n }\n\n .ag-ltr .ag-row-group-indent-49 {\n padding-left: calc(49 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-49 {\n padding-right: calc(49 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-49 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-49 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-50 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 50);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-50 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 50);\n }\n\n .ag-ltr .ag-row-group-indent-50 {\n padding-left: calc(50 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-50 {\n padding-right: calc(50 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-50 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-50 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-51 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 51);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-51 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 51);\n }\n\n .ag-ltr .ag-row-group-indent-51 {\n padding-left: calc(51 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-51 {\n padding-right: calc(51 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-51 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-51 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-52 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 52);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-52 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 52);\n }\n\n .ag-ltr .ag-row-group-indent-52 {\n padding-left: calc(52 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-52 {\n padding-right: calc(52 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-52 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-52 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-53 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 53);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-53 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 53);\n }\n\n .ag-ltr .ag-row-group-indent-53 {\n padding-left: calc(53 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-53 {\n padding-right: calc(53 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-53 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-53 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-54 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 54);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-54 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 54);\n }\n\n .ag-ltr .ag-row-group-indent-54 {\n padding-left: calc(54 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-54 {\n padding-right: calc(54 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-54 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-54 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-55 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 55);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-55 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 55);\n }\n\n .ag-ltr .ag-row-group-indent-55 {\n padding-left: calc(55 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-55 {\n padding-right: calc(55 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-55 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-55 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-56 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 56);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-56 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 56);\n }\n\n .ag-ltr .ag-row-group-indent-56 {\n padding-left: calc(56 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-56 {\n padding-right: calc(56 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-56 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-56 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-57 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 57);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-57 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 57);\n }\n\n .ag-ltr .ag-row-group-indent-57 {\n padding-left: calc(57 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-57 {\n padding-right: calc(57 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-57 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-57 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-58 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 58);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-58 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 58);\n }\n\n .ag-ltr .ag-row-group-indent-58 {\n padding-left: calc(58 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-58 {\n padding-right: calc(58 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-58 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-58 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-59 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 59);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-59 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 59);\n }\n\n .ag-ltr .ag-row-group-indent-59 {\n padding-left: calc(59 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-59 {\n padding-right: calc(59 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-59 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-59 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-60 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 60);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-60 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 60);\n }\n\n .ag-ltr .ag-row-group-indent-60 {\n padding-left: calc(60 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-60 {\n padding-right: calc(60 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-60 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-60 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-61 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 61);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-61 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 61);\n }\n\n .ag-ltr .ag-row-group-indent-61 {\n padding-left: calc(61 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-61 {\n padding-right: calc(61 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-61 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-61 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-62 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 62);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-62 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 62);\n }\n\n .ag-ltr .ag-row-group-indent-62 {\n padding-left: calc(62 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-62 {\n padding-right: calc(62 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-62 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-62 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-63 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 63);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-63 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 63);\n }\n\n .ag-ltr .ag-row-group-indent-63 {\n padding-left: calc(63 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-63 {\n padding-right: calc(63 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-63 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-63 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-64 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 64);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-64 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 64);\n }\n\n .ag-ltr .ag-row-group-indent-64 {\n padding-left: calc(64 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-64 {\n padding-right: calc(64 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-64 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-64 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-65 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 65);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-65 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 65);\n }\n\n .ag-ltr .ag-row-group-indent-65 {\n padding-left: calc(65 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-65 {\n padding-right: calc(65 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-65 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-65 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-66 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 66);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-66 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 66);\n }\n\n .ag-ltr .ag-row-group-indent-66 {\n padding-left: calc(66 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-66 {\n padding-right: calc(66 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-66 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-66 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-67 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 67);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-67 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 67);\n }\n\n .ag-ltr .ag-row-group-indent-67 {\n padding-left: calc(67 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-67 {\n padding-right: calc(67 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-67 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-67 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-68 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 68);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-68 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 68);\n }\n\n .ag-ltr .ag-row-group-indent-68 {\n padding-left: calc(68 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-68 {\n padding-right: calc(68 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-68 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-68 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-69 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 69);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-69 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 69);\n }\n\n .ag-ltr .ag-row-group-indent-69 {\n padding-left: calc(69 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-69 {\n padding-right: calc(69 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-69 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-69 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-70 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 70);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-70 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 70);\n }\n\n .ag-ltr .ag-row-group-indent-70 {\n padding-left: calc(70 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-70 {\n padding-right: calc(70 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-70 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-70 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-71 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 71);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-71 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 71);\n }\n\n .ag-ltr .ag-row-group-indent-71 {\n padding-left: calc(71 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-71 {\n padding-right: calc(71 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-71 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-71 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-72 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 72);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-72 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 72);\n }\n\n .ag-ltr .ag-row-group-indent-72 {\n padding-left: calc(72 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-72 {\n padding-right: calc(72 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-72 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-72 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-73 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 73);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-73 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 73);\n }\n\n .ag-ltr .ag-row-group-indent-73 {\n padding-left: calc(73 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-73 {\n padding-right: calc(73 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-73 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-73 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-74 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 74);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-74 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 74);\n }\n\n .ag-ltr .ag-row-group-indent-74 {\n padding-left: calc(74 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-74 {\n padding-right: calc(74 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-74 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-74 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-75 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 75);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-75 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 75);\n }\n\n .ag-ltr .ag-row-group-indent-75 {\n padding-left: calc(75 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-75 {\n padding-right: calc(75 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-75 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-75 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-76 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 76);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-76 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 76);\n }\n\n .ag-ltr .ag-row-group-indent-76 {\n padding-left: calc(76 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-76 {\n padding-right: calc(76 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-76 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-76 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-77 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 77);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-77 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 77);\n }\n\n .ag-ltr .ag-row-group-indent-77 {\n padding-left: calc(77 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-77 {\n padding-right: calc(77 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-77 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-77 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-78 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 78);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-78 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 78);\n }\n\n .ag-ltr .ag-row-group-indent-78 {\n padding-left: calc(78 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-78 {\n padding-right: calc(78 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-78 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-78 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-79 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 79);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-79 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 79);\n }\n\n .ag-ltr .ag-row-group-indent-79 {\n padding-left: calc(79 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-79 {\n padding-right: calc(79 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-79 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-79 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-80 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 80);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-80 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 80);\n }\n\n .ag-ltr .ag-row-group-indent-80 {\n padding-left: calc(80 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-80 {\n padding-right: calc(80 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-80 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-80 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-81 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 81);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-81 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 81);\n }\n\n .ag-ltr .ag-row-group-indent-81 {\n padding-left: calc(81 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-81 {\n padding-right: calc(81 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-81 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-81 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-82 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 82);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-82 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 82);\n }\n\n .ag-ltr .ag-row-group-indent-82 {\n padding-left: calc(82 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-82 {\n padding-right: calc(82 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-82 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-82 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-83 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 83);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-83 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 83);\n }\n\n .ag-ltr .ag-row-group-indent-83 {\n padding-left: calc(83 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-83 {\n padding-right: calc(83 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-83 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-83 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-84 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 84);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-84 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 84);\n }\n\n .ag-ltr .ag-row-group-indent-84 {\n padding-left: calc(84 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-84 {\n padding-right: calc(84 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-84 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-84 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-85 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 85);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-85 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 85);\n }\n\n .ag-ltr .ag-row-group-indent-85 {\n padding-left: calc(85 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-85 {\n padding-right: calc(85 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-85 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-85 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-86 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 86);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-86 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 86);\n }\n\n .ag-ltr .ag-row-group-indent-86 {\n padding-left: calc(86 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-86 {\n padding-right: calc(86 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-86 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-86 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-87 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 87);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-87 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 87);\n }\n\n .ag-ltr .ag-row-group-indent-87 {\n padding-left: calc(87 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-87 {\n padding-right: calc(87 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-87 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-87 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-88 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 88);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-88 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 88);\n }\n\n .ag-ltr .ag-row-group-indent-88 {\n padding-left: calc(88 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-88 {\n padding-right: calc(88 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-88 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-88 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-89 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 89);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-89 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 89);\n }\n\n .ag-ltr .ag-row-group-indent-89 {\n padding-left: calc(89 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-89 {\n padding-right: calc(89 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-89 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-89 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-90 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 90);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-90 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 90);\n }\n\n .ag-ltr .ag-row-group-indent-90 {\n padding-left: calc(90 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-90 {\n padding-right: calc(90 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-90 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-90 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-91 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 91);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-91 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 91);\n }\n\n .ag-ltr .ag-row-group-indent-91 {\n padding-left: calc(91 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-91 {\n padding-right: calc(91 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-91 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-91 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-92 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 92);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-92 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 92);\n }\n\n .ag-ltr .ag-row-group-indent-92 {\n padding-left: calc(92 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-92 {\n padding-right: calc(92 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-92 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-92 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-93 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 93);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-93 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 93);\n }\n\n .ag-ltr .ag-row-group-indent-93 {\n padding-left: calc(93 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-93 {\n padding-right: calc(93 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-93 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-93 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-94 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 94);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-94 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 94);\n }\n\n .ag-ltr .ag-row-group-indent-94 {\n padding-left: calc(94 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-94 {\n padding-right: calc(94 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-94 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-94 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-95 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 95);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-95 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 95);\n }\n\n .ag-ltr .ag-row-group-indent-95 {\n padding-left: calc(95 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-95 {\n padding-right: calc(95 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-95 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-95 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-96 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 96);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-96 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 96);\n }\n\n .ag-ltr .ag-row-group-indent-96 {\n padding-left: calc(96 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-96 {\n padding-right: calc(96 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-96 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-96 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-97 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 97);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-97 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 97);\n }\n\n .ag-ltr .ag-row-group-indent-97 {\n padding-left: calc(97 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-97 {\n padding-right: calc(97 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-97 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-97 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-98 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 98);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-98 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 98);\n }\n\n .ag-ltr .ag-row-group-indent-98 {\n padding-left: calc(98 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-98 {\n padding-right: calc(98 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-98 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-98 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-99 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 99);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-99 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 99);\n }\n\n .ag-ltr .ag-row-group-indent-99 {\n padding-left: calc(99 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-99 {\n padding-right: calc(99 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-99 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-99 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row-group-leaf-indent {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-group-leaf-indent {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-value-change-delta {\n padding-right: 2px;\n }\n\n .ag-value-change-delta-up {\n color: var(--ag-value-change-delta-up-color);\n }\n\n .ag-value-change-delta-down {\n color: var(--ag-value-change-delta-down-color);\n }\n\n .ag-value-change-value {\n background-color: transparent;\n border-radius: 1px;\n padding-left: 1px;\n padding-right: 1px;\n transition: background-color 1s;\n }\n\n .ag-value-change-value-highlight {\n background-color: var(--ag-value-change-value-highlight-background-color);\n transition: background-color 0.1s;\n }\n\n .ag-cell-data-changed {\n background-color: var(--ag-value-change-value-highlight-background-color) !important;\n }\n\n .ag-cell-data-changed-animation {\n background-color: transparent;\n }\n\n .ag-cell-highlight {\n background-color: var(--ag-range-selection-highlight-color) !important;\n }\n\n .ag-row {\n height: var(--ag-row-height);\n background-color: var(--ag-background-color);\n color: var(--ag-data-color);\n border-bottom: var(--ag-row-border-style) var(--ag-row-border-color) var(--ag-row-border-width);\n }\n\n .ag-row-highlight-above::after,\n .ag-row-highlight-below::after {\n content: '';\n position: absolute;\n width: calc(100% - 1px);\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n left: 1px;\n }\n\n .ag-row-highlight-above::after {\n top: -1px;\n }\n\n .ag-row-highlight-above.ag-row-first::after {\n top: 0;\n }\n\n .ag-row-highlight-below::after {\n bottom: 0px;\n }\n\n .ag-row-odd {\n background-color: var(--ag-odd-row-background-color);\n }\n\n .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible)\n .ag-horizontal-left-spacer:not(.ag-scroller-corner) {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible)\n .ag-horizontal-right-spacer:not(.ag-scroller-corner) {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-row-selected::before {\n content: '';\n background-color: var(--ag-selected-row-background-color);\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .ag-row-hover:not(.ag-full-width-row)::before,\n .ag-row-hover.ag-full-width-row.ag-row-group::before {\n content: '';\n background-color: var(--ag-row-hover-color);\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .ag-row-hover.ag-full-width-row.ag-row-group > * {\n position: relative;\n }\n\n .ag-row-hover.ag-row-selected::before {\n background-color: var(--ag-row-hover-color);\n background-image: linear-gradient(\n var(--ag-selected-row-background-color),\n var(--ag-selected-row-background-color)\n );\n }\n\n .ag-column-hover {\n background-color: var(--ag-column-hover-color);\n }\n\n .ag-ltr .ag-right-aligned-cell {\n text-align: right;\n }\n .ag-rtl .ag-right-aligned-cell {\n text-align: left;\n }\n\n .ag-ltr .ag-right-aligned-cell .ag-cell-value,\n .ag-ltr .ag-right-aligned-cell .ag-group-value {\n margin-left: auto;\n }\n .ag-rtl .ag-right-aligned-cell .ag-cell-value,\n .ag-rtl .ag-right-aligned-cell .ag-group-value {\n margin-right: auto;\n }\n\n .ag-cell,\n .ag-full-width-row .ag-cell-wrapper.ag-row-group {\n --ag-internal-calculated-line-height: var(\n --ag-line-height,\n calc(var(--ag-row-height) - var(--ag-row-border-width))\n );\n --ag-internal-padded-row-height: calc(var(--ag-row-height) - var(--ag-row-border-width));\n border: 1px solid transparent;\n line-height: min(\n var(--ag-internal-calculated-line-height),\n var(--ag-internal-padded-row-height)\n );\n padding-left: calc(var(--ag-cell-horizontal-padding) - 1px);\n padding-right: calc(var(--ag-cell-horizontal-padding) - 1px);\n -webkit-font-smoothing: subpixel-antialiased;\n }\n\n .ag-row > .ag-cell-wrapper {\n padding-left: calc(var(--ag-cell-horizontal-padding) - 1px);\n padding-right: calc(var(--ag-cell-horizontal-padding) - 1px);\n }\n\n .ag-row-dragging {\n cursor: move;\n opacity: 0.5;\n }\n\n .ag-cell-inline-editing {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n padding: 0;\n height: var(--ag-row-height);\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-popup-editor {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n background-color: var(--ag-control-panel-background-color);\n padding: 0;\n }\n\n .ag-large-text-input {\n height: auto;\n padding: var(--ag-cell-horizontal-padding);\n }\n\n .ag-rtl .ag-large-text-input textarea {\n resize: none;\n }\n\n .ag-details-row {\n padding: calc(var(--ag-grid-size) * 5);\n background-color: var(--ag-background-color);\n }\n\n .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-layout-auto-height .ag-center-cols-container,\n .ag-layout-print .ag-center-cols-clipper,\n .ag-layout-print .ag-center-cols-container {\n min-height: 50px;\n }\n\n .ag-overlay-loading-wrapper {\n background-color: var(--ag-modal-overlay-background-color);\n }\n\n .ag-overlay-loading-center {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n }\n\n .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 30px;\n }\n\n .ag-loading {\n display: flex;\n height: 100%;\n align-items: center;\n }\n .ag-ltr .ag-loading {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-loading {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-loading-icon {\n padding-right: var(--ag-cell-widget-spacing);\n }\n .ag-rtl .ag-loading-icon {\n padding-left: var(--ag-cell-widget-spacing);\n }\n\n .ag-icon-loading {\n animation-name: spin;\n animation-duration: 1000ms;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n }\n\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n .ag-floating-top {\n border-bottom: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-floating-bottom {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-ltr .ag-cell {\n border-right: var(--ag-cell-horizontal-border);\n }\n .ag-rtl .ag-cell {\n border-left: var(--ag-cell-horizontal-border);\n }\n .ag-ltr .ag-cell {\n border-right-width: 1px;\n }\n .ag-rtl .ag-cell {\n border-left-width: 1px;\n }\n\n .ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left):not(.ag-cell-range-single-cell) {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right):not(.ag-cell-range-single-cell) {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-cell-range-selected:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-single-cell:not(.ag-cell-inline-editing) {\n background-color: var(--ag-range-selection-background-color);\n }\n .ag-cell-range-selected:not(.ag-cell-focus).ag-cell-range-chart,\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-single-cell:not(.ag-cell-inline-editing).ag-cell-range-chart {\n background-color: var(--ag-range-selection-chart-background-color) !important;\n }\n .ag-cell-range-selected:not(.ag-cell-focus).ag-cell-range-chart.ag-cell-range-chart-category,\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-single-cell:not(\n .ag-cell-inline-editing\n ).ag-cell-range-chart.ag-cell-range-chart-category {\n background-color: var(--ag-range-selection-chart-category-background-color) !important;\n }\n\n .ag-cell-range-selected-1:not(.ag-cell-focus),\n .ag-root:not(.ag-context-menu-open)\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-selected-1:not(.ag-cell-inline-editing) {\n background-color: var(--ag-range-selection-background-color);\n }\n\n .ag-cell-range-selected-2:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-2 {\n background-color: var(--ag-range-selection-background-color-2);\n }\n\n .ag-cell-range-selected-3:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-3 {\n background-color: var(--ag-range-selection-background-color-3);\n }\n\n .ag-cell-range-selected-4:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-4 {\n background-color: var(--ag-range-selection-background-color-4);\n }\n\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-top {\n border-top-color: var(--ag-range-selection-border-color);\n border-top-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-right {\n border-right-color: var(--ag-range-selection-border-color);\n border-right-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-bottom {\n border-bottom-color: var(--ag-range-selection-border-color);\n border-bottom-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-left {\n border-left-color: var(--ag-range-selection-border-color);\n border-left-style: var(--ag-range-selection-border-style);\n }\n\n .ag-ltr .ag-cell-focus:not(.ag-cell-range-selected):focus-within,\n .ag-ltr .ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),\n .ag-ltr .ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group,\n .ag-ltr .ag-cell-range-single-cell,\n .ag-ltr .ag-cell-range-single-cell.ag-cell-range-handle,\n .ag-rtl .ag-cell-focus:not(.ag-cell-range-selected):focus-within,\n .ag-rtl .ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),\n .ag-rtl .ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group,\n .ag-rtl .ag-cell-range-single-cell,\n .ag-rtl .ag-cell-range-single-cell.ag-cell-range-handle {\n border: 1px solid;\n border-color: var(--ag-range-selection-border-color);\n border-style: var(--ag-range-selection-border-style);\n outline: initial;\n }\n\n .ag-cell.ag-selection-fill-top,\n .ag-cell.ag-selection-fill-top.ag-cell-range-selected {\n border-top: 1px dashed;\n border-top-color: var(--ag-range-selection-border-color);\n }\n\n .ag-ltr .ag-cell.ag-selection-fill-right,\n .ag-ltr .ag-cell.ag-selection-fill-right.ag-cell-range-selected {\n border-right: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n .ag-rtl .ag-cell.ag-selection-fill-right,\n .ag-rtl .ag-cell.ag-selection-fill-right.ag-cell-range-selected {\n border-left: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n\n .ag-cell.ag-selection-fill-bottom,\n .ag-cell.ag-selection-fill-bottom.ag-cell-range-selected {\n border-bottom: 1px dashed;\n border-bottom-color: var(--ag-range-selection-border-color);\n }\n\n .ag-ltr .ag-cell.ag-selection-fill-left,\n .ag-ltr .ag-cell.ag-selection-fill-left.ag-cell-range-selected {\n border-left: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n .ag-rtl .ag-cell.ag-selection-fill-left,\n .ag-rtl .ag-cell.ag-selection-fill-left.ag-cell-range-selected {\n border-right: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n\n .ag-fill-handle,\n .ag-range-handle {\n position: absolute;\n width: 6px;\n height: 6px;\n bottom: -1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-ltr .ag-fill-handle,\n .ag-ltr .ag-range-handle {\n right: -1px;\n }\n .ag-rtl .ag-fill-handle,\n .ag-rtl .ag-range-handle {\n left: -1px;\n }\n\n .ag-fill-handle {\n cursor: cell;\n }\n\n .ag-range-handle {\n cursor: nwse-resize;\n }\n\n .ag-cell-inline-editing {\n border-color: var(--ag-input-focus-border-color) !important;\n }\n\n .ag-menu {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n padding: 0;\n }\n\n .ag-menu-list {\n cursor: default;\n padding: var(--ag-grid-size) 0;\n }\n\n .ag-menu-separator {\n height: calc(var(--ag-grid-size) * 2 + 1px);\n }\n\n .ag-menu-separator-part::after {\n content: '';\n display: block;\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-menu-option-active,\n .ag-compact-menu-option-active {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-menu-option-part,\n .ag-compact-menu-option-part {\n line-height: var(--ag-icon-size);\n padding: calc(var(--ag-grid-size) + 2px) 0;\n }\n\n .ag-menu-option-disabled,\n .ag-compact-menu-option-disabled {\n opacity: 0.5;\n }\n\n .ag-menu-option-icon,\n .ag-compact-menu-option-icon {\n width: var(--ag-icon-size);\n }\n .ag-ltr .ag-menu-option-icon,\n .ag-ltr .ag-compact-menu-option-icon {\n padding-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-menu-option-icon,\n .ag-rtl .ag-compact-menu-option-icon {\n padding-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-menu-option-text,\n .ag-compact-menu-option-text {\n padding-left: calc(var(--ag-grid-size) * 2);\n padding-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-ltr .ag-menu-option-shortcut,\n .ag-ltr .ag-compact-menu-option-shortcut {\n padding-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-menu-option-shortcut,\n .ag-rtl .ag-compact-menu-option-shortcut {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-menu-option-popup-pointer,\n .ag-compact-menu-option-popup-pointer {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-tabs {\n min-width: var(--ag-tab-min-width);\n }\n\n .ag-tabs-header {\n width: 100%;\n display: flex;\n }\n\n .ag-tab {\n border-bottom: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-bottom var(--ag-selected-tab-underline-transition-speed);\n display: flex;\n flex: none;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n }\n\n .ag-keyboard-focus .ag-tab:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-tab:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-tab-selected {\n border-bottom-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-menu-header {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-filter-separator {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-menu:not(.ag-tabs) .ag-filter-select {\n min-width: calc(\n var(--ag-menu-min-width) - 2 * var(--ag-widget-container-horizontal-padding) - 2px\n );\n }\n\n .ag-tabs .ag-filter-select {\n min-width: calc(\n var(--ag-tab-min-width) - 2 * var(--ag-widget-container-horizontal-padding) - 2px\n );\n }\n\n .ag-filter-select .ag-picker-field-wrapper {\n width: 0;\n }\n\n .ag-filter-condition-operator {\n height: 17px;\n }\n\n .ag-ltr .ag-filter-condition-operator-or {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-filter-condition-operator-or {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-set-filter-select-all {\n padding-top: var(--ag-widget-container-vertical-padding);\n }\n\n .ag-set-filter-list,\n .ag-filter-no-matches {\n height: calc(var(--ag-list-item-height) * 6);\n }\n\n .ag-set-filter-tree-list {\n height: calc(var(--ag-list-item-height) * 10);\n }\n\n .ag-set-filter-filter {\n margin-top: var(--ag-widget-container-vertical-padding);\n margin-left: var(--ag-widget-container-horizontal-padding);\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-filter-to {\n margin-top: var(--ag-widget-vertical-spacing);\n }\n\n .ag-mini-filter {\n margin: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-set-filter-item {\n margin: 0px var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-ltr .ag-set-filter-add-group-indent {\n margin-left: calc(\n var(--ag-widget-container-horizontal-padding) + var(--ag-icon-size) + var(--ag-grid-size) * 2\n );\n }\n .ag-rtl .ag-set-filter-add-group-indent {\n margin-right: calc(\n var(--ag-widget-container-horizontal-padding) + var(--ag-icon-size) + var(--ag-grid-size) * 2\n );\n }\n\n .ag-ltr .ag-set-filter-indent-1 {\n padding-left: calc(1 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-1 {\n padding-right: calc(1 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-2 {\n padding-left: calc(2 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-2 {\n padding-right: calc(2 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-3 {\n padding-left: calc(3 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-3 {\n padding-right: calc(3 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-4 {\n padding-left: calc(4 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-4 {\n padding-right: calc(4 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-5 {\n padding-left: calc(5 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-5 {\n padding-right: calc(5 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-6 {\n padding-left: calc(6 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-6 {\n padding-right: calc(6 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-7 {\n padding-left: calc(7 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-7 {\n padding-right: calc(7 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-8 {\n padding-left: calc(8 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-8 {\n padding-right: calc(8 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-9 {\n padding-left: calc(9 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-9 {\n padding-right: calc(9 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-group-icons {\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n .ag-rtl .ag-set-filter-group-icons {\n margin-left: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-filter-apply-panel {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-filter-apply-panel-button {\n line-height: 1.5;\n }\n .ag-ltr .ag-filter-apply-panel-button {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-filter-apply-panel-button {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-simple-filter-body-wrapper {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n padding-bottom: calc(\n var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing)\n );\n }\n .ag-simple-filter-body-wrapper > * {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-filter-no-matches {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-multi-filter-menu-item {\n margin: var(--ag-grid-size) 0;\n }\n\n .ag-multi-filter-group-title-bar {\n padding: calc(var(--ag-grid-size) * 2) var(--ag-grid-size);\n background-color: transparent;\n }\n\n .ag-keyboard-focus .ag-multi-filter-group-title-bar:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-multi-filter-group-title-bar:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-side-bar {\n position: relative;\n }\n\n .ag-tool-panel-wrapper {\n width: var(--ag-side-bar-panel-width);\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-side-buttons {\n padding-top: calc(var(--ag-grid-size) * 4);\n width: calc(var(--ag-icon-size) + 4px);\n position: relative;\n color: var(--ag-foreground-color);\n overflow: hidden;\n }\n\n button.ag-side-button-button {\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n background: transparent;\n padding: calc(var(--ag-grid-size) * 2) 0 calc(var(--ag-grid-size) * 2) 0;\n width: 100%;\n margin: 0;\n min-height: calc(var(--ag-grid-size) * 18);\n background-position-y: center;\n background-position-x: center;\n background-repeat: no-repeat;\n border: none;\n border-top: var(--ag-borders-side-button) var(--ag-border-color);\n border-bottom: var(--ag-borders-side-button) var(--ag-border-color);\n }\n button.ag-side-button-button:focus {\n box-shadow: none;\n }\n\n .ag-keyboard-focus .ag-side-button-button:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-side-button-button:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-selected button.ag-side-button-button {\n background-color: var(--ag-side-button-selected-background-color);\n }\n\n .ag-side-button-icon-wrapper {\n margin-bottom: 3px;\n }\n\n .ag-ltr .ag-side-bar-left,\n .ag-rtl .ag-side-bar-right {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-side-bar-left .ag-tool-panel-wrapper,\n .ag-rtl .ag-side-bar-right .ag-tool-panel-wrapper {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-side-bar-left .ag-side-button-button,\n .ag-rtl .ag-side-bar-right .ag-side-button-button {\n border-right: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-right var(--ag-selected-tab-underline-transition-speed);\n }\n .ag-ltr .ag-side-bar-left .ag-selected .ag-side-button-button,\n .ag-rtl .ag-side-bar-right .ag-selected .ag-side-button-button {\n border-right-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-rtl .ag-side-bar-left,\n .ag-ltr .ag-side-bar-right {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-side-bar-left .ag-tool-panel-wrapper,\n .ag-ltr .ag-side-bar-right .ag-tool-panel-wrapper {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-side-bar-left .ag-side-button-button,\n .ag-ltr .ag-side-bar-right .ag-side-button-button {\n border-left: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-left var(--ag-selected-tab-underline-transition-speed);\n }\n .ag-rtl .ag-side-bar-left .ag-selected .ag-side-button-button,\n .ag-ltr .ag-side-bar-right .ag-selected .ag-side-button-button {\n border-left-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-filter-toolpanel-header {\n height: calc(var(--ag-grid-size) * 6);\n }\n\n .ag-ltr .ag-filter-toolpanel-header,\n .ag-ltr .ag-filter-toolpanel-search {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-header,\n .ag-rtl .ag-filter-toolpanel-search {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-keyboard-focus .ag-filter-toolpanel-header:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-filter-toolpanel-header:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n content: var(--ag-icon-font-code-filter, '\\\\f114');\n position: absolute;\n }\n .ag-ltr .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-0-header {\n height: calc(var(--ag-grid-size) * 8);\n }\n\n .ag-filter-toolpanel-group-item {\n margin-top: calc(var(--ag-grid-size) * 0.5);\n margin-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n\n .ag-filter-toolpanel-search {\n height: var(--ag-header-height);\n }\n\n .ag-filter-toolpanel-search-input {\n flex-grow: 1;\n height: calc(var(--ag-grid-size) * 4);\n }\n .ag-ltr .ag-filter-toolpanel-search-input {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-search-input {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-0 {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-ltr .ag-filter-toolpanel-expand,\n .ag-ltr .ag-filter-toolpanel-group-title-bar-icon {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-expand,\n .ag-rtl .ag-filter-toolpanel-group-title-bar-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-1\n .ag-filter-toolpanel-group-level-1-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-1 .ag-filter-toolpanel-group-level-2-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 1 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-1 .ag-filter-toolpanel-group-level-2-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 1 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-2\n .ag-filter-toolpanel-group-level-2-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-2 .ag-filter-toolpanel-group-level-3-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 2 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-2 .ag-filter-toolpanel-group-level-3-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 2 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-3\n .ag-filter-toolpanel-group-level-3-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-3 .ag-filter-toolpanel-group-level-4-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 3 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-3 .ag-filter-toolpanel-group-level-4-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 3 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-4\n .ag-filter-toolpanel-group-level-4-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-4 .ag-filter-toolpanel-group-level-5-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 4 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-4 .ag-filter-toolpanel-group-level-5-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 4 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-5\n .ag-filter-toolpanel-group-level-5-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-5 .ag-filter-toolpanel-group-level-6-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 5 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-5 .ag-filter-toolpanel-group-level-6-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 5 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-6\n .ag-filter-toolpanel-group-level-6-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-6 .ag-filter-toolpanel-group-level-7-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 6 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-6 .ag-filter-toolpanel-group-level-7-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 6 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-7\n .ag-filter-toolpanel-group-level-7-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-7 .ag-filter-toolpanel-group-level-8-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 7 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-7 .ag-filter-toolpanel-group-level-8-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 7 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-8\n .ag-filter-toolpanel-group-level-8-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-8 .ag-filter-toolpanel-group-level-9-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 8 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-8 .ag-filter-toolpanel-group-level-9-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 8 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-9\n .ag-filter-toolpanel-group-level-9-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-9 .ag-filter-toolpanel-group-level-10-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 9 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-9 .ag-filter-toolpanel-group-level-10-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 9 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-10\n .ag-filter-toolpanel-group-level-10-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-10 .ag-filter-toolpanel-group-level-11-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 10 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-10 .ag-filter-toolpanel-group-level-11-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 10 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-instance-header.ag-filter-toolpanel-group-level-1-header {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-instance-filter {\n border-bottom: var(--ag-borders) var(--ag-border-color);\n border-top: var(--ag-borders) var(--ag-border-color);\n margin-top: var(--ag-grid-size);\n }\n\n .ag-ltr .ag-filter-toolpanel-instance-header-icon {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-instance-header-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-set-filter-group-icons {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-pivot-mode-panel {\n min-height: var(--ag-header-height);\n height: var(--ag-header-height);\n display: flex;\n }\n\n .ag-pivot-mode-select {\n display: flex;\n align-items: center;\n }\n .ag-ltr .ag-pivot-mode-select {\n margin-left: var(--ag-widget-container-horizontal-padding);\n }\n .ag-rtl .ag-pivot-mode-select {\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-keyboard-focus .ag-column-select-header:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-header:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-select-header {\n height: var(--ag-header-height);\n align-items: center;\n padding: 0 var(--ag-widget-container-horizontal-padding);\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-column-panel-column-select {\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-column-group-icons,\n .ag-column-select-header-icon {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-select-list .ag-list-item-hovered::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-column-select-list .ag-item-highlight-top::after {\n top: 0;\n }\n .ag-column-select-list .ag-item-highlight-bottom::after {\n bottom: 0;\n }\n\n .ag-header {\n background-color: var(--ag-header-background-color);\n border-bottom: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-header-row {\n color: var(--ag-header-foreground-color);\n height: var(--ag-header-height);\n }\n\n .ag-pinned-right-header {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-pinned-left-header {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-ltr .ag-header-cell:not(.ag-right-aligned-header) .ag-header-label-icon {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-header-cell:not(.ag-right-aligned-header) .ag-header-label-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-ltr .ag-header-cell.ag-right-aligned-header .ag-header-label-icon {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-header-cell.ag-right-aligned-header .ag-header-label-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-header-cell,\n .ag-header-group-cell {\n padding-left: var(--ag-cell-horizontal-padding);\n padding-right: var(--ag-cell-horizontal-padding);\n }\n .ag-header-cell.ag-header-cell-moving,\n .ag-header-group-cell.ag-header-cell-moving {\n background-color: var(--ag-header-cell-moving-background-color);\n }\n\n .ag-keyboard-focus .ag-header-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-header-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n .ag-keyboard-focus .ag-header-group-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-header-group-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-header-icon {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-header-expand-icon {\n cursor: pointer;\n }\n .ag-ltr .ag-header-expand-icon {\n padding-left: 4px;\n }\n .ag-rtl .ag-header-expand-icon {\n padding-right: 4px;\n }\n\n .ag-header-row:not(:first-child) .ag-header-cell,\n .ag-header-row:not(:first-child) .ag-header-group-cell.ag-header-group-cell-with-group {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-header-group-cell:not(.ag-column-resizing)\n + .ag-header-group-cell:not(.ag-column-hover):not(.ag-header-cell-moving):hover,\n .ag-header-group-cell:not(.ag-column-resizing)\n + .ag-header-group-cell:not(.ag-column-hover).ag-column-resizing,\n .ag-header-cell:not(.ag-column-resizing)\n + .ag-header-cell:not(.ag-column-hover):not(.ag-header-cell-moving):hover,\n .ag-header-cell:not(.ag-column-resizing)\n + .ag-header-cell:not(.ag-column-hover).ag-column-resizing,\n .ag-header-group-cell:first-of-type:not(.ag-header-cell-moving):hover,\n .ag-header-group-cell:first-of-type.ag-column-resizing,\n .ag-header-cell:not(.ag-column-hover):first-of-type:not(.ag-header-cell-moving):hover,\n .ag-header-cell:not(.ag-column-hover):first-of-type.ag-column-resizing {\n background-color: var(--ag-header-cell-hover-background-color);\n }\n\n .ag-header-cell::after,\n .ag-header-group-cell::after {\n content: '';\n position: absolute;\n z-index: 1;\n display: var(--ag-header-column-separator-display);\n width: var(--ag-header-column-separator-width);\n height: var(--ag-header-column-separator-height);\n top: calc(50% - var(--ag-header-column-separator-height) * 0.5);\n background-color: var(--ag-header-column-separator-color);\n }\n .ag-ltr .ag-header-cell::after,\n .ag-ltr .ag-header-group-cell::after {\n right: 0;\n }\n .ag-rtl .ag-header-cell::after,\n .ag-rtl .ag-header-group-cell::after {\n left: 0;\n }\n\n .ag-header-cell-resize {\n display: flex;\n align-items: center;\n }\n\n .ag-header-cell-resize::after {\n content: '';\n position: absolute;\n z-index: 1;\n display: var(--ag-header-column-resize-handle-display);\n width: var(--ag-header-column-resize-handle-width);\n height: var(--ag-header-column-resize-handle-height);\n top: calc(50% - var(--ag-header-column-resize-handle-height) * 0.5);\n background-color: var(--ag-header-column-resize-handle-color);\n }\n\n .ag-ltr .ag-header-viewport .ag-header-cell-resize::after {\n left: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n .ag-rtl .ag-header-viewport .ag-header-cell-resize::after {\n right: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n\n .ag-pinned-left-header .ag-header-cell-resize::after {\n left: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n\n .ag-pinned-right-header .ag-header-cell-resize::after {\n left: 50%;\n }\n\n .ag-ltr .ag-header-select-all {\n margin-right: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-header-select-all {\n margin-left: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-floating-filter-button {\n margin-left: calc(var(--ag-grid-size) * 3);\n }\n .ag-rtl .ag-floating-filter-button {\n margin-right: calc(var(--ag-grid-size) * 3);\n }\n\n .ag-floating-filter-button-button {\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n appearance: none;\n background: transparent;\n border: none;\n height: var(--ag-icon-size);\n padding: 0;\n width: var(--ag-icon-size);\n }\n\n .ag-filter-loading {\n background-color: var(--ag-control-panel-background-color);\n height: 100%;\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n position: absolute;\n width: 100%;\n z-index: 1;\n }\n\n .ag-paging-panel {\n border-top: 1px solid;\n border-top-color: var(--ag-border-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-header-height);\n }\n .ag-paging-panel > * {\n margin: 0 var(--ag-cell-horizontal-padding);\n }\n\n .ag-paging-button {\n cursor: pointer;\n }\n\n .ag-paging-button.ag-disabled {\n cursor: default;\n color: var(--ag-disabled-foreground-color);\n }\n\n .ag-keyboard-focus .ag-paging-button:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-paging-button:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 0px;\n left: 0px;\n display: block;\n width: calc(100% - 0px);\n height: calc(100% - 0px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-paging-button,\n .ag-paging-description {\n margin: 0 var(--ag-grid-size);\n }\n\n .ag-status-bar {\n border-top: var(--ag-borders) var(--ag-border-color);\n color: var(--ag-disabled-foreground-color);\n padding-right: calc(var(--ag-grid-size) * 4);\n padding-left: calc(var(--ag-grid-size) * 4);\n line-height: 1.5;\n }\n\n .ag-status-name-value-value {\n color: var(--ag-foreground-color);\n }\n\n .ag-status-bar-center {\n text-align: center;\n }\n\n .ag-status-name-value {\n margin-left: var(--ag-grid-size);\n margin-right: var(--ag-grid-size);\n padding-top: calc(var(--ag-grid-size) * 2);\n padding-bottom: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-column-drop-cell {\n background: var(--ag-chip-background-color);\n border-radius: calc(var(--ag-grid-size) * 4);\n height: calc(var(--ag-grid-size) * 4);\n padding: 0 calc(var(--ag-grid-size) * 0.5);\n border: 1px solid transparent;\n }\n\n .ag-keyboard-focus .ag-column-drop-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-drop-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 2px;\n left: 2px;\n display: block;\n width: calc(100% - 4px);\n height: calc(100% - 4px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-drop-cell-text {\n margin: 0 var(--ag-grid-size);\n }\n\n .ag-column-drop-cell-button {\n min-width: calc(var(--ag-grid-size) * 4);\n margin: 0 calc(var(--ag-grid-size) * 0.5);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-drop-cell-drag-handle {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-column-drop-cell-ghost {\n opacity: 0.5;\n }\n\n .ag-column-drop-horizontal {\n background-color: var(--ag-control-panel-background-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-row-height);\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-column-drop-horizontal {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-column-drop-horizontal {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-column-drop-horizontal-half-width:not(:last-child) {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-column-drop-horizontal-half-width:not(:last-child) {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-column-drop-horizontal-cell-separator {\n margin: 0 var(--ag-grid-size);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-drop-horizontal-empty-message {\n color: var(--ag-disabled-foreground-color);\n }\n\n .ag-ltr .ag-column-drop-horizontal-icon {\n margin-right: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-column-drop-horizontal-icon {\n margin-left: var(--ag-cell-horizontal-padding);\n }\n\n .ag-column-drop-vertical-list {\n padding-bottom: var(--ag-grid-size);\n padding-right: var(--ag-grid-size);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical-cell {\n margin-top: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical {\n min-height: 50px;\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n .ag-column-drop-vertical.ag-last-column-drop {\n border-bottom: none;\n }\n\n .ag-column-drop-vertical-icon {\n margin-left: var(--ag-grid-size);\n margin-right: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical-empty-message {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n color: var(--ag-disabled-foreground-color);\n margin-top: var(--ag-grid-size);\n }\n\n .ag-select-agg-func-popup {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n background: var(--ag-background-color);\n height: calc(var(--ag-grid-size) * 5 * 3.5);\n padding: 0;\n }\n\n .ag-select-agg-func-virtual-list-item {\n cursor: default;\n padding-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-select-agg-func-virtual-list-item:hover {\n background-color: var(--ag-selected-row-background-color);\n }\n\n .ag-keyboard-focus .ag-select-agg-func-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-select-agg-func-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 1px;\n left: 1px;\n display: block;\n width: calc(100% - 2px);\n height: calc(100% - 2px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-sort-indicator-container {\n display: flex;\n }\n\n .ag-ltr .ag-sort-indicator-icon {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-sort-indicator-icon {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-chart {\n position: relative;\n display: flex;\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .ag-chart-components-wrapper {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .ag-chart-title-edit {\n position: absolute;\n display: none;\n top: 0;\n left: 0;\n text-align: center;\n }\n\n .ag-chart-title-edit.currently-editing {\n display: inline-block;\n }\n\n .ag-chart-canvas-wrapper {\n position: relative;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .ag-charts-canvas {\n display: block;\n }\n\n .ag-chart-menu {\n position: absolute;\n top: 10px;\n width: 24px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .ag-ltr .ag-chart-menu {\n right: 20px;\n }\n .ag-rtl .ag-chart-menu {\n left: 20px;\n }\n\n .ag-chart-docked-container {\n position: relative;\n width: 0;\n min-width: 0;\n transition: min-width 0.4s;\n }\n\n .ag-chart-menu-hidden ~ .ag-chart-docked-container {\n max-width: 0;\n overflow: hidden;\n }\n\n .ag-chart-tabbed-menu {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .ag-chart-tabbed-menu-header {\n flex: none;\n user-select: none;\n cursor: default;\n }\n\n .ag-chart-tabbed-menu-body {\n display: flex;\n flex: 1 1 auto;\n align-items: stretch;\n overflow: hidden;\n }\n\n .ag-chart-tab {\n width: 100%;\n overflow: hidden;\n overflow-y: auto;\n }\n\n .ag-chart-settings {\n overflow-x: hidden;\n }\n\n .ag-chart-settings-wrapper {\n position: relative;\n flex-direction: column;\n width: 100%;\n height: 100%;\n display: flex;\n overflow: hidden;\n }\n\n .ag-chart-settings-nav-bar {\n display: flex;\n align-items: center;\n width: 100%;\n height: 30px;\n padding: 0 10px;\n user-select: none;\n }\n\n .ag-chart-settings-card-selector {\n display: flex;\n align-items: center;\n justify-content: space-around;\n flex: 1 1 auto;\n height: 100%;\n padding: 0 10px;\n }\n\n .ag-chart-settings-card-item {\n cursor: pointer;\n width: 10px;\n height: 10px;\n background-color: #000;\n position: relative;\n }\n .ag-chart-settings-card-item.ag-not-selected {\n opacity: 0.2;\n }\n .ag-chart-settings-card-item::before {\n content: ' ';\n display: block;\n position: absolute;\n background-color: transparent;\n left: 50%;\n top: 50%;\n margin-left: -10px;\n margin-top: -10px;\n width: 20px;\n height: 20px;\n }\n\n .ag-chart-settings-prev,\n .ag-chart-settings-next {\n position: relative;\n flex: none;\n }\n\n .ag-chart-settings-prev-button,\n .ag-chart-settings-next-button {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n }\n\n .ag-chart-settings-mini-charts-container {\n position: relative;\n flex: 1 1 auto;\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n .ag-chart-settings-mini-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 100%;\n overflow: hidden;\n }\n .ag-chart-settings-mini-wrapper.ag-animating {\n transition: left 0.3s;\n transition-timing-function: ease-in-out;\n }\n\n .ag-chart-mini-thumbnail {\n cursor: pointer;\n }\n\n .ag-chart-mini-thumbnail-canvas {\n display: block;\n }\n\n .ag-chart-data-wrapper,\n .ag-chart-format-wrapper {\n display: flex;\n flex-direction: column;\n position: relative;\n user-select: none;\n }\n\n .ag-chart-data-wrapper {\n height: 100%;\n overflow-y: auto;\n }\n\n .ag-chart-data-section,\n .ag-chart-format-section {\n display: flex;\n margin: 0;\n }\n\n .ag-chart-empty-text {\n display: flex;\n top: 0;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n }\n\n .ag-chart .ag-chart-menu {\n display: none;\n }\n\n .ag-chart-menu-hidden:hover .ag-chart-menu {\n display: block;\n }\n\n .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n display: flex;\n flex-direction: row;\n overflow: auto;\n top: 5px;\n gap: calc(var(--ag-grid-size) * 3 - 8px);\n width: auto;\n }\n .ag-ltr .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n right: calc(var(--ag-cell-horizontal-padding) + var(--ag-grid-size) - 4px);\n justify-content: right;\n }\n .ag-rtl .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n left: calc(var(--ag-cell-horizontal-padding) + var(--ag-grid-size) - 4px);\n justify-content: left;\n }\n\n .ag-chart-menu-close {\n display: none;\n }\n\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n position: absolute;\n top: 50%;\n transition: transform 0.33s ease-in-out;\n padding: 0;\n display: block;\n cursor: pointer;\n border: none;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n right: 0px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n left: 0px;\n }\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close .ag-icon {\n padding: 14px 5px 14px 2px;\n }\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n content: '';\n position: absolute;\n top: -40px;\n bottom: -40px;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n right: 0px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n left: 0px;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n left: -10px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n right: -10px;\n }\n .ag-chart-tool-panel-button-enable .ag-icon-menu {\n display: none;\n }\n\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n transform: translate(3px, -50%);\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(0, -50%);\n }\n .ag-ltr .ag-chart-menu-visible .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(5px, -50%);\n }\n\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n transform: translate(-3px, -50%);\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(0, -50%);\n }\n .ag-rtl .ag-chart-menu-visible .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(-5px, -50%);\n }\n\n .ag-charts-font-size-color {\n display: flex;\n align-self: stretch;\n justify-content: space-between;\n }\n\n .ag-charts-data-group-item {\n position: relative;\n }\n\n .ag-chart-menu {\n border-radius: var(--ag-card-radius);\n background: var(--ag-background-color);\n }\n\n .ag-chart-menu-icon {\n opacity: 0.5;\n line-height: 24px;\n font-size: 24px;\n width: 24px;\n height: 24px;\n margin: 2px 0;\n cursor: pointer;\n border-radius: var(--ag-card-radius);\n color: var(--ag-secondary-foreground-color);\n }\n .ag-chart-menu-icon:hover {\n opacity: 1;\n }\n\n .ag-chart-mini-thumbnail {\n border: 1px solid var(--ag-secondary-border-color);\n border-radius: 5px;\n margin: 5px;\n }\n .ag-chart-mini-thumbnail:nth-last-child(3),\n .ag-chart-mini-thumbnail:nth-last-child(3) ~ .ag-chart-mini-thumbnail {\n margin-left: auto;\n margin-right: auto;\n }\n .ag-ltr .ag-chart-mini-thumbnail:first-child {\n margin-left: 0;\n }\n .ag-rtl .ag-chart-mini-thumbnail:first-child {\n margin-right: 0;\n }\n .ag-ltr .ag-chart-mini-thumbnail:last-child {\n margin-right: 0;\n }\n .ag-rtl .ag-chart-mini-thumbnail:last-child {\n margin-left: 0;\n }\n .ag-chart-mini-thumbnail.ag-selected {\n border-color: var(--ag-minichart-selected-chart-color);\n }\n\n .ag-chart-settings-card-item {\n background: var(--ag-foreground-color);\n width: 8px;\n height: 8px;\n border-radius: 4px;\n }\n .ag-chart-settings-card-item.ag-selected {\n background-color: var(--ag-minichart-selected-page-color);\n }\n\n .ag-chart-data-column-drag-handle {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-charts-settings-group-title-bar,\n .ag-charts-data-group-title-bar,\n .ag-charts-format-top-level-group-title-bar {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-charts-settings-group-container {\n padding: var(--ag-grid-size);\n }\n\n .ag-charts-data-group-container {\n padding: calc(var(--ag-widget-container-vertical-padding) * 0.5)\n var(--ag-widget-container-horizontal-padding);\n }\n .ag-charts-data-group-container\n .ag-charts-data-group-item:not(.ag-charts-format-sub-level-group) {\n height: var(--ag-list-item-height);\n }\n .ag-charts-data-group-container .ag-list-item-hovered::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-charts-data-group-container .ag-item-highlight-top::after {\n top: 0;\n }\n .ag-charts-data-group-container .ag-item-highlight-bottom::after {\n bottom: 0;\n }\n\n .ag-charts-format-top-level-group-container {\n margin-left: calc(var(--ag-grid-size) * 2);\n padding: var(--ag-grid-size);\n }\n\n .ag-charts-format-top-level-group-item {\n margin: var(--ag-grid-size) 0;\n }\n\n .ag-charts-format-sub-level-group-container {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n padding-bottom: calc(\n var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing)\n );\n }\n .ag-charts-format-sub-level-group-container > * {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-charts-group-container.ag-group-container-horizontal {\n padding: var(--ag-grid-size);\n }\n\n .ag-chart-data-section,\n .ag-chart-format-section {\n display: flex;\n margin: 0;\n }\n\n .ag-chart-menu-panel {\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-ltr .ag-chart-menu-panel {\n border-left: solid 1px var(--ag-border-color);\n }\n .ag-rtl .ag-chart-menu-panel {\n border-right: solid 1px var(--ag-border-color);\n }\n\n .ag-date-time-list-page-title-bar {\n display: flex;\n }\n\n .ag-date-time-list-page-title {\n flex-grow: 1;\n text-align: center;\n }\n\n .ag-date-time-list-page-column-labels-row,\n .ag-date-time-list-page-entries-row {\n display: flex;\n }\n\n .ag-date-time-list-page-column-label,\n .ag-date-time-list-page-entry {\n flex-basis: 0;\n flex-grow: 1;\n }\n\n .ag-date-time-list-page-entry {\n cursor: pointer;\n text-align: center;\n }\n\n .ag-date-time-list-page-column-label {\n text-align: center;\n }\n\n .ag-input-field-input {\n width: 100%;\n min-width: 0;\n }\n\n .ag-checkbox-input-wrapper {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-checkbox-background-color);\n border-radius: var(--ag-checkbox-border-radius);\n display: inline-block;\n vertical-align: middle;\n flex: none;\n }\n .ag-checkbox-input-wrapper input,\n .ag-checkbox-input-wrapper input {\n -webkit-appearance: none;\n opacity: 0;\n width: 100%;\n height: 100%;\n }\n .ag-checkbox-input-wrapper:focus-within,\n .ag-checkbox-input-wrapper:active {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-checkbox-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-checkbox-input-wrapper::after {\n content: var(--ag-icon-font-code-checkbox-unchecked, '\\\\f108');\n color: var(--ag-checkbox-unchecked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-checkbox-input-wrapper.ag-checked::after {\n content: var(--ag-icon-font-code-checkbox-checked, '\\\\f106');\n color: var(--ag-checkbox-checked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-checkbox-input-wrapper.ag-indeterminate::after {\n content: var(--ag-icon-font-code-checkbox-indeterminate, '\\\\f107');\n color: var(--ag-checkbox-indeterminate-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n\n .ag-toggle-button-input-wrapper {\n box-sizing: border-box;\n width: var(--ag-toggle-button-width);\n height: var(--ag-toggle-button-height);\n background-color: var(--ag-toggle-button-off-background-color);\n border-radius: calc(var(--ag-toggle-button-height) * 0.5);\n position: relative;\n flex: none;\n border: var(--ag-toggle-button-border-width) solid;\n border-color: var(--ag-toggle-button-off-border-color);\n }\n .ag-toggle-button-input-wrapper input {\n opacity: 0;\n height: 100%;\n width: 100%;\n }\n .ag-toggle-button-input-wrapper:focus-within {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-toggle-button-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-toggle-button-input-wrapper.ag-checked {\n background-color: var(--ag-toggle-button-on-background-color);\n border-color: var(--ag-toggle-button-on-border-color);\n }\n .ag-toggle-button-input-wrapper::before {\n content: ' ';\n position: absolute;\n top: calc(0px - var(--ag-toggle-button-border-width));\n left: calc(0px - var(--ag-toggle-button-border-width));\n display: block;\n box-sizing: border-box;\n height: var(--ag-toggle-button-height);\n width: var(--ag-toggle-button-height);\n background-color: var(--ag-toggle-button-switch-background-color);\n border-radius: 100%;\n transition: left 100ms;\n border: var(--ag-toggle-button-border-width) solid;\n border-color: var(--ag-toggle-button-switch-border-color);\n }\n .ag-toggle-button-input-wrapper.ag-checked::before {\n left: calc(100% - var(--ag-toggle-button-height));\n border-color: var(--ag-toggle-button-on-border-color);\n }\n\n .ag-radio-button-input-wrapper {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-checkbox-background-color);\n border-radius: var(--ag-checkbox-border-radius);\n display: inline-block;\n vertical-align: middle;\n flex: none;\n border-radius: var(--ag-icon-size);\n }\n .ag-radio-button-input-wrapper input,\n .ag-radio-button-input-wrapper input {\n -webkit-appearance: none;\n opacity: 0;\n width: 100%;\n height: 100%;\n }\n .ag-radio-button-input-wrapper:focus-within,\n .ag-radio-button-input-wrapper:active {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-radio-button-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-radio-button-input-wrapper::after {\n content: var(--ag-icon-font-code-radio-button-off, '\\\\f126');\n color: var(--ag-checkbox-unchecked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-radio-button-input-wrapper.ag-checked::after {\n content: var(--ag-icon-font-code-radio-button-on, '\\\\f127');\n color: var(--ag-checkbox-checked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n\n input[class^='ag-'][type='range'] {\n -webkit-appearance: none;\n width: 100%;\n height: 100%;\n background: none;\n overflow: visible;\n }\n input[class^='ag-'][type='range']::-webkit-slider-runnable-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n }\n input[class^='ag-'][type='range']::-moz-range-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n }\n input[class^='ag-'][type='range']::-ms-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n color: transparent;\n width: calc(100% - 2px);\n }\n input[class^='ag-'][type='range']::-webkit-slider-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n transform: translateY(calc(var(--ag-icon-size) * -0.5 + 1.5px));\n }\n input[class^='ag-'][type='range']::-ms-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n }\n input[class^='ag-'][type='range']::-moz-ag-range-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n }\n input[class^='ag-'][type='range']:focus {\n outline: none;\n }\n input[class^='ag-'][type='range']:focus::-webkit-slider-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:focus::-ms-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:focus::-moz-ag-range-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:active::-webkit-slider-runnable-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:active::-moz-ag-range-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:active::-ms-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:disabled {\n opacity: 0.5;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Alpine Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeAlpineNofontsCSS = css `\n .ag-theme-alpine,\n .ag-theme-alpine-dark {\n --ag-alpine-active-color: #2196f3;\n --ag-selected-row-background-color: rgba(33, 150, 243, 0.3);\n --ag-row-hover-color: rgba(33, 150, 243, 0.1);\n --ag-column-hover-color: rgba(33, 150, 243, 0.1);\n --ag-input-focus-border-color: rgba(33, 150, 243, 0.4);\n --ag-range-selection-background-color: rgba(33, 150, 243, 0.2);\n --ag-range-selection-background-color-2: rgba(33, 150, 243, 0.36);\n --ag-range-selection-background-color-3: rgba(33, 150, 243, 0.49);\n --ag-range-selection-background-color-4: rgba(33, 150, 243, 0.59);\n --ag-background-color: #fff;\n --ag-foreground-color: #181d1f;\n --ag-border-color: #babfc7;\n --ag-secondary-border-color: #dde2eb;\n --ag-header-background-color: #f8f8f8;\n --ag-tooltip-background-color: #f8f8f8;\n --ag-odd-row-background-color: #fcfcfc;\n --ag-control-panel-background-color: #f8f8f8;\n --ag-subheader-background-color: #fff;\n --ag-invalid-color: #e02525;\n --ag-checkbox-unchecked-color: #999;\n --ag-checkbox-background-color: var(--ag-background-color);\n --ag-checkbox-checked-color: var(--ag-alpine-active-color);\n --ag-range-selection-border-color: var(--ag-alpine-active-color);\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-input-border-color: var(--ag-border-color);\n --ag-input-border-color-invalid: var(--ag-invalid-color);\n --ag-input-focus-box-shadow: 0 0 2px 0.1rem var(--ag-input-focus-border-color);\n --ag-disabled-foreground-color: rgba(24, 29, 31, 0.5);\n --ag-chip-background-color: rgba(24, 29, 31, 0.07);\n --ag-input-disabled-border-color: rgba(186, 191, 199, 0.3);\n --ag-input-disabled-background-color: rgba(186, 191, 199, 0.15);\n --ag-borders: solid 1px;\n --ag-border-radius: 3px;\n --ag-borders-side-button: none;\n --ag-side-button-selected-background-color: transparent;\n --ag-header-column-resize-handle-display: block;\n --ag-header-column-resize-handle-width: 2px;\n --ag-header-column-resize-handle-height: 30%;\n --ag-grid-size: 6px;\n --ag-icon-size: 16px;\n --ag-row-height: calc(var(--ag-grid-size) * 7);\n --ag-header-height: calc(var(--ag-grid-size) * 8);\n --ag-list-item-height: calc(var(--ag-grid-size) * 4);\n --ag-column-select-indent-size: var(--ag-icon-size);\n --ag-set-filter-indent-size: var(--ag-icon-size);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-cell-widget-spacing: calc(var(--ag-grid-size) * 2);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.5);\n --ag-toggle-button-height: 18px;\n --ag-toggle-button-width: 28px;\n --ag-font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,\n 'Helvetica Neue', sans-serif;\n --ag-font-size: 13px;\n --ag-icon-font-family: agGridAlpine;\n --ag-selected-tab-underline-color: var(--ag-alpine-active-color);\n --ag-selected-tab-underline-width: 2px;\n --ag-selected-tab-underline-transition-speed: 0.3s;\n --ag-tab-min-width: 240px;\n --ag-card-shadow: 0 1px 4px 1px rgba(186, 191, 199, 0.4);\n --ag-popup-shadow: var(--ag-card-shadow);\n --ag-side-bar-panel-width: 250px;\n }\n\n .ag-theme-alpine-dark {\n --ag-background-color: #181d1f;\n --ag-foreground-color: #fff;\n --ag-border-color: #68686e;\n --ag-secondary-border-color: rgba(88, 86, 82, 0.5);\n --ag-modal-overlay-background-color: rgba(24, 29, 31, 0.66);\n --ag-header-background-color: #222628;\n --ag-tooltip-background-color: #222628;\n --ag-odd-row-background-color: #222628;\n --ag-control-panel-background-color: #222628;\n --ag-subheader-background-color: #000;\n --ag-input-disabled-background-color: #282c2f;\n --ag-input-focus-box-shadow:\n 0 0 2px 0.5px rgba(255, 255, 255, 0.5), 0 0 4px 3px var(--ag-input-focus-border-color);\n --ag-card-shadow: 0 1px 20px 1px black;\n --ag-disabled-foreground-color: rgba(255, 255, 255, 0.5);\n --ag-chip-background-color: rgba(255, 255, 255, 0.07);\n --ag-input-disabled-border-color: rgba(104, 104, 110, 0.3);\n --ag-input-disabled-background-color: rgba(104, 104, 110, 0.07);\n }\n\n .ag-theme-alpine .ag-filter-toolpanel-header,\n .ag-theme-alpine .ag-filter-toolpanel-search,\n .ag-theme-alpine .ag-status-bar,\n .ag-theme-alpine .ag-header-row,\n .ag-theme-alpine .ag-panel-title-bar-title,\n .ag-theme-alpine .ag-multi-filter-group-title-bar,\n .ag-theme-alpine-dark .ag-filter-toolpanel-header,\n .ag-theme-alpine-dark .ag-filter-toolpanel-search,\n .ag-theme-alpine-dark .ag-status-bar,\n .ag-theme-alpine-dark .ag-header-row,\n .ag-theme-alpine-dark .ag-panel-title-bar-title,\n .ag-theme-alpine-dark .ag-multi-filter-group-title-bar {\n font-weight: 700;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-alpine .ag-row,\n .ag-theme-alpine-dark .ag-row {\n font-size: calc(var(--ag-font-size) + 1px);\n }\n .ag-theme-alpine input[class^='ag-']:not([type]),\n .ag-theme-alpine input[class^='ag-'][type='text'],\n .ag-theme-alpine input[class^='ag-'][type='number'],\n .ag-theme-alpine input[class^='ag-'][type='tel'],\n .ag-theme-alpine input[class^='ag-'][type='date'],\n .ag-theme-alpine input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine textarea[class^='ag-'],\n .ag-theme-alpine-dark input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark textarea[class^='ag-'] {\n min-height: calc(var(--ag-grid-size) * 4);\n border-radius: var(--ag-border-radius);\n }\n .ag-theme-alpine .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine .ag-ltr textarea[class^='ag-'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark .ag-ltr textarea[class^='ag-'] {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine .ag-rtl textarea[class^='ag-'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark .ag-rtl textarea[class^='ag-'] {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-tab,\n .ag-theme-alpine-dark .ag-tab {\n padding: calc(var(--ag-grid-size) * 1.5);\n transition: color 0.4s;\n flex: 1 1 auto;\n }\n .ag-theme-alpine .ag-tab-selected,\n .ag-theme-alpine-dark .ag-tab-selected {\n color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-menu,\n .ag-theme-alpine-dark .ag-menu {\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-theme-alpine .ag-menu-header,\n .ag-theme-alpine-dark .ag-menu-header {\n background-color: var(--ag-control-panel-background-color);\n padding-top: 1px;\n }\n .ag-theme-alpine .ag-tabs-header,\n .ag-theme-alpine-dark .ag-tabs-header {\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n .ag-theme-alpine .ag-charts-settings-group-title-bar,\n .ag-theme-alpine .ag-charts-data-group-title-bar,\n .ag-theme-alpine .ag-charts-format-top-level-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-settings-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-data-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-format-top-level-group-title-bar {\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n line-height: calc(var(--ag-icon-size) + var(--ag-grid-size) - 2px);\n }\n .ag-theme-alpine .ag-chart-mini-thumbnail,\n .ag-theme-alpine-dark .ag-chart-mini-thumbnail {\n background-color: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-chart-settings-nav-bar,\n .ag-theme-alpine-dark .ag-chart-settings-nav-bar {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n .ag-theme-alpine .ag-ltr .ag-group-title-bar-icon,\n .ag-theme-alpine-dark .ag-ltr .ag-group-title-bar-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-group-title-bar-icon,\n .ag-theme-alpine-dark .ag-rtl .ag-group-title-bar-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-charts-format-top-level-group-toolbar {\n margin-top: var(--ag-grid-size);\n }\n .ag-theme-alpine .ag-ltr .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-ltr .ag-charts-format-top-level-group-toolbar {\n padding-left: calc(var(--ag-icon-size) * 0.5 + var(--ag-grid-size) * 2);\n }\n\n .ag-theme-alpine .ag-rtl .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-rtl .ag-charts-format-top-level-group-toolbar {\n padding-right: calc(var(--ag-icon-size) * 0.5 + var(--ag-grid-size) * 2);\n }\n\n .ag-theme-alpine .ag-charts-format-sub-level-group,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group {\n border-left: dashed 1px;\n border-left-color: var(--ag-border-color);\n padding-left: var(--ag-grid-size);\n margin-bottom: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-title-bar {\n padding-top: 0;\n padding-bottom: 0;\n background: none;\n font-weight: 700;\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-container,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-container {\n padding-bottom: 0;\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-item:last-child,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-item:last-child {\n margin-bottom: 0;\n }\n .ag-theme-alpine.ag-dnd-ghost,\n .ag-theme-alpine-dark.ag-dnd-ghost {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 700;\n }\n .ag-theme-alpine .ag-side-buttons,\n .ag-theme-alpine-dark .ag-side-buttons {\n width: calc(var(--ag-grid-size) * 5);\n }\n .ag-theme-alpine .ag-standard-button,\n .ag-theme-alpine-dark .ag-standard-button {\n appearance: none;\n -webkit-appearance: none;\n border-radius: var(--ag-border-radius);\n border: 1px solid;\n border-color: var(--ag-alpine-active-color);\n color: var(--ag-alpine-active-color);\n background-color: var(--ag-background-color);\n font-weight: 600;\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-standard-button:hover,\n .ag-theme-alpine-dark .ag-standard-button:hover {\n border-color: var(--ag-alpine-active-color);\n background-color: var(--ag-row-hover-color);\n }\n .ag-theme-alpine .ag-standard-button:active,\n .ag-theme-alpine-dark .ag-standard-button:active {\n border-color: var(--ag-alpine-active-color);\n background-color: var(--ag-alpine-active-color);\n color: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-standard-button:disabled,\n .ag-theme-alpine-dark .ag-standard-button:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n .ag-theme-alpine .ag-column-drop-vertical,\n .ag-theme-alpine-dark .ag-column-drop-vertical {\n min-height: 75px;\n }\n .ag-theme-alpine .ag-column-drop-vertical-title-bar,\n .ag-theme-alpine-dark .ag-column-drop-vertical-title-bar {\n padding: calc(var(--ag-grid-size) * 2);\n padding-bottom: 0px;\n }\n .ag-theme-alpine .ag-column-drop-vertical-empty-message,\n .ag-theme-alpine-dark .ag-column-drop-vertical-empty-message {\n display: flex;\n align-items: center;\n border: dashed 1px;\n border-color: var(--ag-border-color);\n margin: calc(var(--ag-grid-size) * 2);\n padding: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-column-drop-empty-message,\n .ag-theme-alpine-dark .ag-column-drop-empty-message {\n color: var(--ag-foreground-color);\n opacity: 0.75;\n }\n .ag-theme-alpine .ag-status-bar,\n .ag-theme-alpine-dark .ag-status-bar {\n font-weight: normal;\n }\n .ag-theme-alpine .ag-status-name-value-value,\n .ag-theme-alpine-dark .ag-status-name-value-value {\n font-weight: 700;\n }\n .ag-theme-alpine .ag-paging-number,\n .ag-theme-alpine .ag-paging-row-summary-panel-number,\n .ag-theme-alpine-dark .ag-paging-number,\n .ag-theme-alpine-dark .ag-paging-row-summary-panel-number {\n font-weight: 700;\n }\n .ag-theme-alpine .ag-column-drop-cell-button,\n .ag-theme-alpine-dark .ag-column-drop-cell-button {\n opacity: 0.5;\n }\n .ag-theme-alpine .ag-column-drop-cell-button:hover,\n .ag-theme-alpine-dark .ag-column-drop-cell-button:hover {\n opacity: 0.75;\n }\n .ag-theme-alpine .ag-header-cell-menu-button:hover,\n .ag-theme-alpine .ag-side-button-button:hover,\n .ag-theme-alpine .ag-tab:hover,\n .ag-theme-alpine .ag-panel-title-bar-button:hover,\n .ag-theme-alpine .ag-header-expand-icon:hover,\n .ag-theme-alpine .ag-column-group-icons:hover,\n .ag-theme-alpine .ag-set-filter-group-icons:hover,\n .ag-theme-alpine .ag-group-expanded .ag-icon:hover,\n .ag-theme-alpine .ag-group-contracted .ag-icon:hover,\n .ag-theme-alpine .ag-chart-settings-prev:hover,\n .ag-theme-alpine .ag-chart-settings-next:hover,\n .ag-theme-alpine .ag-group-title-bar-icon:hover,\n .ag-theme-alpine .ag-column-select-header-icon:hover,\n .ag-theme-alpine .ag-floating-filter-button-button:hover,\n .ag-theme-alpine .ag-filter-toolpanel-expand:hover,\n .ag-theme-alpine .ag-chart-menu-icon:hover,\n .ag-theme-alpine .ag-chart-menu-close:hover,\n .ag-theme-alpine-dark .ag-header-cell-menu-button:hover,\n .ag-theme-alpine-dark .ag-side-button-button:hover,\n .ag-theme-alpine-dark .ag-tab:hover,\n .ag-theme-alpine-dark .ag-panel-title-bar-button:hover,\n .ag-theme-alpine-dark .ag-header-expand-icon:hover,\n .ag-theme-alpine-dark .ag-column-group-icons:hover,\n .ag-theme-alpine-dark .ag-set-filter-group-icons:hover,\n .ag-theme-alpine-dark .ag-group-expanded .ag-icon:hover,\n .ag-theme-alpine-dark .ag-group-contracted .ag-icon:hover,\n .ag-theme-alpine-dark .ag-chart-settings-prev:hover,\n .ag-theme-alpine-dark .ag-chart-settings-next:hover,\n .ag-theme-alpine-dark .ag-group-title-bar-icon:hover,\n .ag-theme-alpine-dark .ag-column-select-header-icon:hover,\n .ag-theme-alpine-dark .ag-floating-filter-button-button:hover,\n .ag-theme-alpine-dark .ag-filter-toolpanel-expand:hover,\n .ag-theme-alpine-dark .ag-chart-menu-icon:hover,\n .ag-theme-alpine-dark .ag-chart-menu-close:hover {\n color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-chart-menu-close,\n .ag-theme-alpine-dark .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-chart-menu-close:hover .ag-icon,\n .ag-theme-alpine-dark .ag-chart-menu-close:hover .ag-icon {\n border-color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-chart-menu-close .ag-icon,\n .ag-theme-alpine-dark .ag-chart-menu-close .ag-icon {\n background: var(--ag-header-background-color);\n border: 1px solid var(--ag-border-color);\n border-right: none;\n }\n .ag-theme-alpine .ag-chart-settings-card-item.ag-not-selected:hover,\n .ag-theme-alpine-dark .ag-chart-settings-card-item.ag-not-selected:hover {\n opacity: 0.35;\n }\n .ag-theme-alpine .ag-ltr .ag-panel-title-bar-button,\n .ag-theme-alpine-dark .ag-ltr .ag-panel-title-bar-button {\n margin-left: calc(var(--ag-grid-size) * 2);\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-panel-title-bar-button,\n .ag-theme-alpine-dark .ag-rtl .ag-panel-title-bar-button {\n margin-right: calc(var(--ag-grid-size) * 2);\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-ltr .ag-filter-toolpanel-group-container,\n .ag-theme-alpine-dark .ag-ltr .ag-filter-toolpanel-group-container {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-filter-toolpanel-group-container,\n .ag-theme-alpine-dark .ag-rtl .ag-filter-toolpanel-group-container {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-filter-toolpanel-instance-filter {\n border: none;\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-theme-alpine .ag-ltr .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-ltr .ag-filter-toolpanel-instance-filter {\n border-left: dashed 1px;\n border-left-color: var(--ag-border-color);\n margin-left: calc(var(--ag-icon-size) * 0.5);\n }\n\n .ag-theme-alpine .ag-rtl .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-rtl .ag-filter-toolpanel-instance-filter {\n border-right: dashed 1px;\n border-right-color: var(--ag-border-color);\n margin-right: calc(var(--ag-icon-size) * 0.5);\n }\n\n .ag-theme-alpine .ag-set-filter-list,\n .ag-theme-alpine-dark .ag-set-filter-list {\n padding-top: calc(var(--ag-grid-size) * 0.5);\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-alpine .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-alpine .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-alpine .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-alpine .ag-layout-print .ag-center-cols-container,\n .ag-theme-alpine-dark .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-alpine-dark .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-alpine-dark .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-alpine-dark .ag-layout-print .ag-center-cols-container {\n min-height: 150px;\n }\n .ag-theme-alpine .ag-overlay-no-rows-wrapper.ag-layout-auto-height,\n .ag-theme-alpine-dark .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 60px;\n }\n .ag-theme-alpine .ag-date-time-list-page-entry-is-current,\n .ag-theme-alpine-dark .ag-date-time-list-page-entry-is-current {\n background-color: var(--ag-alpine-active-color);\n }\n\n .ag-theme-alpine-dark {\n color-scheme: dark;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Balham Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeBalhamNofontsCSS = css `\n .ag-theme-balham,\n .ag-theme-balham-dark {\n --ag-balham-active-color: #0091ea;\n --ag-foreground-color: #000;\n --ag-background-color: #fff;\n --ag-header-background-color: #f5f7f7;\n --ag-tooltip-background-color: #cbd0d3;\n --ag-subheader-background-color: #e2e9eb;\n --ag-control-panel-background-color: #f5f7f7;\n --ag-border-color: #bdc3c7;\n --ag-odd-row-background-color: #fcfdfe;\n --ag-row-hover-color: #ecf0f1;\n --ag-column-hover-color: #ecf0f1;\n --ag-input-border-color: #95a5a6;\n --ag-invalid-color: #e02525;\n --ag-input-disabled-background-color: #ebebeb;\n --ag-checkbox-unchecked-color: #7f8c8d;\n --ag-input-focus-border-color: #719ece;\n --ag-input-focus-box-shadow: 0 0 2px 1px var(--ag-input-focus-border-color);\n --ag-range-selection-border-color: var(--ag-balham-active-color);\n --ag-checkbox-checked-color: var(--ag-balham-active-color);\n --ag-checkbox-background-color: var(--ag-background-color);\n --ag-secondary-foreground-color: rgba(0, 0, 0, 0.54);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.38);\n --ag-subheader-toolbar-background-color: rgba(226, 233, 235, 0.5);\n --ag-row-border-color: rgba(189, 195, 199, 0.58);\n --ag-chip-background-color: rgba(0, 0, 0, 0.1);\n --ag-range-selection-background-color: rgba(0, 145, 234, 0.2);\n --ag-range-selection-background-color-2: rgba(0, 145, 234, 0.36);\n --ag-range-selection-background-color-3: rgba(0, 145, 234, 0.49);\n --ag-range-selection-background-color-4: rgba(0, 145, 234, 0.59);\n --ag-selected-row-background-color: rgba(0, 145, 234, 0.28);\n --ag-header-column-separator-color: rgba(189, 195, 199, 0.5);\n --ag-input-disabled-border-color: rgba(149, 165, 166, 0.3);\n --ag-header-column-separator-display: block;\n --ag-header-column-separator-height: 50%;\n --ag-grid-size: 4px;\n --ag-icon-size: 16px;\n --ag-row-height: calc(var(--ag-grid-size) * 7);\n --ag-header-height: calc(var(--ag-grid-size) * 8);\n --ag-list-item-height: calc(var(--ag-grid-size) * 6);\n --ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-input-height: calc(var(--ag-grid-size) * 4);\n --ag-font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,\n 'Helvetica Neue', sans-serif;\n --ag-font-size: 12px;\n --ag-icon-font-family: agGridBalham;\n --ag-border-radius: 2px;\n --ag-checkbox-border-radius: 3px;\n --ag-card-shadow: none;\n }\n\n .ag-theme-balham-dark {\n --ag-balham-active-color: #00b0ff;\n --ag-foreground-color: #f5f5f5;\n --ag-background-color: #2d3436;\n --ag-header-background-color: #1c1c1c;\n --ag-tooltip-background-color: #1c1f20;\n --ag-subheader-background-color: #111;\n --ag-control-panel-background-color: #202020;\n --ag-border-color: #424242;\n --ag-odd-row-background-color: #262c2e;\n --ag-row-hover-color: #3d4749;\n --ag-column-hover-color: #3d4749;\n --ag-input-border-color: #f0f0f0;\n --ag-input-disabled-background-color: rgba(48, 46, 46, 0.3);\n --ag-modal-overlay-background-color: rgba(45, 52, 54, 0.66);\n --ag-checkbox-unchecked-color: #ecf0f1;\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-disabled-foreground-color: rgba(245, 245, 245, 0.38);\n --ag-subheader-toolbar-background-color: rgba(17, 17, 17, 0.5);\n --ag-row-border-color: #5c5c5c;\n --ag-chip-background-color: rgba(245, 245, 245, 0.08);\n --ag-range-selection-background-color: rgba(0, 176, 255, 0.2);\n --ag-range-selection-background-color-2: rgba(0, 176, 255, 0.36);\n --ag-range-selection-background-color-3: rgba(0, 176, 255, 0.49);\n --ag-range-selection-background-color-4: rgba(0, 176, 255, 0.59);\n --ag-selected-row-background-color: rgba(0, 176, 255, 0.28);\n --ag-header-column-separator-color: rgba(66, 66, 66, 0.5);\n --ag-input-disabled-border-color: rgba(240, 240, 240, 0.3);\n --ag-header-foreground-color: rgba(245, 245, 245, 0.64);\n --ag-toggle-button-off-background-color: transparent;\n --ag-toggle-button-off-border-color: var(--ag-foreground-color);\n --ag-range-selection-chart-category-background-color: rgba(26, 177, 74, 0.5);\n --ag-range-selection-chart-background-color: rgba(45, 166, 255, 0.5);\n --ag-input-focus-box-shadow: 0 0 4px 1.5px var(--ag-input-focus-border-color);\n }\n\n .ag-theme-balham .ag-filter-toolpanel-header,\n .ag-theme-balham .ag-filter-toolpanel-search,\n .ag-theme-balham .ag-status-bar,\n .ag-theme-balham .ag-header-row,\n .ag-theme-balham .ag-multi-filter-group-title-bar,\n .ag-theme-balham-dark .ag-filter-toolpanel-header,\n .ag-theme-balham-dark .ag-filter-toolpanel-search,\n .ag-theme-balham-dark .ag-status-bar,\n .ag-theme-balham-dark .ag-header-row,\n .ag-theme-balham-dark .ag-multi-filter-group-title-bar {\n font-weight: 600;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-balham .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham .ag-ltr textarea[class^='ag-'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham-dark .ag-ltr textarea[class^='ag-'] {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham .ag-rtl textarea[class^='ag-'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham-dark .ag-rtl textarea[class^='ag-'] {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-column-drop-vertical-empty-message,\n .ag-theme-balham .ag-status-bar,\n .ag-theme-balham-dark .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-status-bar {\n font-weight: 600;\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-balham.ag-dnd-ghost,\n .ag-theme-balham-dark.ag-dnd-ghost {\n font-size: var(--ag-font-size);\n font-weight: 600;\n }\n .ag-theme-balham .ag-tab,\n .ag-theme-balham-dark .ag-tab {\n border: 1px solid transparent;\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n margin: var(--ag-grid-size);\n margin-bottom: -1px;\n }\n .ag-theme-balham .ag-tab-selected,\n .ag-theme-balham-dark .ag-tab-selected {\n background-color: var(--ag-background-color);\n border-color: var(--ag-border-color);\n border-bottom-color: transparent;\n }\n .ag-theme-balham .ag-tabs-header,\n .ag-theme-balham-dark .ag-tabs-header {\n border-bottom: 1px solid var(--ag-border-color);\n }\n .ag-theme-balham .ag-column-drop-cell,\n .ag-theme-balham-dark .ag-column-drop-cell {\n height: calc(var(--ag-grid-size) * 6);\n }\n .ag-theme-balham .ag-column-drop-vertical-title,\n .ag-theme-balham-dark .ag-column-drop-vertical-title {\n color: var(--ag-foreground-color);\n }\n .ag-theme-balham .ag-column-drop-vertical-cell,\n .ag-theme-balham-dark .ag-column-drop-vertical-cell {\n margin-left: calc(var(--ag-grid-size) * 2);\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical-cell-text,\n .ag-theme-balham-dark .ag-column-drop-vertical-cell-text {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical-icon,\n .ag-theme-balham-dark .ag-column-drop-vertical-icon {\n color: var(--ag-secondary-foreground-color);\n }\n .ag-theme-balham .ag-ltr .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-ltr .ag-column-drop-vertical-empty-message {\n padding-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-rtl .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-vertical-empty-message {\n padding-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-column-drop-horizontal,\n .ag-theme-balham-dark .ag-column-drop-horizontal {\n height: var(--ag-header-height);\n }\n .ag-theme-balham .ag-column-drop-empty,\n .ag-theme-balham-dark .ag-column-drop-empty {\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-balham .ag-column-drop-horizontal-cell-text,\n .ag-theme-balham-dark .ag-column-drop-horizontal-cell-text {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical,\n .ag-theme-balham-dark .ag-column-drop-vertical {\n padding-top: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-menu-header,\n .ag-theme-balham-dark .ag-menu-header {\n background-color: var(--ag-header-background-color);\n }\n .ag-theme-balham .ag-overlay-loading-center,\n .ag-theme-balham-dark .ag-overlay-loading-center {\n background-color: var(--ag-background-color);\n border: 1px solid var(--ag-border-color);\n color: var(--ag-foreground-color);\n padding: calc(var(--ag-grid-size) * 4);\n }\n .ag-theme-balham .ag-tooltip,\n .ag-theme-balham-dark .ag-tooltip {\n border: none;\n }\n .ag-theme-balham .ag-panel-title-bar-button-icon,\n .ag-theme-balham-dark .ag-panel-title-bar-button-icon {\n font-size: calc(var(--ag-icon-size) + var(--ag-grid-size));\n }\n .ag-theme-balham .ag-chart-data-section,\n .ag-theme-balham .ag-chart-format-section,\n .ag-theme-balham-dark .ag-chart-data-section,\n .ag-theme-balham-dark .ag-chart-format-section {\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-balham .ag-group-toolbar,\n .ag-theme-balham-dark .ag-group-toolbar {\n background-color: var(--ag-subheader-toolbar-background-color);\n }\n .ag-theme-balham .ag-chart-tab,\n .ag-theme-balham-dark .ag-chart-tab {\n padding-top: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-balham .ag-charts-format-sub-level-group-item,\n .ag-theme-balham-dark .ag-charts-format-sub-level-group-item {\n margin-bottom: calc(var(--ag-grid-size) * 1.5);\n }\n .ag-theme-balham .ag-chart-menu-close,\n .ag-theme-balham-dark .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-balham .ag-chart-menu-close:hover .ag-icon,\n .ag-theme-balham-dark .ag-chart-menu-close:hover .ag-icon {\n border-color: var(--ag-border-color);\n }\n .ag-theme-balham .ag-chart-menu-close .ag-icon,\n .ag-theme-balham-dark .ag-chart-menu-close .ag-icon {\n background: var(--ag-header-background-color);\n border: 1px solid var(--ag-secondary-border-color);\n border-right: none;\n }\n\n .ag-theme-balham-dark {\n color-scheme: dark;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Material Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeMaterialNofontsCSS = css `\n .ag-theme-material {\n --ag-material-primary-color: #3f51b5;\n --ag-material-accent-color: #ff4081;\n --ag-foreground-color: rgba(0, 0, 0, 0.87);\n --ag-secondary-foreground-color: rgba(0, 0, 0, 0.54);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.38);\n --ag-background-color: #fff;\n --ag-header-background-color: #fff;\n --ag-tooltip-background-color: #fff;\n --ag-subheader-background-color: #eee;\n --ag-subheader-toolbar-background-color: rgba(238, 238, 238, 0.5);\n --ag-header-cell-hover-background-color: #f2f2f2;\n --ag-chip-background-color: #e2e2e2;\n --ag-range-selection-background-color: rgba(122, 134, 203, 0.1);\n --ag-range-selection-background-color-2: rgba(122, 134, 203, 0.19);\n --ag-range-selection-background-color-3: rgba(122, 134, 203, 0.27);\n --ag-range-selection-background-color-4: rgba(122, 134, 203, 0.34);\n --ag-range-selection-highlight-color: #fce4ec;\n --ag-row-hover-color: #fafafa;\n --ag-column-hover-color: #fafafa;\n --ag-control-panel-background-color: #fafafa;\n --ag-selected-row-background-color: #eee;\n --ag-checkbox-unchecked-color: #333;\n --ag-value-change-value-highlight-background-color: #00acc1;\n --ag-side-button-selected-background-color: transparent;\n --ag-range-selection-border-color: var(--ag-material-primary-color);\n --ag-checkbox-checked-color: var(--ag-material-accent-color);\n --ag-borders: none;\n --ag-borders-critical: solid 1px;\n --ag-border-color: #e2e2e2;\n --ag-grid-size: 8px;\n --ag-icon-size: 18px;\n --ag-header-height: calc(var(--ag-grid-size) * 7);\n --ag-row-height: calc(var(--ag-grid-size) * 6);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-list-item-height: calc(var(--ag-grid-size) * 4);\n --ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));\n --ag-filter-tool-panel-sub-level-row-height: calc(var(--ag-grid-size) * 4);\n --ag-checkbox-border-radius: 2px;\n --ag-toggle-button-switch-border-width: 2px;\n --ag-toggle-button-height: var(--ag-icon-size);\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.75);\n --ag-font-family: 'Roboto', sans-serif;\n --ag-font-size: 13px;\n --ag-icon-font-family: agGridMaterial;\n --ag-selected-tab-underline-color: var(--ag-material-primary-color);\n --ag-selected-tab-underline-width: 2px;\n --ag-input-focus-border-color: var(--ag-material-primary-color);\n --ag-input-focus-box-shadow: 0 0 0 5px rgba(32, 33, 36, 0.122);\n --ag-card-shadow:\n 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n --ag-card-radius: 2px;\n --ag-invalid-color: #e02525;\n }\n\n .ag-theme-material .ag-filter-toolpanel-header,\n .ag-theme-material .ag-filter-toolpanel-search,\n .ag-theme-material .ag-status-bar,\n .ag-theme-material .ag-header-row,\n .ag-theme-material .ag-panel-title-bar-title,\n .ag-theme-material .ag-multi-filter-group-title-bar {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-material .ag-tab {\n height: calc(var(--ag-grid-size) * 4.5);\n flex: 1 1 auto;\n }\n .ag-theme-material .ag-tabs-header,\n .ag-theme-material .ag-column-drop-horizontal {\n background-color: var(--ag-subheader-background-color);\n }\n .ag-theme-material .ag-tabs-body {\n padding: calc(var(--ag-grid-size) * 0.5) 0;\n }\n .ag-theme-material .ag-tabs-body .ag-menu-list {\n padding-top: 0;\n padding-bottom: 0;\n }\n .ag-theme-material .ag-header-cell,\n .ag-theme-material .ag-header-group-cell {\n transition: background-color 0.5s;\n }\n .ag-theme-material .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing {\n bottom: 0;\n }\n .ag-theme-material .ag-cell-inline-editing {\n padding: var(--ag-grid-size);\n height: calc(var(--ag-row-height) + var(--ag-grid-size) * 3);\n border-color: var(--ag-border-color) !important;\n }\n .ag-theme-material .ag-has-focus .ag-cell-inline-editing {\n border-color: var(--ag-input-focus-border-color) !important;\n }\n .ag-theme-material .ag-side-button-button {\n color: var(--ag-foreground-color);\n }\n .ag-theme-material .ag-column-drop-vertical {\n border-bottom: solid 1px;\n border-bottom-color: var(--ag-border-color);\n padding-top: var(--ag-grid-size);\n }\n .ag-theme-material .ag-column-drop-vertical.ag-last-column-drop {\n border-bottom: none;\n }\n .ag-theme-material .ag-column-drop-vertical-cell {\n margin-left: 0;\n }\n .ag-theme-material .ag-column-drop-vertical-empty-message {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-material .ag-ltr .ag-column-drop-vertical-empty-message {\n padding-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-rtl .ag-column-drop-vertical-empty-message {\n padding-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-status-bar {\n border: solid 1px;\n border-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-panel-column-select {\n border-top: solid 1px;\n border-top-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-select,\n .ag-theme-material .ag-column-select-header {\n border-bottom: solid 1px;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-select-header {\n height: var(--ag-header-height);\n }\n .ag-theme-material .ag-group-title-bar {\n padding: calc(var(--ag-grid-size) * 0.75) var(--ag-grid-size);\n }\n .ag-theme-material .ag-charts-format-sub-level-group-title-bar {\n padding: calc(var(--ag-grid-size) * 0.5) var(--ag-grid-size);\n }\n .ag-theme-material .ag-chart-data-section,\n .ag-theme-material .ag-chart-format-section {\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-material .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-material .ag-chart-menu-close .ag-icon {\n background: var(--ag-subheader-background-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]),\n .ag-theme-material input[class^='ag-'][type='text'],\n .ag-theme-material input[class^='ag-'][type='number'],\n .ag-theme-material input[class^='ag-'][type='tel'],\n .ag-theme-material input[class^='ag-'][type='date'],\n .ag-theme-material input[class^='ag-'][type='datetime-local'],\n .ag-theme-material textarea[class^='ag-'] {\n background: transparent;\n color: var(--ag-foreground-color);\n font-family: inherit;\n font-size: inherit;\n height: calc(var(--ag-grid-size) * 5);\n padding-bottom: var(--ag-grid-size);\n border-width: 0;\n border-bottom: 2px solid;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):focus,\n .ag-theme-material input[class^='ag-'][type='text']:focus,\n .ag-theme-material input[class^='ag-'][type='number']:focus,\n .ag-theme-material input[class^='ag-'][type='tel']:focus,\n .ag-theme-material input[class^='ag-'][type='date']:focus,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:focus,\n .ag-theme-material textarea[class^='ag-']:focus {\n border-bottom: 2px solid;\n border-bottom-color: var(--ag-material-primary-color);\n outline: none;\n box-shadow: none;\n }\n .ag-theme-material input[class^='ag-']:not([type])::placeholder,\n .ag-theme-material input[class^='ag-'][type='text']::placeholder,\n .ag-theme-material input[class^='ag-'][type='number']::placeholder,\n .ag-theme-material input[class^='ag-'][type='tel']::placeholder,\n .ag-theme-material input[class^='ag-'][type='date']::placeholder,\n .ag-theme-material input[class^='ag-'][type='datetime-local']::placeholder,\n .ag-theme-material textarea[class^='ag-']::placeholder {\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):disabled,\n .ag-theme-material input[class^='ag-'][type='text']:disabled,\n .ag-theme-material input[class^='ag-'][type='number']:disabled,\n .ag-theme-material input[class^='ag-'][type='tel']:disabled,\n .ag-theme-material input[class^='ag-'][type='date']:disabled,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:disabled,\n .ag-theme-material textarea[class^='ag-']:disabled {\n border-bottom: 1px solid;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):invalid,\n .ag-theme-material input[class^='ag-'][type='text']:invalid,\n .ag-theme-material input[class^='ag-'][type='number']:invalid,\n .ag-theme-material input[class^='ag-'][type='tel']:invalid,\n .ag-theme-material input[class^='ag-'][type='date']:invalid,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:invalid,\n .ag-theme-material textarea[class^='ag-']:invalid {\n border-width: 0;\n border-bottom: 1px solid;\n border-bottom-color: var(--ag-invalid-color);\n color: var(--ag-invalid-color);\n }\n .ag-theme-material .ag-standard-button {\n appearance: none;\n background-color: transparent;\n border: 0;\n color: var(--ag-material-primary-color);\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n padding: 0;\n text-transform: uppercase;\n }\n .ag-theme-material .ag-standard-button:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n .ag-theme-material.ag-dnd-ghost {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n }\n .ag-theme-material .ag-filter-toolpanel-header {\n height: calc(var(--ag-grid-size) * 4);\n }\n .ag-theme-material .ag-filter-toolpanel-group-level-0-header {\n height: calc(var(--ag-grid-size) * 7);\n }\n .ag-theme-material .ag-ltr .ag-filter-apply-panel-button {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-rtl .ag-filter-apply-panel-button {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-material .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-material .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-material .ag-layout-print .ag-center-cols-container {\n min-height: 150px;\n }\n .ag-theme-material .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 60px;\n }\n .ag-theme-material .ag-picker-field-wrapper:focus {\n box-shadow: 0 0 0 1px var(--ag-material-primary-color);\n }\n`;\n","import { css } from '@microsoft/fast-element';\nimport { agGridCSS } from './ag-grid-css';\nimport { agHeadCSS } from './ag-head-css';\nimport { agThemeAlpineNofontsCSS } from './ag-theme-alpine-no-font-css';\nimport { agThemeBalhamNofontsCSS } from './ag-theme-balham-no-font-css';\nimport { agThemeMaterialNofontsCSS } from './ag-theme-material-no-font-css';\nexport * from './fonts';\n/**\n * All External AG Grid Stock in one CSS.\n * @remarks This is a collection of multiple AG themes, only needed if the target element needs more than one stock theme.\n * @public\n */\nexport const agExternalStockStyles = css `\n ${agGridCSS}\n ${agHeadCSS}\n ${agThemeAlpineNofontsCSS}\n ${agThemeBalhamNofontsCSS}\n ${agThemeMaterialNofontsCSS}\n`;\n/**\n * All available External AG Grid Stock CSS.\n * @public\n */\nexport { agGridCSS, agHeadCSS, agThemeAlpineNofontsCSS, agThemeBalhamNofontsCSS, agThemeMaterialNofontsCSS, };\n","/**\n * Event names for datasource-grid communication\n * These represent datasource operations, not grid-specific actions\n */\nexport const datasourceEventNames = {\n // Initialization events\n initialize: 'datasource-initialize',\n ready: 'datasource-ready',\n // Data events\n dataLoaded: 'datasource-data-loaded',\n dataChanged: 'datasource-data-changed',\n dataCleared: 'datasource-data-cleared',\n // Schema events\n schemaUpdated: 'datasource-schema-updated',\n // Status events\n loadingStarted: 'datasource-loading-started',\n loadingFinished: 'datasource-loading-finished',\n noDataAvailable: 'datasource-no-data-available',\n moreDataAvailable: 'datasource-more-data-available',\n // Filter events\n filtersRestored: 'datasource-filters-restored',\n // Error events\n error: 'datasource-error',\n // Destroy datasource events\n destroy: 'datasource-destroy',\n // Size events\n sizeChanged: 'datasource-size-changed',\n // Server-side specific events\n cacheFilterConfig: 'cache-filter-config',\n refreshServerSide: 'refresh-server-side',\n setServerSideDatasource: 'set-server-side-datasource',\n addGridCssClass: 'add-grid-css-class',\n removeGridCssClass: 'remove-grid-css-class',\n applyServerSideTransaction: 'apply-server-side-transaction',\n};\n","/**\n * The Genesis Datasource events names.\n * @public\n */\nexport const gridProGenesisDatasourceEventNames = {\n error: 'datasource-error',\n dataInit: 'datasource-init',\n sizeChanged: 'datasource-size-changed',\n moreRowsChanged: 'more-rows-changed',\n};\n","import { FieldTypeEnum } from '@genesislcap/foundation-comms';\nimport { getEnumFilterParams } from '../grid-pro.definitions';\n/**\n * Returns a filter type based on the Grid Pro field/column type.\n * @param type - The type of the field/column\n * @returns The ag-grid filter type\n */\nexport function getFilterByFieldType(type) {\n switch (type === null || type === void 0 ? void 0 : type.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'agNumberColumnFilter';\n case 'date':\n case 'datetime':\n return 'agDateColumnFilter';\n case 'string':\n case 'enum':\n return 'agMultiColumnFilter';\n default:\n return 'agTextColumnFilter';\n }\n}\n/**\n * Returns the filter params based on the Grid Pro field/column type.\n * @param field - The field metadata\n * @returns the filter params for the specified field type\n * @remarks Currently only returns a default filter params object, for all field types\n * @alpha\n */\nexport function getClientSideFilterParamsByFieldType(field) {\n switch (field.type) {\n case FieldTypeEnum.DATE:\n case FieldTypeEnum.DATETIME: {\n return {\n comparator: function (filterLocalDateAtMidnight, cellValue) {\n if (!cellValue)\n return -1;\n const cellValueTime = new Date(cellValue).setHours(0, 0, 0, 0);\n const filterValueTime = filterLocalDateAtMidnight.getTime();\n if (cellValueTime === filterValueTime) {\n return 0;\n }\n if (cellValueTime < filterValueTime) {\n return -1;\n }\n if (cellValueTime > filterValueTime) {\n return 1;\n }\n },\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n browserDatePicker: true,\n };\n }\n case FieldTypeEnum.ENUM: {\n return getEnumFilterParams(field, getFilterByFieldType(field.type));\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { MessageType, ResourceType, dataServerResultFilter, normaliseCriteria, } from '@genesislcap/foundation-comms';\nimport { LifecycleMixin } from '@genesislcap/foundation-utils';\nimport { DOM, attr, customElement } from '@microsoft/fast-element';\nimport { BehaviorSubject, EMPTY } from 'rxjs';\nimport { catchError, debounceTime, skip, tap } from 'rxjs/operators';\nimport { GridProBaseDatasource, criteriaDelimiter } from '../datasource/base.datasource';\nimport { getClientSideFilterParamsByFieldType, getFilterByFieldType, } from '../datasource/client-side.grid-definitions';\nimport { logger } from '../utils/logger';\nimport { datasourceEventNames, } from './datasource-events.types';\nimport { gridProGenesisDatasourceEventNames } from './grid-pro-genesis-datasource.config';\nconst withoutFullInit = null;\nconst withoutColumnDefs = null;\n/**\n * The Genesis Datasource element, for CSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Client-Side Row Model.\n * @public\n *\n * @fires base-datasource-error - Fired when a datasource error is reported\n * @fires datasource-error - Fired when a datasource error occurs (for grid integration)\n * @fires base-datasource-connected - Fired when error state is cleared after connection succeeds\n * @fires datasource-loading-finished - Fired when loading completes with no pending row changes\n * @fires datasource-no-data-available - Fired when the grid has no rows after load\n * @fires datasource-data-changed - Fired when row data changes from stream updates\n * @fires datasource-initialize - Fired to hand off grid options and initialization flags\n * @fires datasource-destroy - Fired when the datasource is torn down\n * @fires datasource-data-cleared - Fired when row data is cleared\n * @fires datasource-schema-updated - Fired when column metadata or defs are updated\n * @fires datasource-filters-restored - Fired when persisted filters are reapplied\n * @fires datasource-data-loaded - Fired when a data payload is loaded for the grid\n * @fires datasource-loading-started - Fired when a load or refresh starts\n * @fires datasource-more-data-available - Fired when more server rows can be requested\n * @fires datasource-ready - Fired when the host grid is ready (detail includes pagination state)\n * @fires datasource-init - Fired when initial grid data is ready for the client-side model\n * @fires more-rows-changed - Fired when MORE_ROWS availability changes\n * @fires datasource-size-changed - Fired when layout or viewport sizing affects the datasource\n */\nlet GridProGenesisDatasource = class GridProGenesisDatasource extends LifecycleMixin(GridProBaseDatasource) {\n constructor() {\n super(...arguments);\n // Cache for rowData array to avoid repeated Array.from() calls\n this.cachedRowArray = [];\n // Transaction data for grid operations\n this.transactionData = {\n add: [],\n remove: [],\n update: [],\n addIndex: 0,\n };\n this.keepColDefsOnClearRowData = false;\n this.requiresFullRowDataAndColDefs = true;\n this._lastMoreRows = false;\n this._isMoreRowsResult = false;\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n }\n // DatasourceOptions\n criteriaChanged(oldCriteria, newCriteria) {\n return __awaiter(this, void 0, void 0, function* () {\n const criteriaIsNotDuplicate = oldCriteria !== normaliseCriteria(newCriteria, criteriaDelimiter);\n if (this.datasource.initialized && criteriaIsNotDuplicate) {\n yield this.reloadResourceData();\n }\n });\n }\n requestChanged(oldRequest, newRequest) {\n const requestIsNotDuplicate = oldRequest !== newRequest;\n if (this.datasource.initialized && requestIsNotDuplicate) {\n this.reloadResourceData();\n }\n }\n resourceNameChanged(oldValue, newValue) {\n if (!oldValue || oldValue === newValue)\n return;\n this.restart();\n }\n connectedCallback() {\n super.connectedCallback();\n const shouldRunConnect = this.shouldRunConnect;\n DOM.queueUpdate(() => {\n if (!shouldRunConnect)\n return;\n this.init();\n this.subscribeToConnection();\n });\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n const shouldRunDisconnect = this.shouldRunDisconnect;\n DOM.queueUpdate(() => {\n if (!shouldRunDisconnect)\n return;\n this.destroy();\n this.unsubscribeFromConnection();\n });\n }\n deepClone() {\n const copy = super.deepClone();\n copy.deferredGridOptions = {};\n if (this.deferredGridOptions) {\n Object.keys(this.deferredGridOptions).forEach((key) => {\n if (typeof this.deferredGridOptions[key] === 'function') {\n copy.deferredGridOptions[key] = this.deferredGridOptions[key].bind(copy);\n }\n else if (key === 'columnDefs' && this.deferredGridOptions[key].length) {\n copy.deferredGridOptions[key] = this.colDefsDeepClone(key, copy);\n }\n else {\n copy.deferredGridOptions[key] = structuredClone(this.deferredGridOptions[key]);\n }\n });\n }\n copy.deferredColumnStates = structuredClone(this.deferredColumnStates);\n copy.request = structuredClone(this.request);\n return copy;\n }\n colDefsDeepClone(key, copy) {\n return this.deferredGridOptions[key].map((columnDefinition) => {\n const definitionCopy = {};\n Object.keys(columnDefinition).forEach((fieldKey) => {\n if (typeof columnDefinition[fieldKey] === 'function') {\n definitionCopy[fieldKey] = columnDefinition[fieldKey].bind(copy);\n }\n else {\n definitionCopy[fieldKey] = structuredClone(columnDefinition[fieldKey]);\n }\n });\n return definitionCopy;\n });\n }\n // Genesis Specific\n /**\n * Initializes the datasource.\n * @public\n * @param columnDefinitions - Optionally set the `gridOptions` up with column definitions\n * @param columnStates - Optionally set the grid up with column state\n * @remarks This method is called automatically when the element is connected to the DOM.\n */\n init(keepColDefsOnClearRowData) {\n return __awaiter(this, void 0, void 0, function* () {\n this.$emit(datasourceEventNames.initialize, {\n keepColDefsOnClearRowData,\n options: Object.assign({ getRowId: (params) => params.data[this.rowId] }, this.deferredGridOptions),\n });\n // TODO: instead of listening to ready event, we should only render the datasource slot when the grid is ready\n this.addEventListener(datasourceEventNames.ready, (event) => __awaiter(this, void 0, void 0, function* () {\n const { pagination } = event.detail;\n this.pagination = pagination;\n yield this.loadResourceData();\n }), { once: true });\n const filterDebounceTime = 600;\n this.updateSub = this.update\n .pipe(skip(1), debounceTime(filterDebounceTime), tap((f) => logger.debug('filters (debounced): ', f)))\n .subscribe((_) => {\n this.reloadResourceData();\n });\n });\n }\n /**\n * Destroys the datasource, resetting it to its initial state.\n * @public\n */\n destroy() {\n var _a;\n logger.debug('GridProGenesisDatasource.destroy()', this.resourceName);\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n this.dataSub = undefined;\n }\n if (this.updateSub) {\n this.updateSub.unsubscribe();\n this.updateSub = undefined;\n }\n if (this.connectionSub) {\n this.connectionSub.unsubscribe();\n this.connectionSub = undefined;\n }\n this._sourceRef = undefined;\n this.clearRowData();\n this._lastMoreRows = false;\n this._isMoreRowsResult = false;\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n this.$emit(datasourceEventNames.destroy);\n this.requiresFullRowDataAndColDefs = true;\n this.dataSubWasLoggedOff = false;\n this.criteriaFromFilters = new Map();\n (_a = this.update) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.update = new BehaviorSubject(new Map());\n this.setDisconnected(false);\n // TODO: There may need to be a full destroy path. Datasources need some love!\n this.datasource.destroy();\n }\n /**\n * Deinitialises the datasource, resetting it to its initial state.\n * @deprecated Use `destroy` instead\n * @public\n */\n deinit() {\n logger.debug('GridProGenesisDatasource.deinit()', this.resourceName);\n this.destroy();\n }\n /**\n * Resets the datasource to its initial state.\n * @public\n * @deprecated Use `destroy` instead\n */\n reset() {\n logger.debug('GridProGenesisDatasource.reset()', this.resourceName);\n this.destroy();\n }\n /**\n * Restarts the datasource, uses `destroy` and `init` in sequence.\n * @public\n */\n restart() {\n return __awaiter(this, void 0, void 0, function* () {\n this.destroy();\n yield this.init(this.keepColDefsOnClearRowData);\n });\n }\n /**\n * Force the grid to redispatch the current rows\n */\n refreshRows() {\n this.updateCachedRowArray(); // Ensure the cache is up-to-date\n this.emitDataLoaded(this.cachedRowArray);\n }\n /**\n * Clears the rowData and columnDefs for the grid.\n * @remarks This is called when `reloadResourceData` happens, on criteria and filters change or full `reset`.\n * @param withColumnDefs - Whether to clear the columnDefs as well. Defaults to true.\n * @internal\n */\n clearRowData(withColumnDefs = true) {\n this.rowData = new Map();\n this.cachedRowArray = []; // Clear the cached array\n this.transactionData = { add: [], remove: [], update: [], addIndex: 0 };\n // Emit event to clear data\n this.$emit(datasourceEventNames.dataCleared, {\n includeSchema: withColumnDefs && !this.keepColDefsOnClearRowData,\n });\n }\n /**\n * Sets the columnDefs and rowData for the grid.\n * @remarks This should only happen once, when the grid is first initialized. Follow up updates will use transactions.\n * @internal\n */\n setRowData(rowData) {\n return __awaiter(this, void 0, void 0, function* () {\n const agColumnDefs = yield this.getAgColumnDefs(this.datasource.fieldMetadata);\n if (agColumnDefs) {\n this.$emit(datasourceEventNames.schemaUpdated, {\n schema: agColumnDefs,\n metadata: this.datasource.fieldMetadata,\n });\n }\n const data = this.rowDataMapper ? this.rowDataMapper(rowData) : rowData;\n this.$emit(datasourceEventNames.filtersRestored);\n // Use transactions for adding data\n this.transactionData = { add: data ? [...data] : [], remove: [], update: [], addIndex: 0 };\n this.emitDataChanged(this.transactionData);\n // Update the cached row array\n this.updateCachedRowArray();\n this.requiresFullRowDataAndColDefs = false;\n });\n }\n /**\n * Updates the cached row array from the rowData Map\n * @internal\n */\n updateCachedRowArray() {\n this.cachedRowArray = Array.from(this.rowData.values());\n }\n /**\n * Emits event to notify data has been loaded\n * @internal\n */\n emitDataLoaded(data, isInitialLoad = false) {\n this.$emit(datasourceEventNames.dataLoaded, {\n data,\n isInitialLoad,\n });\n }\n /**\n * Emits event to notify data has changed\n * @internal\n */\n emitDataChanged(transaction) {\n this.$emit(datasourceEventNames.dataChanged, {\n changes: transaction,\n });\n if (this.rowData.size === 0 &&\n !transaction.add.length &&\n !transaction.update.length &&\n !transaction.remove.length) {\n this.$emit(datasourceEventNames.noDataAvailable);\n }\n else {\n this.$emit(datasourceEventNames.loadingFinished);\n }\n }\n /**\n * Resets the grid data while keeping columnDefs and sends a DATA_LOGOFF message if it's a stream.\n * Loads resource data without full initialization (no metadata fetch).\n * @remarks This is used when the grid is already initialized and we want to reload the data due to a criteria/filter change.\n * @see loadResourceData\n * @public\n */\n reloadResourceData() {\n return __awaiter(this, void 0, void 0, function* () {\n logger.debug('GridProGenesisDatasource.reloadResourceData()', this.resourceName);\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n this.dataSub = undefined;\n }\n // Reset load more tracking on reload\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n this.datasource.updateLoadMoreCount(0);\n this.datasource.stream = undefined;\n this.clearRowData(withoutColumnDefs);\n this.$emit(datasourceEventNames.loadingStarted);\n this.setDisconnected(false);\n yield this.loadResourceData(withoutFullInit);\n });\n }\n /**\n * Initializes the datasource and loads the data for the grid.\n * Handles both snapshot and stream data (for both REQUEST_SERVER and DATASERVER resource types).\n *\n * @param withFullInit - if true, will call datasource.init() with requiresMetadataFetch = true, fetching fresh metadata\n * @see reloadResourceData\n * @internal\n */\n loadResourceData() {\n return __awaiter(this, arguments, void 0, function* (withFullInit = true) {\n const requiresMetadataFetch = withFullInit || !this.datasource.initialized;\n try {\n // Use the base datasource error handling\n const initOK = yield this.initializeDatasource(this.datasourceOptions(), requiresMetadataFetch, false);\n if (!initOK) {\n logger.debug(`Genesis Datasource init failed for ${this.resourceName}`);\n this.clearRowData();\n return;\n }\n this.$emit(gridProGenesisDatasourceEventNames.dataInit);\n if (this.isSnapshot) {\n const result = yield this.datasource.snapshot();\n if (result) {\n const rowData = this.handleSnapshot(result);\n this.setRowData(rowData);\n }\n return;\n }\n logger.debug(`starting stream for ${this.resourceName}`);\n yield this.datasource.startStream();\n this.dataSub = this.datasource.stream\n .pipe(catchError((err) => {\n var _a;\n // Use base error handling for stream errors\n this.handleErrors(((_a = err === null || err === void 0 ? void 0 : err.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || (err === null || err === void 0 ? void 0 : err.message) || err, 'stream');\n return EMPTY;\n }))\n .subscribe((result) => {\n this._sourceRef = result.SOURCE_REF;\n const hasMoreRowsInResult = 'MORE_ROWS' in result;\n const hasRowsCountInResult = 'ROWS_COUNT' in result;\n const hasNextOffsetInResult = this.datasource.resourceType === ResourceType.REQUEST_SERVER && 'NEXT_OFFSET' in result;\n this._isMoreRowsResult = hasMoreRowsInResult && !hasRowsCountInResult;\n // Store NEXT_OFFSET for RequestServer load more functionality\n if (hasNextOffsetInResult) {\n this._nextOffset = result.NEXT_OFFSET;\n }\n if (result === null || result === void 0 ? void 0 : result.ERROR) {\n this.handleErrors(result.ERROR, 'criteria');\n }\n const messageType = result.MESSAGE_TYPE;\n if (messageType && messageType === MessageType.LOGOFF_ACK) {\n this.handleErrors(`Genesis datasource for ${this.resourceName} disconnected.`, 'connection');\n this.dataSubWasLoggedOff = true;\n return;\n }\n this.dataSubWasLoggedOff = false;\n if (hasMoreRowsInResult) {\n this.updateLoadMoreStatus(result.MORE_ROWS, result.SOURCE_REF);\n }\n if (result.ROW) {\n const nextMessage = dataServerResultFilter(result);\n this.handleStreamResult(nextMessage);\n if (hasMoreRowsInResult && result.MORE_ROWS !== this._lastMoreRows) {\n const moreRowsDetail = {\n moreRows: result.MORE_ROWS,\n sourceRef: result.SOURCE_REF,\n };\n this.$emit(gridProGenesisDatasourceEventNames.moreRowsChanged, moreRowsDetail);\n this._lastMoreRows = result.MORE_ROWS;\n }\n }\n else {\n this.handleStreamResult(result);\n }\n });\n }\n catch (error) {\n let { message } = error;\n if (error.receivedMessage) {\n message = error.receivedMessage.ERROR;\n }\n logger.error(message);\n // Use base error handling for general errors\n this.handleErrors(message, 'unknown');\n }\n });\n }\n handleSnapshot(result) {\n if (Array.isArray(result))\n return result;\n if (result.REPLY) {\n return result.REPLY;\n }\n if (result.ROW) {\n return dataServerResultFilter(result).inserts;\n }\n return result.inserts;\n }\n handleStreamResult(result) {\n if (!result)\n return;\n if (this.isRequestServer) {\n this.applyRequestServerData(result);\n }\n else {\n this.applyDataserverData(result);\n }\n }\n /**\n * Updates the status bar based on more rows status\n * @param moreRows - Whether more rows are available\n * @param sourceRef - The source reference\n * @param rowsCount - The total number of rows\n * @remarks\n * This method emits an event for the grid to handle status bar updates.\n */\n updateLoadMoreStatus(moreRows, sourceRef) {\n this.$emit(datasourceEventNames.moreDataAvailable, {\n hasMoreData: moreRows,\n sourceRef,\n });\n }\n applyRequestServerData(requestServerResult) {\n var _a;\n const previousSize = this.rowData.size;\n const requestServerData = requestServerResult.REPLY;\n if (!Array.isArray(requestServerData) ||\n !((_a = requestServerResult.MESSAGE_TYPE) === null || _a === void 0 ? void 0 : _a.startsWith('REP_'))) {\n logger.error('received invalid RequestServerResult', requestServerResult);\n return;\n }\n if (this.requiresFullRowDataAndColDefs) {\n let noRowIdError = false;\n for (const insertData of requestServerData || []) {\n const insertDataRowId = insertData[this.rowId];\n if (!insertDataRowId) {\n if (!noRowIdError) {\n const noRowIdMessage = `The specified rowId (${this.rowId}) is not present in the data. Since this is not a snapshot (isSnapshot=false), the data will not be loaded. Please provide a valid 'row-id' attribute.`;\n logger.error(noRowIdMessage);\n noRowIdError = true;\n }\n break;\n }\n this.rowData.set(insertDataRowId, insertData);\n }\n if (noRowIdError) {\n this.destroy();\n return;\n }\n // Update cache and use it if available\n this.updateCachedRowArray();\n const rowData = this.rowData.size > 0 ? this.cachedRowArray : requestServerData;\n this.handleSizeChanged(previousSize, this.rowData.size);\n this.setRowData(rowData);\n return;\n }\n const rowsToUpdate = [];\n // Update cache before using it\n this.updateCachedRowArray();\n const rowsToDelete = this.cachedRowArray.filter((row) => {\n const match = requestServerData.find((data) => data[this.rowId] === row[this.rowId]);\n if (match) {\n rowsToUpdate.push(match);\n return false; // don't delete rows that need to be updated\n }\n return true; // delete rows that don't exist in requestServerData\n });\n const rowsToInsert = requestServerData.filter((data) => !this.rowData.has(data[this.rowId]));\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(rowsToInsert);\n this.handleStreamDeletes(rowsToDelete);\n this.handleStreamUpdates(rowsToUpdate);\n this.emitDataChanged(this.transactionData);\n this.handleSizeChanged(previousSize, this.rowData.size);\n }\n applyDataserverData(dataServerResult) {\n var _a;\n const previousSize = this.rowData.size;\n if (this.requiresFullRowDataAndColDefs) {\n (_a = dataServerResult.inserts) === null || _a === void 0 ? void 0 : _a.forEach((insertData) => {\n this.rowData.set(insertData[this.rowId], insertData);\n });\n // Update and use the cached array\n this.updateCachedRowArray();\n this.setRowData(this.cachedRowArray);\n this.handleSizeChanged(previousSize, this.rowData.size);\n return;\n }\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(dataServerResult.inserts);\n this.handleStreamDeletes(dataServerResult.deletes);\n this.handleStreamUpdates(dataServerResult.updates);\n this.emitDataChanged(this.transactionData);\n this.handleSizeChanged(previousSize, this.rowData.size);\n }\n // FUTURE: Work with the field types vs ag grid column def types!\n getAgColumnDefs(fieldsMetadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const columnDefsFromMetadata = this.generateColumnDefsFromMetadata(fieldsMetadata, getClientSideFilterParamsByFieldType, getFilterByFieldType);\n // Return the base column definitions - the grid will handle merging with template definitions\n return columnDefsFromMetadata;\n });\n }\n setFilter(fieldName, newFilter) {\n this.criteriaFromFilters.set(fieldName, newFilter);\n this.update.next(this.criteriaFromFilters);\n }\n removeFilter(fieldName) {\n this.criteriaFromFilters.delete(fieldName);\n this.update.next(this.criteriaFromFilters);\n }\n applyTransaction(transaction) {\n this.emitDataChanged(transaction);\n }\n handleSizeChanged(oldSize, newSize) {\n if (oldSize === newSize)\n return;\n this.$emit(gridProGenesisDatasourceEventNames.sizeChanged, {\n value: newSize,\n oldValue: oldSize,\n });\n }\n handleStreamInserts(inserts = []) {\n super.handleStreamInserts(inserts, this._isMoreRowsResult ? this.cachedRowArray.length : 0);\n this.updateCachedRowArray();\n }\n handleStreamUpdates(updates = []) {\n super.handleStreamUpdates(updates);\n this.updateCachedRowArray();\n }\n /**\n * Handles stream deletes by removing records from the grid.\n * @param deletes - List of records to remove from the grid stream\n */\n handleStreamDeletes(deletes = []) {\n super.handleStreamDeletes(deletes);\n this.updateCachedRowArray();\n }\n loadMore() {\n switch (this.datasource.resourceType) {\n case ResourceType.DATASERVER:\n let viewNumber;\n if (this.viewNumber) {\n this._loadMoreCount = +this.viewNumber + 1;\n viewNumber = this._loadMoreCount;\n }\n else {\n this._loadMoreCount += 1;\n }\n this.connect.getMoreRows(this._sourceRef, viewNumber);\n break;\n case ResourceType.REQUEST_SERVER:\n this._loadMoreCount += 1;\n // TODO: Will get back to this soon, want to improve loadMore for isSnapshot + extras\n // const requestParams = this.datasource.requestOnlyParams;\n // // Set OFFSET for the next request\n // if (requestParams.DETAILS) {\n // requestParams.DETAILS.OFFSET = this._nextOffset;\n // }\n // this.datasource.snapshot(requestParams).then((result) => {\n // this.applyRequestServerData(result as RequestServerResult);\n // });\n break;\n }\n this.datasource.updateLoadMoreCount(this._loadMoreCount);\n }\n};\n__decorate([\n attr({ mode: 'boolean', attribute: 'keep-col-defs-on-clear-row-data' })\n], GridProGenesisDatasource.prototype, \"keepColDefsOnClearRowData\", void 0);\nGridProGenesisDatasource = __decorate([\n customElement({\n name: 'grid-pro-genesis-datasource',\n })\n], GridProGenesisDatasource);\nexport { GridProGenesisDatasource };\n","import { formatDateTimestamp, formatDateTimeTimestamp } from '@genesislcap/foundation-utils';\n/**\n * Returns the filter params for enum fields based on the detected filter type.\n * @param field - The field metadata\n * @returns the filter params for enum fields, or undefined if not applicable\n */\nexport function getEnumFilterParams(field, filterType) {\n if (filterType === 'agMultiColumnFilter') {\n return {\n filters: [\n {\n filter: 'agTextColumnFilter',\n },\n {\n filter: 'agSetColumnFilter',\n filterParams: {\n values: field.enumOptions,\n },\n },\n ],\n };\n }\n if (filterType === 'agSetColumnFilter') {\n return {\n values: field.enumOptions,\n };\n }\n return undefined;\n}\n/**\n * Return a column type base on each field's metadata from the selected resource.\n * @param metadataType - The type of the field/column\n * @returns the column type\n * @remarks Currently only handles numeric columns\n * @alpha\n */\nexport function getColumnType(metadataType) {\n switch (metadataType === null || metadataType === void 0 ? void 0 : metadataType.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'numericColumn';\n }\n}\n/**\n * Returns a formatted date value from the Grid Pro cell value.\n * @param param - A ValueFormatterParams object.\n * @returns A formatted date value.\n * @public\n */\nexport function dateValueFormatter({ value }) {\n return formatDateTimestamp(value);\n}\n/**\n * Returns a formatted date time value from the Grid Pro cell value.\n * @param param - A ValueFormatterParams object.\n * @returns A formatted date time value.\n * @public\n */\nexport function dateTimeValueFormatter({ value }) {\n return formatDateTimeTimestamp(value);\n}\n// TODO: possible duplicate - need to evaluate the differences\nconst isoDateTimeSliceEnd = 19;\n/**\n * Returns a formatted date value from an epoch number.\n * @param epoch - A number representing the number of milliseconds since the Unix epoch (1 January 1970 00:00:00 UTC).\n * @returns A formatted date value.\n * @alpha\n * @deprecated No longer used in the Grid Pro package.\n */\nexport function formatDateExtra(epoch) {\n return new Date(epoch)\n .toISOString()\n .slice(0, isoDateTimeSliceEnd)\n .replace(/-/g, '')\n .replace('T', '-');\n}\n/**\n * The time between allowing the grids to automatically resize.\n * @internal\n */\nexport const DEBOUNCED_RESIZE_TIME = 5;\n/**\n * The event names for the Grid Pro component.\n * @public\n */\nexport const gridProEventNames = {\n datasourceErrorClose: 'datasource-error-close',\n};\n/**\n * The error names for the Grid Pro component.\n * @public\n */\nexport const gridProErrorNames = {\n datasource: 'datasource',\n unknown: 'unknown',\n};\n/**\n * @remarks List of AG properties without rowData\n * @privateRemarks This is was removed from ag-grid v35 but we need to support it for backwards compatibility.\n * @internal\n */\nexport const AG_PROPERTIES = [\n 'rowSelection',\n 'overlayLoadingTemplate',\n 'overlayNoRowsTemplate',\n 'quickFilterText',\n 'rowModelType',\n 'editType',\n 'domLayout',\n 'clipboardDelimiter',\n 'rowGroupPanelShow',\n 'multiSortKey',\n 'pivotColumnGroupTotals',\n 'pivotRowTotals',\n 'pivotPanelShow',\n 'fillHandleDirection',\n 'serverSideStoreType',\n 'groupDisplayType',\n 'treeDataDisplayType',\n 'colResizeDefault',\n 'components',\n 'frameworkComponents',\n 'rowStyle',\n 'context',\n 'autoGroupColumnDef',\n 'localeText',\n 'icons',\n 'datasource',\n 'serverSideDatasource',\n 'viewportDatasource',\n 'groupRowRendererParams',\n 'aggFuncs',\n 'fullWidthCellRendererParams',\n 'defaultColGroupDef',\n 'defaultColDef',\n 'defaultCsvExportParams',\n 'defaultExcelExportParams',\n 'columnTypes',\n 'rowClassRules',\n 'detailCellRendererParams',\n 'loadingCellRendererParams',\n 'loadingOverlayComponentParams',\n 'noRowsOverlayComponentParams',\n 'popupParent',\n 'statusBar',\n 'sideBar',\n 'chartThemeOverrides',\n 'customChartThemes',\n 'chartToolPanelsDef',\n 'sortingOrder',\n 'alignedGrids',\n 'columnDefs',\n 'excelStyles',\n 'pinnedTopRowData',\n 'pinnedBottomRowData',\n 'chartThemes',\n 'rowClass',\n 'rowHeight',\n 'detailRowHeight',\n 'rowBuffer',\n 'headerHeight',\n 'groupHeaderHeight',\n 'floatingFiltersHeight',\n 'pivotHeaderHeight',\n 'pivotGroupHeaderHeight',\n 'groupDefaultExpanded',\n 'viewportRowModelPageSize',\n 'viewportRowModelBufferSize',\n 'autoSizePadding',\n 'maxBlocksInCache',\n 'maxConcurrentDatasourceRequests',\n 'tooltipShowDelay',\n 'tooltipHideDelay',\n 'cacheOverflowSize',\n 'paginationPageSize',\n 'cacheBlockSize',\n 'infiniteInitialRowCount',\n 'serverSideInitialRowCount',\n 'scrollbarWidth',\n 'asyncTransactionWaitMillis',\n 'blockLoadDebounceMillis',\n 'keepDetailRowsCount',\n 'undoRedoCellEditingLimit',\n 'cellFlashDelay',\n 'cellFadeDelay',\n 'tabIndex',\n 'suppressMakeColumnVisibleAfterUnGroup',\n 'suppressRowClickSelection',\n 'suppressCellSelection',\n 'suppressCellFocus',\n 'suppressHorizontalScroll',\n 'alwaysShowHorizontalScroll',\n 'alwaysShowVerticalScroll',\n 'debug',\n 'enableBrowserTooltips',\n 'enableCellExpressions',\n 'groupSelectsChildren',\n 'groupIncludeFooter',\n 'groupIncludeTotalFooter',\n 'groupSuppressBlankHeader',\n 'suppressMenuHide',\n 'suppressRowDeselection',\n 'unSortIcon',\n 'suppressMultiSort',\n 'alwaysMultiSort',\n 'singleClickEdit',\n 'suppressLoadingOverlay',\n 'suppressNoRowsOverlay',\n 'suppressAutoSize',\n 'skipHeaderOnAutoSize',\n 'suppressParentsInRowNodes',\n 'suppressColumnMoveAnimation',\n 'suppressMovableColumns',\n 'suppressFieldDotNotation',\n 'enableRangeSelection',\n 'enableRangeHandle',\n 'enableFillHandle',\n 'suppressClearOnFillReduction',\n 'deltaSort',\n 'suppressTouch',\n 'suppressAsyncEvents',\n 'allowContextMenuWithControlKey',\n 'suppressContextMenu',\n 'rememberGroupStateWhenNewData',\n 'enableCellChangeFlash',\n 'suppressDragLeaveHidesColumns',\n 'suppressRowGroupHidesColumns',\n 'suppressMiddleClickScrolls',\n 'suppressPreventDefaultOnMouseWheel',\n 'suppressCopyRowsToClipboard',\n 'copyHeadersToClipboard',\n 'copyGroupHeadersToClipboard',\n 'pivotMode',\n 'suppressAggFuncInHeader',\n 'suppressColumnVirtualisation',\n 'suppressAggAtRootLevel',\n 'suppressFocusAfterRefresh',\n 'functionsPassive',\n 'functionsReadOnly',\n 'animateRows',\n 'groupSelectsFiltered',\n 'groupRemoveSingleChildren',\n 'groupRemoveLowestSingleChildren',\n 'enableRtl',\n 'suppressClickEdit',\n 'rowDragEntireRow',\n 'rowDragManaged',\n 'suppressRowDrag',\n 'suppressMoveWhenRowDragging',\n 'rowDragMultiRow',\n 'enableGroupEdit',\n 'embedFullWidthRows',\n 'suppressPaginationPanel',\n 'groupHideOpenParents',\n 'groupAllowUnbalanced',\n 'pagination',\n 'paginationAutoPageSize',\n 'suppressScrollOnNewData',\n 'suppressScrollWhenPopupsAreOpen',\n 'purgeClosedRowNodes',\n 'cacheQuickFilter',\n 'excludeHiddenColumnsFromQuickFilter',\n 'ensureDomOrder',\n 'accentedSort',\n 'suppressChangeDetection',\n 'valueCache',\n 'valueCacheNeverExpires',\n 'aggregateOnlyChangedColumns',\n 'suppressAnimationFrame',\n 'suppressExcelExport',\n 'suppressCsvExport',\n 'treeData',\n 'masterDetail',\n 'suppressMultiRangeSelection',\n 'enterMovesDownAfterEdit',\n 'enterMovesDown',\n 'suppressPropertyNamesCheck',\n 'rowMultiSelectWithClick',\n 'suppressRowHoverHighlight',\n 'suppressRowTransform',\n 'suppressClipboardPaste',\n 'suppressLastEmptyLineOnPaste',\n 'enableCharts',\n 'enableChartToolPanelsButton',\n 'suppressChartToolPanelsButton',\n 'suppressMaintainUnsortedOrder',\n 'enableCellTextSelection',\n 'suppressBrowserResizeObserver',\n 'suppressMaxRenderedRowRestriction',\n 'excludeChildrenWhenTreeDataFiltering',\n 'tooltipMouseTrack',\n 'keepDetailRows',\n 'paginateChildRows',\n 'preventDefaultOnContextMenu',\n 'undoRedoCellEditing',\n 'allowDragFromColumnsToolPanel',\n 'immutableData',\n 'pivotSuppressAutoColumn',\n 'suppressExpandablePivotGroups',\n 'debounceVerticalScrollbar',\n 'detailRowAutoHeight',\n 'serverSideFilteringAlwaysResets',\n 'serverSideSortingAlwaysResets',\n 'serverSideSortAllLevels',\n 'serverSideFilterAllLevels',\n 'serverSideSortOnServer',\n 'serverSideFilterOnServer',\n 'suppressAggFilteredOnly',\n 'showOpenedGroup',\n 'suppressClipboardApi',\n 'suppressModelUpdateAfterUpdateTransaction',\n 'stopEditingWhenCellsLoseFocus',\n 'maintainColumnOrder',\n 'groupMaintainOrder',\n 'columnHoverHighlight',\n 'reactUi',\n 'suppressReactUi',\n 'readOnlyEdit',\n 'suppressRowVirtualisation',\n 'enableCellEditingOnBackspace',\n 'resetRowDataOnUpdate',\n 'removePivotHeaderRowWhenSingleValueColumn',\n 'suppressCopySingleCellRanges',\n 'groupRowsSticky',\n 'suppressServerSideInfiniteScroll',\n 'rowGroupPanelSuppressSort',\n 'allowShowChangeAfterFilter',\n 'suppressCutToClipboard',\n 'localeTextFunc',\n 'doesExternalFilterPass',\n 'groupRowAggNodes',\n 'isFullWidthCell',\n 'processSecondaryColDef',\n 'processSecondaryColGroupDef',\n 'processPivotResultColDef',\n 'processPivotResultColGroupDef',\n 'getBusinessKeyForNode',\n 'isRowSelectable',\n 'postSort',\n 'defaultGroupOrderComparator',\n 'rowDragText',\n 'groupRowRenderer',\n 'groupRowRendererFramework',\n 'fullWidthCellRenderer',\n 'fullWidthCellRendererFramework',\n 'loadingCellRenderer',\n 'loadingCellRendererFramework',\n 'loadingOverlayComponent',\n 'loadingOverlayComponentFramework',\n 'noRowsOverlayComponent',\n 'noRowsOverlayComponentFramework',\n 'detailCellRenderer',\n 'detailCellRendererFramework',\n 'getLocaleText',\n 'isExternalFilterPresent',\n 'getRowHeight',\n 'getRowClass',\n 'getRowStyle',\n 'getContextMenuItems',\n 'getMainMenuItems',\n 'processRowPostCreate',\n 'processCellForClipboard',\n 'getGroupRowAgg',\n 'getRowNodeId',\n 'isFullWidthRow',\n 'sendToClipboard',\n 'navigateToNextHeader',\n 'tabToNextHeader',\n 'navigateToNextCell',\n 'tabToNextCell',\n 'processCellFromClipboard',\n 'getDocument',\n 'postProcessPopup',\n 'getChildCount',\n 'getDataPath',\n 'isRowMaster',\n 'postSortRows',\n 'processHeaderForClipboard',\n 'processGroupHeaderForClipboard',\n 'paginationNumberFormatter',\n 'processDataFromClipboard',\n 'getServerSideGroupKey',\n 'isServerSideGroup',\n 'createChartContainer',\n 'getChartToolbarItems',\n 'fillOperation',\n 'isApplyServerSideTransaction',\n 'getServerSideStoreParams',\n 'getServerSideGroupLevelParams',\n 'isServerSideGroupOpenByDefault',\n 'isGroupOpenByDefault',\n 'initialGroupOrderComparator',\n 'loadingCellRendererSelector',\n 'getRowId',\n 'groupAggFiltering',\n];\n/**\n * @remarks Copied from AG Grid `PropertyKeys.NUMBER_PROPERTIES` (v29.2.0) to support\n * attribute-to-gridOptions coercion without relying on `ComponentUtil.copyAttributesToGridOptions`.\n * @internal\n */\nexport const AG_NUMBER_PROPERTIES = [\n 'rowHeight',\n 'detailRowHeight',\n 'rowBuffer',\n 'headerHeight',\n 'groupHeaderHeight',\n 'floatingFiltersHeight',\n 'pivotHeaderHeight',\n 'pivotGroupHeaderHeight',\n 'groupDefaultExpanded',\n 'viewportRowModelPageSize',\n 'viewportRowModelBufferSize',\n 'autoSizePadding',\n 'maxBlocksInCache',\n 'maxConcurrentDatasourceRequests',\n 'tooltipShowDelay',\n 'tooltipHideDelay',\n 'cacheOverflowSize',\n 'paginationPageSize',\n 'cacheBlockSize',\n 'infiniteInitialRowCount',\n 'serverSideInitialRowCount',\n 'scrollbarWidth',\n 'asyncTransactionWaitMillis',\n 'blockLoadDebounceMillis',\n 'keepDetailRowsCount',\n 'undoRedoCellEditingLimit',\n 'cellFlashDelay',\n 'cellFadeDelay',\n 'tabIndex',\n];\n/**\n * @remarks Copied from AG Grid `PropertyKeys.BOOLEAN_PROPERTIES` (v29.2.0) to support\n * attribute-to-gridOptions coercion without relying on `ComponentUtil.copyAttributesToGridOptions`.\n * @internal\n */\nexport const AG_BOOLEAN_PROPERTIES = [\n 'suppressMakeColumnVisibleAfterUnGroup',\n 'suppressRowClickSelection',\n 'suppressCellSelection',\n 'suppressCellFocus',\n 'suppressHorizontalScroll',\n 'alwaysShowHorizontalScroll',\n 'alwaysShowVerticalScroll',\n 'debug',\n 'enableBrowserTooltips',\n 'enableCellExpressions',\n 'groupSelectsChildren',\n 'groupIncludeFooter',\n 'groupIncludeTotalFooter',\n 'groupSuppressBlankHeader',\n 'suppressMenuHide',\n 'suppressRowDeselection',\n 'unSortIcon',\n 'suppressMultiSort',\n 'alwaysMultiSort',\n 'singleClickEdit',\n 'suppressLoadingOverlay',\n 'suppressNoRowsOverlay',\n 'suppressAutoSize',\n 'skipHeaderOnAutoSize',\n 'suppressParentsInRowNodes',\n 'suppressColumnMoveAnimation',\n 'suppressMovableColumns',\n 'suppressFieldDotNotation',\n 'enableRangeSelection',\n 'enableRangeHandle',\n 'enableFillHandle',\n 'suppressClearOnFillReduction',\n 'deltaSort',\n 'suppressTouch',\n 'suppressAsyncEvents',\n 'allowContextMenuWithControlKey',\n 'suppressContextMenu',\n 'rememberGroupStateWhenNewData',\n 'enableCellChangeFlash',\n 'suppressDragLeaveHidesColumns',\n 'suppressRowGroupHidesColumns',\n 'suppressMiddleClickScrolls',\n 'suppressPreventDefaultOnMouseWheel',\n 'suppressCopyRowsToClipboard',\n 'copyHeadersToClipboard',\n 'copyGroupHeadersToClipboard',\n 'pivotMode',\n 'suppressAggFuncInHeader',\n 'suppressColumnVirtualisation',\n 'suppressAggAtRootLevel',\n 'suppressFocusAfterRefresh',\n 'functionsPassive',\n 'functionsReadOnly',\n 'animateRows',\n 'groupSelectsFiltered',\n 'groupRemoveSingleChildren',\n 'groupRemoveLowestSingleChildren',\n 'enableRtl',\n 'suppressClickEdit',\n 'rowDragEntireRow',\n 'rowDragManaged',\n 'suppressRowDrag',\n 'suppressMoveWhenRowDragging',\n 'rowDragMultiRow',\n 'enableGroupEdit',\n 'embedFullWidthRows',\n 'suppressPaginationPanel',\n 'groupHideOpenParents',\n 'groupAllowUnbalanced',\n 'pagination',\n 'paginationAutoPageSize',\n 'suppressScrollOnNewData',\n 'suppressScrollWhenPopupsAreOpen',\n 'purgeClosedRowNodes',\n 'cacheQuickFilter',\n 'excludeHiddenColumnsFromQuickFilter',\n 'ensureDomOrder',\n 'accentedSort',\n 'suppressChangeDetection',\n 'valueCache',\n 'valueCacheNeverExpires',\n 'aggregateOnlyChangedColumns',\n 'suppressAnimationFrame',\n 'suppressExcelExport',\n 'suppressCsvExport',\n 'treeData',\n 'masterDetail',\n 'suppressMultiRangeSelection',\n 'enterMovesDownAfterEdit',\n 'enterMovesDown',\n 'suppressPropertyNamesCheck',\n 'rowMultiSelectWithClick',\n 'suppressRowHoverHighlight',\n 'suppressRowTransform',\n 'suppressClipboardPaste',\n 'suppressLastEmptyLineOnPaste',\n 'enableCharts',\n 'enableChartToolPanelsButton',\n 'suppressChartToolPanelsButton',\n 'suppressMaintainUnsortedOrder',\n 'enableCellTextSelection',\n 'suppressBrowserResizeObserver',\n 'suppressMaxRenderedRowRestriction',\n 'excludeChildrenWhenTreeDataFiltering',\n 'tooltipMouseTrack',\n 'keepDetailRows',\n 'paginateChildRows',\n 'preventDefaultOnContextMenu',\n 'undoRedoCellEditing',\n 'allowDragFromColumnsToolPanel',\n 'immutableData',\n 'pivotSuppressAutoColumn',\n 'suppressExpandablePivotGroups',\n 'debounceVerticalScrollbar',\n 'detailRowAutoHeight',\n 'serverSideFilteringAlwaysResets',\n 'serverSideSortingAlwaysResets',\n 'serverSideSortAllLevels',\n 'serverSideFilterAllLevels',\n 'serverSideSortOnServer',\n 'serverSideFilterOnServer',\n 'suppressAggFilteredOnly',\n 'showOpenedGroup',\n 'suppressClipboardApi',\n 'suppressModelUpdateAfterUpdateTransaction',\n 'stopEditingWhenCellsLoseFocus',\n 'maintainColumnOrder',\n 'groupMaintainOrder',\n 'columnHoverHighlight',\n 'reactUi',\n 'suppressReactUi',\n 'readOnlyEdit',\n 'suppressRowVirtualisation',\n 'enableCellEditingOnBackspace',\n 'resetRowDataOnUpdate',\n 'removePivotHeaderRowWhenSingleValueColumn',\n 'suppressCopySingleCellRanges',\n 'groupRowsSticky',\n 'suppressServerSideInfiniteScroll',\n 'rowGroupPanelSuppressSort',\n 'allowShowChangeAfterFilter',\n 'suppressCutToClipboard',\n];\nconst AG_NUMBER_PROPERTIES_SET = new Set(AG_NUMBER_PROPERTIES);\nconst AG_BOOLEAN_PROPERTIES_SET = new Set(AG_BOOLEAN_PROPERTIES);\nconst AG_PROPERTIES_SET = new Set(AG_PROPERTIES);\nfunction toBoolean(value) {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n // for boolean, compare to empty String to allow attributes appearing with\n // no value to be treated as 'true'\n return value.toUpperCase() === 'TRUE' || value === '';\n }\n return false;\n}\nfunction toNumber(value) {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n}\n/**\n * @remarks Copied from AG Grid `ComponentUtil.copyAttributesToGridOptions` (v29.2.0).\n * This is used to coerce string/attribute values into the correct types for gridOptions.\n * @internal\n */\nexport function copyAttributesToGridOptions(gridOptions, component) {\n // create empty grid options if none were passed\n if (typeof gridOptions !== 'object') {\n gridOptions = {};\n }\n // to allow array style lookup in TypeScript, take type away from 'gridOptions'\n const pGridOptions = gridOptions;\n const keys = Object.keys(component);\n // Loop through component props, if they are not undefined and a valid gridOption copy to gridOptions\n keys.forEach((key) => {\n if (!AG_PROPERTIES_SET.has(key)) {\n return;\n }\n const value = component[key];\n if (typeof value === 'undefined') {\n return;\n }\n // Match ComponentUtil.getValue behaviour (limited to our local boolean/number sets + special-case)\n let coercedValue = value;\n if (AG_NUMBER_PROPERTIES_SET.has(key)) {\n coercedValue = toNumber(value);\n }\n else if (AG_BOOLEAN_PROPERTIES_SET.has(key)) {\n coercedValue = toBoolean(value);\n }\n else if (key === 'groupAggFiltering' && typeof value !== 'function') {\n coercedValue = toBoolean(value);\n }\n if (coercedValue !== undefined) {\n pGridOptions[key] = coercedValue;\n }\n });\n return gridOptions;\n}\n","import { __awaiter, __decorate, __rest } from \"tslib\";\nimport { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model';\nimport { ComponentUtil, Events, Grid, ModuleRegistry } from '@ag-grid-community/core';\nimport { CsvExportModule } from '@ag-grid-community/csv-export';\nimport { DatasourceDefaults } from '@genesislcap/foundation-comms';\nimport { avoidTreeShaking, insertDocumentCSSRule, LifecycleMixin, respondToVisibility, } from '@genesislcap/foundation-utils';\nimport { attr, DOM, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { classNames } from '@microsoft/fast-web-utilities';\nimport * as changeCase from 'change-case';\nimport debounce from 'lodash.debounce';\nimport { GridProCell } from './cell';\nimport { DateEditor, MultiselectEditor, NumberEditor, SelectEditor, StringEditor, } from './cell-editors';\nimport { ActionRenderer, ActionsMenuRenderer, BooleanRenderer, EditableRenderer, IconRenderer, SelectRenderer, StatusPillRenderer, } from './cell-renderers';\nimport { GridProColumn } from './column';\nimport { GridProClientSideDatasource, GridProServerSideDatasource } from './datasource';\nimport { baseDatasourceEventNames } from './datasource/base.types';\nimport { agThemeFontFaceMap, defaultAgGridFontFace } from './external';\nimport { GridProGenesisDatasource, gridProGenesisDatasourceEventNames, } from './grid-pro-genesis-datasource';\nimport { datasourceEventNames, } from './grid-pro-genesis-datasource/datasource-events.types';\nimport { AG_PROPERTIES, copyAttributesToGridOptions, DEBOUNCED_RESIZE_TIME, gridProErrorNames, gridProEventNames, } from './grid-pro.definitions';\nimport { foundationGridProStyles as styles } from './grid-pro.styles';\nimport { gridProTemplate as template } from './grid-pro.template';\nimport { AgGridTheme, agThemeFontsId, agThemeTokenMapClassname, DEFAULT_STATUS_BAR_CONFIG, EDITED_COLUMN_FIELD, ERROR_COLUMN_FIELD, GRID_READY_EVENT, GridOptionsConfig, GridProRendererTypes, GridProStatusBarTypes, } from './grid-pro.types';\nimport { StatePersistence } from './state-persistence';\nimport { LabelValueStatusBarComponent, LoadMoreStatusBarComponent, PaginationStatusBarComponent, ReloadStatusBarComponent, RowCountStatusBarComponent, } from './status-bar-components';\nimport { ErrorTooltip } from './tooltips';\nimport { convertColDefsToColumnStates, convertToKebabCase, logger, mergeAndDedupColDefWithColumnState, sanitizeColumnState, } from './utils';\navoidTreeShaking(GridProGenesisDatasource, GridProClientSideDatasource, GridProServerSideDatasource, GridProCell, GridProColumn);\nModuleRegistry.registerModules([CsvExportModule, ClientSideRowModelModule]);\nconst DEBOUNCE_TIME = 400;\n// Re-export AG_PROPERTIES from definitions for backwards compatibility\nexport { AG_PROPERTIES };\n/**\n * The Grid Pro element.\n * @remarks Grid Pro is a Web Component wrapper around the AG Grid Community library.\n * @public\n * @tagname %%prefix%%-grid-pro\n *\n * @fires gridReady - Fired when AG Grid is ready (detail includes the grid-ready event and grid id)\n * @fires onGridReady - Deprecated alias for the grid-ready signal; prefer `gridReady`\n * @fires gridready - Native `Event` from `globalEventListener` when AG Grid fires `gridReady` (`agGridDetails` holds the AG Grid event)\n * @remarks Re-emits AG Grid public API events when listeners are registered via `addEventListener` (event names match `ComponentUtil.PUBLIC_EVENTS` from `@ag-grid-community/core`). The same AG Grid events are also dispatched as native `Event`s with lowercased `type` and payload on `agGridDetails` (for example `addEventListener('columnresized', ...)`).\n */\nexport class GridPro extends LifecycleMixin(FoundationElement) {\n rowDataChanged(_, rowData) {\n if (this.initialised) {\n this.gridApi.setRowData(rowData);\n }\n }\n themeChanged(oldValue, newValue) {\n if (!newValue) {\n this.classNames = '';\n this.destroyFontFace();\n return;\n }\n this.classNames = classNames(agThemeTokenMapClassname(newValue), newValue);\n this.insertFontFace(newValue);\n }\n getfilterModel() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistFilterModelKey) {\n return this._filterConfig;\n }\n const filterModel = yield this.statePersistence.getFilterModel(this.persistFilterModelKey);\n return filterModel;\n });\n }\n setFilterModel(value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistFilterModelKey) {\n this._filterConfig = value;\n return;\n }\n yield this.statePersistence.saveFilterModel(this.persistFilterModelKey, value);\n });\n }\n constructor() {\n super();\n // Cache for total column width to avoid repeated calculations\n this.cachedTotalColumnWidth = null;\n this.columnCount = 0;\n this.gridErrorItems = [];\n this.disposed = false;\n this.debouncedSaveColumnState = debounce(this.saveColumnState.bind(this), DEBOUNCE_TIME);\n this.debouncedSaveFilterModel = debounce(this.cacheFilterConfig.bind(this), DEBOUNCE_TIME);\n // Genesis-specific attrs\n this.autoCellRendererByType = false;\n this.onlyTemplateColDefs = false;\n // AG-specific attrs\n /**\n * Boolean attribute to control whether the grid autosizes the columns upon interaction.\n * This will disable the column widths from being manually set, and doesn't save the widths\n * in local storage if you are using `persist-column-state-key`.\n */\n this.gridAutosizingEnabled = false;\n /**\n * Boolean attribute to control whether the grid automatically sizes columns to fit their content.\n * This will call AG Grid's autoSizeColumns() method to automatically adjust column widths based on content.\n * @public\n */\n this.sizeColumnsToContent = false;\n /**\n * Boolean attribute to adjust the size of columns to fit the available horizontal space.\n * This will call AG Grid's sizeColumnsToFit() method.\n * @public\n */\n this.sizeColumnsToFit = false;\n /**\n * The index to add new rows to when using `applyTransaction` or `applyTransactionAsync`\n */\n this.addIndex = 0;\n /**\n * Whether to use the `applyTransactionAsync` function for *add* transactions\n * @remarks Defaults to false\n */\n this.asyncAdd = false;\n /**\n * Whether to use the `applyTransactionAsync` function for *remove* transactions\n * @remarks Defaults to false\n */\n this.asyncRemove = false;\n /**\n * Whether to use the `applyTransactionAsync` function for *update* transactions\n * @remarks Defaults to true\n */\n this.asyncUpdate = true;\n /**\n * If false, will disable cell flashing for all cells by default, unless otherwise defined in custom colDef\n * @remarks Defaults to true\n */\n this.enableCellFlashing = false;\n /**\n * @deprecated - use `enableRowFlashing` instead.\n */\n this.enabledRowFlashing = false;\n /**\n * If true, will enable row flashing for all rows for `add` async transactions\n */\n this.enableRowFlashing = false;\n /**\n * The default column config to reset to when deleteColumnState is called.\n */\n this.defaultColumnConfig = [];\n this.gridFontFace = defaultAgGridFontFace;\n this.columnComponentName = 'grid-pro-column';\n this.theme = AgGridTheme.alpine;\n this.themeMode = 'dark';\n /**\n * Enable pagination for the grid.\n * @remarks\n * When enabled, the grid will automatically configure pagination settings.\n * Note that AG Grid's full pagination functionality requires the Enterprise module.\n * While basic pagination will work in Community edition, advanced features like\n * custom pagination components require Enterprise.\n * @see https://www.ag-grid.com/javascript-data-grid/row-pagination/\n * @see https://www.ag-grid.com/javascript-data-grid/server-side-model-pagination/\n */\n this.pagination = false;\n /**\n * Configuration for the grid status bar components.\n * @remarks\n * This requires AG Grid Enterprise module to be enabled.\n * The status bar will only be displayed if the Enterprise module is available.\n * @see https://www.ag-grid.com/javascript-data-grid/component-status-bar/\n */\n this.statusBarConfig = DEFAULT_STATUS_BAR_CONFIG;\n /**\n * Enables or disables the grid status bar.\n * @remarks\n * Default is false.\n * When disabled, no status bar will be displayed regardless of statusBarConfig.\n * This requires AG Grid Enterprise module to be available for the status bar to be displayed when enabled.\n */\n this.withStatusBar = false;\n this.rehydrationAttempted = false;\n this.eventHandlers = [];\n this.gridEventsQueue = [];\n this.registeredGridEvents = new Set();\n this.gridEventListeners = new Map();\n this.boundGlobalEventListener = this.globalEventListener.bind(this);\n this._filterConfig = undefined;\n this.agAttributes = {};\n this.agPropertiesMap = AG_PROPERTIES.reduce((map, property) => {\n map[property.toLowerCase()] = property;\n map[convertToKebabCase(property)] = property;\n return map;\n }, {});\n const hideDataSourceError = this.hideDatasourceError.bind(this);\n // Bind all event handlers once to ensure proper add/remove of listeners\n this.eventHandlers.push(\n // Root event listeners\n [gridProGenesisDatasourceEventNames.dataInit, hideDataSourceError], [gridProEventNames.datasourceErrorClose, hideDataSourceError], [baseDatasourceEventNames.error, this.handleBaseDatasourceError.bind(this)], [baseDatasourceEventNames.connected, hideDataSourceError], \n // Datasource event listeners\n [datasourceEventNames.initialize, this.handleInitialize.bind(this)], [datasourceEventNames.dataLoaded, this.handleDataLoaded.bind(this)], [datasourceEventNames.dataChanged, this.handleDataChanged.bind(this)], [datasourceEventNames.schemaUpdated, this.handleSchemaUpdated.bind(this)], [datasourceEventNames.dataCleared, this.handleDataCleared.bind(this)], [datasourceEventNames.loadingStarted, this.handleLoadingStarted.bind(this)], [datasourceEventNames.loadingFinished, this.handleLoadingFinished.bind(this)], [datasourceEventNames.noDataAvailable, this.handleNoDataAvailable.bind(this)], [datasourceEventNames.filtersRestored, this.handleFiltersRestored.bind(this)], [datasourceEventNames.moreDataAvailable, this.handleMoreDataAvailable.bind(this)], [datasourceEventNames.error, this.handleDatasourceError.bind(this)], [datasourceEventNames.destroy, this.handleDatasourceDestroy.bind(this)], \n // Server-side specific events\n [datasourceEventNames.cacheFilterConfig, this.cacheFilterConfig.bind(this)], [datasourceEventNames.refreshServerSide, this.handleRefreshServerSide.bind(this)], [datasourceEventNames.setServerSideDatasource, this.handleSetServerSideDatasource.bind(this)], [datasourceEventNames.addGridCssClass, this.handleAddGridCssClass.bind(this)], [datasourceEventNames.removeGridCssClass, this.handleRemoveGridCssClass.bind(this)], [\n datasourceEventNames.applyServerSideTransaction,\n this.handleApplyServerSideTransaction.bind(this),\n ]);\n }\n /**\n * Adds an event listener to the grid element.\n * @param eventType - The event type to listen for. Recommened to use the `Events` from AG Grid.\n * @param listener - The event listener to call when the event is fired.\n * @param options - An options object that specifies characteristics about the event listener.\n * @privateRemarks\n * This will change once we do the AG Upgrade and `eventType` will be correctly typed.\n */\n addEventListener(eventType, listener, options) {\n super.addEventListener(eventType, listener, options);\n if (ComponentUtil.PUBLIC_EVENTS.includes(eventType)) {\n if (this.gridApi) {\n this.addGridEventListener(eventType);\n }\n else {\n if (!this.gridEventsQueue.includes(eventType)) {\n this.gridEventsQueue.push(eventType);\n }\n }\n }\n }\n addGridEventListener(eventType) {\n if (this.registeredGridEvents.has(eventType)) {\n return;\n }\n this.registeredGridEvents.add(eventType);\n const listener = (e) => {\n this.$emit(eventType, e);\n };\n this.gridEventListeners.set(eventType, listener);\n this.gridApi.addEventListener(eventType, listener);\n }\n handleError(type, event) {\n this.gridErrorItems = [...this.gridErrorItems, { detail: event.detail, type }];\n }\n handleBaseDatasourceError(event) {\n // Map base datasource errors to grid-pro error format\n const gridProError = {\n detail: { message: event.detail.message },\n type: gridProErrorNames.datasource,\n };\n this.gridErrorItems = [\n ...this.gridErrorItems,\n { detail: gridProError.detail, type: gridProError.type },\n ];\n }\n hideDatasourceError() {\n this.gridErrorItems = this.gridErrorItems.filter((item) => item.type !== gridProErrorNames.datasource);\n this.removeAttribute('ds-disconnected');\n }\n connectedCallback() {\n super.connectedCallback();\n this.disposed = false;\n if (this.gridAutosizingEnabled) {\n this.visibilityObserverCleanup = respondToVisibility(this, (gridVisible) => {\n if (gridVisible) {\n this.debouncedColumnAutosize();\n }\n });\n }\n this.rehydrationAttempted = false;\n this.eventHandlers.forEach(([eventName, handler]) => {\n this.addEventListener(eventName, handler);\n });\n if (!this.shouldRunConnect)\n return;\n AG_PROPERTIES.forEach((key) => {\n Object.defineProperty(this, key, {\n set: (v) => {\n this.agAttributeChangedCallback(convertToKebabCase(key), undefined, v);\n },\n enumerable: true,\n configurable: true,\n });\n });\n this.paginationPageSize = this.isServerSide\n ? this.gridProDatasource.maxRows\n : DatasourceDefaults.DEFAULT_PAGINATION_PAGE_SIZE;\n }\n disconnectedCallback() {\n this.disposed = true;\n this.debouncedSaveColumnState.cancel();\n this.debouncedSaveFilterModel.cancel();\n if (this.visibilityObserverCleanup) {\n this.visibilityObserverCleanup();\n this.visibilityObserverCleanup = undefined;\n }\n super.disconnectedCallback();\n this.rehydrationAttempted = false;\n const shouldRunDisconnect = this.shouldRunDisconnect;\n this.eventHandlers.forEach(([eventName, handler]) => {\n this.removeEventListener(eventName, handler);\n });\n if (!shouldRunDisconnect) {\n // If lifecycle is temporarily blocked (e.g. layout drag/reconnect path),\n // still tear down once the element remains detached on the next tick.\n queueMicrotask(() => {\n if (!this.isConnected) {\n this.performDisconnectCleanup();\n }\n });\n return;\n }\n this.performDisconnectCleanup();\n }\n performDisconnectCleanup() {\n if (this.debounced) {\n clearTimeout(this.debounced);\n this.debounced = null;\n }\n this.initialised = false;\n this.clearLocalGridOptions();\n this.destroyGridInstance();\n // Destroy can synchronously emit final grid events; cancel again to avoid\n // retaining this element through trailing debounce timers.\n this.debouncedSaveColumnState.cancel();\n this.debouncedSaveFilterModel.cancel();\n this.invalidateColumnWidthCache();\n // Clear registered events when grid is destroyed\n this.registeredGridEvents.clear();\n this.gridEventsQueue = [];\n }\n /**\n * Tear down the AG Grid instance. Prefer {@link GridApi#destroy}; if `gridApi` is not set yet\n * (e.g. disconnect before `grid-ready`), fall back to {@link Grid#destroy} on the vanilla wrapper.\n */\n destroyGridInstance() {\n if (this.gridApi) {\n this.gridEventListeners.forEach((listener, eventType) => {\n this.gridApi.removeEventListener(eventType, listener);\n });\n }\n this.gridEventListeners.clear();\n if (this.gridApi) {\n this.gridApi.destroy();\n }\n else if (this.agGrid) {\n this.agGrid.destroy();\n }\n if (this.gridSlot) {\n this.gridSlot.replaceChildren();\n }\n this.gridApi = undefined;\n this.columnApi = undefined;\n this.agGrid = undefined;\n }\n /**\n * Handles datasource initialization\n * @internal\n */\n handleInitialize(event) {\n const { options, keepColDefsOnClearRowData } = event.detail;\n let columnDefinitions;\n if (keepColDefsOnClearRowData) {\n columnDefinitions = this.gridApi.getColumnDefs();\n this.columnState = this.columnApi.getColumnState();\n }\n const gridOptions = Object.assign(Object.assign(Object.assign({}, this.agGridOptions), (columnDefinitions && { columnDefs: columnDefinitions })), options);\n this.gridOptions = Object.assign({}, gridOptions);\n this.initGrid();\n }\n /**\n * Handles data loading from datasource\n * @internal\n */\n handleDataLoaded(event) {\n const { data } = event.detail;\n if (this.gridApi) {\n this.gridApi.setRowData(data);\n }\n }\n /**\n * Handles data changes from datasource\n * @internal\n */\n handleDataChanged(event) {\n var _a, _b, _c;\n const { changes } = event.detail;\n if (!this.gridApi)\n return;\n if (((_a = changes.add) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n if (this.asyncAdd) {\n this.gridApi.applyTransactionAsync({ add: changes.add, addIndex: this.addIndex }, (result) => {\n this.flashAddedCells(result === null || result === void 0 ? void 0 : result.add);\n });\n }\n else {\n const result = this.gridApi.applyTransaction({ add: changes.add, addIndex: this.addIndex });\n this.flashAddedCells(result === null || result === void 0 ? void 0 : result.add);\n }\n }\n if (((_b = changes.update) === null || _b === void 0 ? void 0 : _b.length) > 0) {\n if (this.asyncUpdate) {\n this.gridApi.applyTransactionAsync({ update: changes.update });\n }\n else {\n this.gridApi.applyTransaction({ update: changes.update });\n }\n }\n if (((_c = changes.remove) === null || _c === void 0 ? void 0 : _c.length) > 0) {\n if (this.asyncRemove) {\n this.gridApi.applyTransactionAsync({ remove: changes.remove });\n }\n else {\n this.gridApi.applyTransaction({ remove: changes.remove });\n }\n }\n }\n flashAddedCells(rowNodes) {\n if (this.enableRowFlashing && (rowNodes === null || rowNodes === void 0 ? void 0 : rowNodes.length)) {\n this.gridApi.flashCells({ rowNodes });\n }\n }\n /**\n * Handles schema updates from datasource\n * @internal\n */\n handleSchemaUpdated(event) {\n return __awaiter(this, void 0, void 0, function* () {\n const { schema, metadata } = event.detail;\n const preSetColumnDefs = this.gridApi.getColumnDefs();\n if (!preSetColumnDefs || preSetColumnDefs.length === 0) {\n const colDefs = metadata\n .map((field) => {\n var _a;\n return (Object.assign(Object.assign({}, schema.find((colDef) => colDef.field === field.name)), (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getColumnDef(field.name)));\n })\n .map((colDef) => (Object.assign(Object.assign({}, colDef), { cellRenderer: this.autoCellRendererByType ? colDef.cellRenderer : undefined, cellEditor: this.autoCellRendererByType ? colDef.cellEditor : undefined })));\n const colDefsMergedWithTemplateDefs = yield this.mergeAllColumnDefsAndStates(colDefs, true);\n if (colDefsMergedWithTemplateDefs) {\n // AG's internals will check if group/pivot are NOT NULL to trigger module registration warning for `row-grouping`.\n // When using gridApi to get the currentState to save, all boolean will return false when they were not set at all.\n // ColDef type is `boolean` while ColumnState is `boolean | null`.\n colDefsMergedWithTemplateDefs.forEach((col) => {\n if (!col.rowGroup) {\n col.rowGroup = null;\n }\n if (!col.pivot) {\n col.pivot = null;\n }\n });\n this.gridApi.setColumnDefs(colDefsMergedWithTemplateDefs);\n }\n }\n });\n }\n /**\n * Handles data clearing from datasource\n * @internal\n */\n handleDataCleared(event) {\n var _a, _b;\n const { includeSchema } = event.detail;\n if (!this.gridApi)\n return;\n // For server-side, these methods are handled via server-side transactions\n // Only flush async transactions for client-side row model\n if (!this.isServerSide) {\n // Flush any pending async transactions\n if (this.asyncAdd || this.asyncUpdate || this.asyncRemove) {\n (_b = (_a = this.gridApi).flushAsyncTransactions) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n }\n if (includeSchema) {\n this.gridApi.setColumnDefs([]);\n }\n // setRowData only works for client-side row model\n // For server-side, data clearing is handled via server-side transactions\n if (!this.isServerSide) {\n this.gridApi.setRowData([]);\n this.gridApi.refreshCells({ force: true });\n }\n }\n /**\n * Handles loading started from datasource\n * @internal\n */\n handleLoadingStarted() {\n if (this.gridApi) {\n this.gridApi.showLoadingOverlay();\n }\n }\n /**\n * Handles loading finished from datasource\n * @internal\n */\n handleLoadingFinished() {\n if (this.gridApi) {\n this.gridApi.hideOverlay();\n }\n }\n /**\n * Handles no data available from datasource\n * @internal\n */\n handleNoDataAvailable() {\n if (this.gridApi) {\n this.gridApi.showNoRowsOverlay();\n }\n }\n /**\n * Handles filter restoration from datasource\n * @internal\n */\n handleFiltersRestored() {\n this.restoreCachedFilterConfig();\n }\n /**\n * Handles more data availability from datasource\n * @internal\n */\n handleMoreDataAvailable(event) {\n var _a, _b, _c, _d;\n const { hasMoreData, sourceRef } = event.detail;\n if (!this.gridApi)\n return;\n const statusBar = (_b = (_a = this.gridApi).getStatusPanel) === null || _b === void 0 ? void 0 : _b.call(_a, GridProStatusBarTypes.loadMore);\n if (statusBar) {\n (_d = (_c = statusBar).updateParams) === null || _d === void 0 ? void 0 : _d.call(_c, {\n moreRows: hasMoreData,\n sourceRef,\n });\n }\n }\n /**\n * Handles datasource errors\n * @internal\n */\n handleDatasourceError(event) {\n // Set visual indicator on grid\n this.setAttribute('ds-disconnected', 'ds-disconnected');\n }\n /**\n * Handles datasource destroy\n * @internal\n */\n handleDatasourceDestroy() {\n this.clearLocalGridOptions();\n }\n /**\n * Handles refreshing server-side data\n * @internal\n */\n handleRefreshServerSide(event) {\n const { purge } = event.detail;\n if (this.gridApi) {\n this.gridApi.refreshServerSide({ purge });\n }\n }\n /**\n * Handles setting server-side datasource\n * @internal\n */\n handleSetServerSideDatasource(event) {\n const { datasource } = event.detail;\n if (this.gridApi) {\n this.gridApi.setServerSideDatasource(datasource);\n }\n }\n /**\n * Handles adding CSS class to grid element\n * @internal\n */\n handleAddGridCssClass(event) {\n var _a;\n const { className } = event.detail;\n // Add CSS class to grid element\n const gridElement = ((_a = this.gridSlot) === null || _a === void 0 ? void 0 : _a.parentElement) || this;\n if (gridElement) {\n gridElement.classList.add(className);\n }\n }\n /**\n * Handles removing CSS class from grid element\n * @internal\n */\n handleRemoveGridCssClass(event) {\n var _a;\n const { className } = event.detail;\n // Remove CSS class from grid element\n const gridElement = ((_a = this.gridSlot) === null || _a === void 0 ? void 0 : _a.parentElement) || this;\n if (gridElement) {\n gridElement.classList.remove(className);\n }\n }\n /**\n * Handles applying server-side transactions\n * @internal\n */\n handleApplyServerSideTransaction(event) {\n const { transaction, async, callback } = event.detail;\n if (!this.gridApi)\n return;\n if (async) {\n this.gridApi.applyServerSideTransactionAsync(transaction, callback);\n }\n else {\n const result = this.gridApi.applyServerSideTransaction(transaction);\n if (callback) {\n callback(result);\n }\n }\n }\n combineAllGridComponents(gridOptionsComponents) {\n const defaultFoundationAgComponents = {\n [GridProRendererTypes.action]: ActionRenderer,\n [GridProRendererTypes.actionsMenu]: ActionsMenuRenderer,\n [GridProRendererTypes.boolean]: BooleanRenderer,\n [GridProRendererTypes.editable]: EditableRenderer,\n [GridProRendererTypes.icon]: IconRenderer,\n [GridProRendererTypes.statusPill]: StatusPillRenderer,\n [GridProRendererTypes.select]: SelectRenderer,\n [GridProRendererTypes.selectEditor]: SelectEditor,\n [GridProRendererTypes.numberEditor]: NumberEditor,\n [GridProRendererTypes.multiselectEditor]: MultiselectEditor,\n [GridProRendererTypes.dateEditor]: DateEditor,\n [GridProRendererTypes.stringEditor]: StringEditor,\n [GridProStatusBarTypes.labelValue]: LabelValueStatusBarComponent,\n [GridProStatusBarTypes.loadMore]: LoadMoreStatusBarComponent,\n [GridProStatusBarTypes.pagination]: PaginationStatusBarComponent,\n [GridProStatusBarTypes.reload]: ReloadStatusBarComponent,\n [GridProStatusBarTypes.rowCount]: RowCountStatusBarComponent,\n };\n return Object.assign(Object.assign(Object.assign({}, defaultFoundationAgComponents), gridOptionsComponents), this.gridComponents);\n }\n statePersistanceEnabled() {\n if (!this.persistColumnStateKey || this.persistColumnStateKey.length === 0) {\n return false;\n }\n return true;\n }\n /**\n * Gets the currently selected rows from the grid\n * @public\n * @returns Array of selected row data\n */\n getSelectedRows() {\n var _a, _b, _c, _d;\n try {\n if (!this.initialised || !this.gridApi) {\n return [];\n }\n const rowSelectionMode = (_a = this.gridOptions) === null || _a === void 0 ? void 0 : _a.rowSelection;\n // If row selection is enabled (single or multiple), use row selection only\n if (rowSelectionMode === 'single' || rowSelectionMode === 'multiple') {\n if (this.gridApi.getSelectedRows && this.gridApi.getSelectedRows().length > 0) {\n return this.gridApi.getSelectedRows();\n }\n return [];\n }\n // If row selection is disabled (undefined/none), use cell range selection\n if (((_b = this.gridApi) === null || _b === void 0 ? void 0 : _b.getCellRanges) && this.gridApi.getCellRanges().length > 0) {\n return this.getCellRangeRowData();\n }\n // Fallback: if no cell ranges but range selection is disabled,\n // check for focused cell (single cell selection)\n if (!((_c = this.gridOptions) === null || _c === void 0 ? void 0 : _c.enableRangeSelection)) {\n const focusedCell = (_d = this.gridApi) === null || _d === void 0 ? void 0 : _d.getFocusedCell();\n if (focusedCell) {\n const rowNode = this.gridApi.getDisplayedRowAtIndex(focusedCell.rowIndex);\n if (rowNode === null || rowNode === void 0 ? void 0 : rowNode.data) {\n return [rowNode.data];\n }\n }\n }\n return [];\n }\n catch (error) {\n logger.error('Grid Pro: Error getting selected rows:', error);\n return [];\n }\n }\n /**\n * Gets the row data from selected cell ranges\n * @internal\n * @returns Array containing the row data from selected cell ranges, or empty array if none\n */\n getCellRangeRowData() {\n var _a;\n if (!((_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getCellRanges)) {\n return [];\n }\n const cellRanges = this.gridApi.getCellRanges();\n if (cellRanges.length === 0) {\n return [];\n }\n const rowData = [];\n // Collect unique row data from all selected cell ranges\n cellRanges.forEach((range) => {\n const startIndex = range.startRow.rowIndex;\n const endIndex = range.endRow.rowIndex;\n // Iterate over indices directly for better performance\n for (let rowIndex = startIndex; rowIndex <= endIndex; rowIndex += 1) {\n const rowNode = this.gridApi.getDisplayedRowAtIndex(rowIndex);\n if ((rowNode === null || rowNode === void 0 ? void 0 : rowNode.data) && !rowData.some((existing) => existing === rowNode.data)) {\n rowData.push(rowNode.data);\n }\n }\n });\n return rowData;\n }\n /**\n * Checks if any rows are currently selected\n * @public\n * @returns True if rows are selected, false otherwise\n */\n hasSelectedRows() {\n const selectedRows = this.getSelectedRows();\n return selectedRows.length > 0;\n }\n /**\n * Updates the label-value status bar component with new label and value\n * @public\n * @param params - Object containing label, value, and optionally hide flag\n * @example\n * ```ts\n * gridPro.updateLabelValueStatusBar({\n * label: 'Total Records',\n * value: '1,234',\n * hide: false\n * });\n * ```\n */\n updateLabelValueStatusBar(params) {\n var _a, _b;\n if (!this.gridApi) {\n logger.warn('Grid Pro: Cannot update label-value status bar - grid API not available');\n return;\n }\n const statusBar = (_b = (_a = this.gridApi).getStatusPanel) === null || _b === void 0 ? void 0 : _b.call(_a, GridProStatusBarTypes.labelValue);\n if (statusBar && typeof statusBar.updateParams === 'function') {\n statusBar.updateParams(params);\n }\n else {\n logger.warn('Grid Pro: Label-value status bar component not found or updateParams method not available');\n }\n }\n /**\n * Because we try and resize the grid to fit using callbacks on events, this will cause\n * a stack overflow of calls to resize, so we need to debounce it.\n * @internal\n */\n debouncedColumnAutosize() {\n if (!this.gridAutosizingEnabled)\n return;\n if (this.debounced) {\n clearTimeout(this.debounced);\n this.debounced = null;\n }\n this.debounced = setTimeout(() => {\n var _a;\n (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.sizeColumnsToFit();\n }, DEBOUNCED_RESIZE_TIME);\n }\n /**\n * If {@link @genesislcap/grid-pro#GridPro.gridAutosizingEnabled} is true, will remove the widths from the column states.\n * @internal\n */\n removeConfigWidthsToAutosize(colState) {\n return colState.map((col) => (Object.assign(Object.assign({}, col), { width: null })));\n }\n saveColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.rehydrationAttempted && this.statePersistanceEnabled()) {\n let colState = this.columnApi.getColumnState();\n colState = sanitizeColumnState(colState);\n colState = this.gridAutosizingEnabled\n ? this.removeConfigWidthsToAutosize(colState)\n : colState;\n const allHeadersHidden = colState.filter((c) => {\n if (c.hide)\n return false;\n const col = this.columnApi.getColumn(c.colId);\n return Boolean(col.getColDef().headerName);\n }).length === 0;\n if (colState.length === 0 ||\n JSON.stringify(colState) === JSON.stringify(this.columnState) ||\n allHeadersHidden)\n return;\n yield this.statePersistence.saveColumnState(this.persistColumnStateKey, colState);\n this.columnState = colState;\n }\n });\n }\n /**\n * Gets the saved grid ColumnState[] from storage\n * @remarks This is used to restore the grid state when the grid is rehydrated\n * @privateRemarks Not using `columnApi.get|setColumnState()` for these flows as it doesn't work setting new columnDefs vs different ordering.\n * @public\n */\n getSavedColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n this.columnState = [];\n if (this.statePersistanceEnabled()) {\n this.columnState = yield this.statePersistence.getColumnState(this.persistColumnStateKey);\n }\n return this.columnState;\n });\n }\n /**\n * Deletes the saved column state for the current grid\n * @param resetToDefault - Whether to reset columns to their default configuration. Defaults to true.\n * @remarks This removes the persisted column state from storage, allowing the grid to use default column configuration\n * @public\n */\n deleteColumnState() {\n return __awaiter(this, arguments, void 0, function* (resetToDefault = true) {\n var _a;\n if (this.statePersistanceEnabled()) {\n yield this.statePersistence.deleteColumnState(this.persistColumnStateKey);\n this.columnState = [];\n }\n if (resetToDefault && this.columnApi) {\n if (((_a = this.defaultColumnConfig) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n // Convert ColDef[] to ColumnState[] using utility function\n const columnState = convertColDefsToColumnStates(this.defaultColumnConfig);\n this.columnApi.applyColumnState({\n state: columnState,\n applyOrder: true,\n });\n }\n else {\n this.columnApi.resetColumnState();\n }\n this.handleColumnSizing();\n }\n });\n }\n restoreColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.rehydrationAttempted = true;\n const colState = yield this.getSavedColumnState();\n const sanitizedColState = sanitizeColumnState(colState);\n if (sanitizedColState && sanitizedColState.length > 0) {\n (_a = this.columnApi) === null || _a === void 0 ? void 0 : _a.applyColumnState({\n state: sanitizedColState,\n applyOrder: true,\n });\n }\n });\n }\n cacheFilterConfig() {\n var _a;\n this.setFilterModel(((_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getFilterModel()) || undefined);\n }\n restoreCachedFilterConfig() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n const filterModel = yield this.getfilterModel();\n if (typeof filterModel !== 'undefined') {\n (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.setFilterModel(filterModel);\n (_b = this.gridApi) === null || _b === void 0 ? void 0 : _b.onFilterChanged();\n }\n });\n }\n /**\n * @public\n */\n get gridOptions() {\n return this.agGridOptions;\n }\n /**\n * @public\n */\n get isServerSide() {\n return this.gridProDatasource instanceof GridProServerSideDatasource;\n }\n /**\n * @public\n */\n get gridParams() {\n return {\n globalEventListener: this.boundGlobalEventListener,\n };\n }\n /**\n * Get the datasource element.\n * @remarks This will return the first datasource element found in the light DOM, wrapping all concrete datasource implementations.\n * @public\n */\n get gridProDatasource() {\n return (this.querySelector('grid-pro-genesis-datasource') ||\n this.querySelector('grid-pro-client-side-datasource') ||\n this.querySelector('grid-pro-server-side-datasource'));\n }\n set gridOptions(options) {\n const gridOnChangeCallback = () => {\n if (this.disposed || !this.isConnected)\n return;\n this.debouncedSaveColumnState();\n this.debouncedColumnAutosize();\n this.invalidateColumnWidthCache();\n };\n Array.from(this.attributes).forEach((attribute) => {\n const attrName = this.agPropertiesMap[attribute.name];\n if (!attrName)\n return;\n this.agAttributes[attrName] = attribute.value;\n });\n const _a = options, { columnDefs, components, defaultColDef, getRowId, onGridReady, onFilterChanged, onFirstDataRendered } = _a, rest = __rest(_a, [\"columnDefs\", \"components\", \"defaultColDef\", \"getRowId\", \"onGridReady\", \"onFilterChanged\", \"onFirstDataRendered\"]);\n const gridOptionsConfig = this.gridOptionsConfig;\n const derivedOptions = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, gridOptionsConfig), { defaultColDef: Object.assign({ enableCellChangeFlash: this.enableCellFlashing, filter: true, resizable: true, sortable: true }, defaultColDef), components: this.combineAllGridComponents(components), suppressDragLeaveHidesColumns: true }), this.eventsAndCallbacks), { onGridReady: (event) => {\n var _a, _b;\n this.gridApi = event.api;\n this.columnApi = event.columnApi;\n if (this.gridEventsQueue.length) {\n this.gridEventsQueue.forEach((type) => {\n this.addGridEventListener(type);\n });\n }\n if (this.rowData) {\n this.gridApi.setRowData(this.rowData);\n }\n if (onGridReady) {\n onGridReady(event);\n }\n if (this.columnState && ((_a = this.columnState) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n this.columnApi.applyColumnState({\n state: this.columnState,\n applyOrder: true,\n });\n }\n this.$emit(Events.EVENT_GRID_READY, {\n event,\n gridId: this.id,\n });\n // TODO: Remove this event when we do the AG Upgrade\n this.$emit(GRID_READY_EVENT, {\n event,\n gridId: this.id,\n });\n // Emit datasource ready event, signals that the datasource is ready to be used\n // TODO: prevent rendering datasource slot until grid is ready\n // so there is no need for this even and handling it in datasources\n (_b = this.gridProDatasource) === null || _b === void 0 ? void 0 : _b.$emit(datasourceEventNames.ready, { pagination: this.pagination });\n this.restoreColumnState();\n this.restoreCachedFilterConfig();\n this.debouncedColumnAutosize();\n }, onFirstDataRendered: (event) => {\n // Handle column sizing\n this.handleColumnSizing();\n // Call the original onFirstDataRendered if provided\n if (onFirstDataRendered) {\n onFirstDataRendered(event);\n }\n }, onColumnPinned: gridOnChangeCallback, onColumnResized: gridOnChangeCallback, onColumnMoved: gridOnChangeCallback, onDisplayedColumnsChanged: gridOnChangeCallback, onFilterChanged: (filterChangedEvent) => {\n if (this.disposed || !this.isConnected)\n return;\n this.debouncedSaveFilterModel();\n if (onFilterChanged) {\n onFilterChanged(filterChangedEvent);\n }\n }, onGridSizeChanged: gridOnChangeCallback, onSortChanged: gridOnChangeCallback }), rest);\n const hasGetRowId = 'getRowId' in (options !== null && options !== void 0 ? options : {});\n if (this.gridProDatasource) {\n derivedOptions.columnDefs = columnDefs;\n if (hasGetRowId) {\n derivedOptions.getRowId = getRowId;\n }\n this.setupPaginationAndStatusBar(derivedOptions);\n this.setLocalGridOptions(derivedOptions);\n }\n else {\n this.mergeAllColumnDefsAndStates(columnDefs).then((value) => {\n if (this.disposed || !this.isConnected) {\n return;\n }\n derivedOptions.columnDefs = value;\n if (hasGetRowId) {\n derivedOptions.getRowId = getRowId;\n }\n this.setupPaginationAndStatusBar(derivedOptions);\n this.setLocalGridOptions(derivedOptions);\n this.initGrid();\n });\n }\n }\n setLocalGridOptions(derivedOptions) {\n this.agGridOptions = Object.assign(Object.assign({}, this.agGridOptions), copyAttributesToGridOptions(derivedOptions, this.agAttributes));\n }\n /**\n * Clears the local grid options, this is used to clear the grid options when the grid is restarted.\n * @public\n */\n clearLocalGridOptions() {\n this.agGridOptions = undefined;\n }\n initGrid() {\n DOM.queueUpdate(() => {\n if (this.disposed || !this.isConnected) {\n return;\n }\n if (this.initialised) {\n this.destroyGridInstance();\n // Needed due gridSlot children cleanup\n if (this.gridSlot.firstChild) {\n // prevent re-instantiating the grid using the same slot content\n this.gridSlot.removeChild(this.gridSlot.firstChild);\n }\n }\n this.agGrid = new Grid(this.gridSlot, this.agGridOptions, this.gridParams);\n this.initialised = true;\n });\n }\n /**\n * Will merge templated column definitions with `columnDefs` plus localStorage's column state or `deferredColumnStates`.\n * @deprecated use `applyTemplateDefinitions` instead.\n * @param columnDefs - The column definitions to apply to the grid.\n * @param deferredColumnDefsOrState - If true, will merge the column definitions with the saved column state or the `deferredColumnStates` property on the `grid-pro-genesis-datasource` element.\n * @returns The merged column definitions.\n */\n applyTemplateDefinitions(columnDefs, deferredColumnDefsOrState = false) {\n logger.deprecated('applyTemplateDefinitions', 'Use `mergeAllColumnDefsAndStates` instead.');\n return this.mergeAllColumnDefsAndStates(columnDefs, deferredColumnDefsOrState);\n }\n /**\n * Will merge templated column definitions with `columnDefs` plus localStorage's column state or `deferredColumnStates`.\n * @public\n * @remarks This will favor the column state from the browser's local storage over the `deferredColumnStates` property on the `grid-pro-genesis-datasource` element.\n * @param columnDefs - The column definitions to apply to the grid.\n * @param deferredColumnDefsOrState - If true, will merge the column definitions with the saved column state or the `deferredColumnStates` property\n * on the `grid-pro-genesis-datasource` element. Defaults to false but `grid-pro-genesis-datasource` will set this to true.\n * @returns The merged column definitions.\n */\n mergeAllColumnDefsAndStates(columnDefs_1) {\n return __awaiter(this, arguments, void 0, function* (columnDefs, deferredColumnDefsOrState = false) {\n var _a;\n const columnDefinitionsFromMetadata = columnDefs || [];\n columnDefinitionsFromMetadata.forEach((colDefFromMetadata) => {\n if (this.headerCaseType && colDefFromMetadata.field && !colDefFromMetadata.headerName) {\n const changeCaseByType = changeCase[this.headerCaseType];\n if (changeCaseByType) {\n colDefFromMetadata.headerName = changeCaseByType(colDefFromMetadata.field);\n }\n else {\n logger.warn(`Invalid header-case-type attribute value: ${this.headerCaseType}. Please use one of the following: camelCase, capitalCase, dotCase, headerCase, noCase, paramCase, pascalCase, pathCase, sentenceCase, snakeCase.`);\n }\n }\n });\n const templateColumnDefs = Array.from(this.querySelectorAll(this.columnComponentName))\n .map((templateColumn) => templateColumn.definition)\n .map((columnDef) => {\n var _a, _b;\n // enable cell flashing for each column if unspecified on column level but enabled on grid level\n if (this.enableCellFlashing && columnDef.enableCellChangeFlash === undefined) {\n columnDef.enableCellChangeFlash = true;\n }\n /**\n * If the column has a set filter, merge filter params with metadata values.\n * If the template column explicitly sets 'values' in filterParams (even to undefined),\n * respect that choice and don't inject metadata values. This allows consumers to\n * opt out of metadata values and let AG Grid extract values from row data instead.\n */\n if (columnDef.filter === 'agSetColumnFilter') {\n const hasExplicitValues = columnDef.filterParams != null && 'values' in columnDef.filterParams;\n if (!hasExplicitValues) {\n const metadataValues = (_b = (_a = columnDefinitionsFromMetadata.find((colDef) => colDef.field === columnDef.field)) === null || _a === void 0 ? void 0 : _a.filterParams) === null || _b === void 0 ? void 0 : _b.values;\n if (metadataValues) {\n columnDef.filterParams = Object.assign(Object.assign({}, columnDef.filterParams), { values: metadataValues });\n }\n }\n }\n if (columnDef.editable) {\n if (!columnDef.cellRenderer && !columnDef.cellRendererSelector) {\n columnDef.cellRendererSelector = (params) => {\n if (!(params === null || params === void 0 ? void 0 : params.data)) {\n return undefined;\n }\n if (params.data[EDITED_COLUMN_FIELD] === columnDef.field) {\n return {\n component: GridProRendererTypes.editable,\n };\n }\n };\n }\n if (!columnDef.tooltipComponent && !columnDef.tooltipValueGetter) {\n columnDef.tooltipComponent = ErrorTooltip;\n columnDef.tooltipValueGetter = (params) => {\n if (!(params === null || params === void 0 ? void 0 : params.data)) {\n return undefined;\n }\n const error = params.data[ERROR_COLUMN_FIELD];\n if (error && error.column === columnDef.field) {\n return error.message;\n }\n };\n }\n if (!columnDef.cellClassRules) {\n columnDef.cellClassRules = {\n error: (params) => {\n var _a;\n if (!(params === null || params === void 0 ? void 0 : params.colDef) || !(params === null || params === void 0 ? void 0 : params.data)) {\n return false;\n }\n return ((_a = params.data[ERROR_COLUMN_FIELD]) === null || _a === void 0 ? void 0 : _a.column) === params.colDef.field;\n },\n };\n }\n }\n const metadataColumnDef = columnDefinitionsFromMetadata.find((colDef) => columnDef.field === colDef.field);\n return Object.assign(Object.assign({}, metadataColumnDef), columnDef);\n });\n const templateColumnKeys = templateColumnDefs.map((x) => x.field);\n const colDefsToReturn = [\n ...templateColumnDefs,\n ...(this.onlyTemplateColDefs\n ? []\n : columnDefinitionsFromMetadata.filter((g) => !templateColumnKeys.includes(g.field))),\n ];\n if (this.gridProDatasource && deferredColumnDefsOrState) {\n const savedColumnState = yield this.getSavedColumnState();\n if ((savedColumnState === null || savedColumnState === void 0 ? void 0 : savedColumnState.length) > 0) {\n return mergeAndDedupColDefWithColumnState(colDefsToReturn, savedColumnState);\n }\n else if (((_a = this.gridProDatasource.deferredColumnStates) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n return mergeAndDedupColDefWithColumnState(colDefsToReturn, this.gridProDatasource.deferredColumnStates);\n }\n }\n return colDefsToReturn;\n });\n }\n panelExists(statusPanelType, panels) {\n return panels.some((panel) => panel.statusPanel === statusPanelType);\n }\n addRowCountPanel(statusPanels, gridOptions) {\n // Row count is handled by pagination status bar component when pagination is enabled.\n // This component is only used for server-side infinite scroll (load more) scenarios\n // where pagination is disabled.\n if (this.statusBarConfig && this.statusBarConfig.rows === true) {\n const isServerSide = this.isServerSide || (gridOptions === null || gridOptions === void 0 ? void 0 : gridOptions.rowModelType) === 'serverSide';\n const isPaginationEnabled = this['_pagination'] || (gridOptions === null || gridOptions === void 0 ? void 0 : gridOptions.pagination) === true;\n if (isServerSide && !isPaginationEnabled) {\n if (!this.panelExists(GridProStatusBarTypes.rowCount, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.rowCount,\n align: 'left',\n });\n }\n }\n else if (!isServerSide) {\n const rowCountStatusPanel = 'agTotalAndFilteredRowCountComponent';\n if (!this.panelExists(rowCountStatusPanel, statusPanels)) {\n statusPanels.push({\n statusPanel: rowCountStatusPanel,\n align: 'left',\n });\n }\n }\n }\n }\n addMaxRowsPanel(statusPanels) {\n if (this.statusBarConfig && this.statusBarConfig.maxRows === true) {\n if (!this.panelExists(GridProStatusBarTypes.labelValue, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.labelValue,\n statusPanelParams: {\n label: 'Max Rows',\n value: this.gridProDatasource.maxRows || DatasourceDefaults.MAX_ROWS_250,\n hide: false,\n },\n align: 'left',\n });\n }\n }\n }\n addAggregationPanel(statusPanels) {\n if (this.statusBarConfig && this.statusBarConfig.aggregation === true) {\n if (!this.panelExists('agAggregationComponent', statusPanels)) {\n statusPanels.push({\n statusPanel: 'agAggregationComponent',\n align: 'right',\n });\n }\n }\n }\n addDatasourcePanels(statusPanels) {\n if (this.gridProDatasource) {\n const datasourceStatusPanels = this.gridProDatasource.getDatasourceStatusBarPanels(this.isServerSide, this.statusBarConfig);\n // Filter out duplicate datasource panels\n const newDatasourcePanels = datasourceStatusPanels.filter((panel) => !this.panelExists(panel.statusPanel, statusPanels));\n statusPanels.push(...newDatasourcePanels);\n }\n }\n addPaginationPanel(statusPanels) {\n if (this['_pagination']) {\n if (!this.panelExists(GridProStatusBarTypes.pagination, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.pagination,\n align: 'right',\n });\n }\n }\n }\n setupPaginationAndStatusBar(gridOptions) {\n // Keep the guard for production code, but allow override for testing\n // if (this.initialised && !allowDuplicateCheck) return;\n var _a, _b;\n if (this['_pagination']) {\n gridOptions.pagination = true;\n gridOptions.suppressScrollOnNewData = true;\n gridOptions.paginationPageSize = this.paginationPageSize;\n }\n // Set default status bar with components based on configuration\n if (this.withStatusBar && this.statusBarConfig) {\n // For duplicate checking (testing scenario), clear existing status panels to prevent duplicates\n // unless they are user-defined panels that we want to preserve\n const existingPanels = ((_a = gridOptions.statusBar) === null || _a === void 0 ? void 0 : _a.statusPanels) || [];\n const statusPanels = [...existingPanels];\n this.addRowCountPanel(statusPanels, gridOptions);\n this.addMaxRowsPanel(statusPanels);\n this.addAggregationPanel(statusPanels);\n this.addDatasourcePanels(statusPanels);\n if (this['_pagination']) {\n gridOptions.suppressPaginationPanel = true;\n this.addPaginationPanel(statusPanels);\n }\n const userDefinedStatusPanels = ((_b = gridOptions.statusBar) === null || _b === void 0 ? void 0 : _b.statusPanels) || [];\n const newUserDefinedPanels = userDefinedStatusPanels.filter((panel) => !this.panelExists(panel.statusPanel, statusPanels));\n statusPanels.push(...newUserDefinedPanels);\n gridOptions.statusBar = {\n statusPanels: statusPanels,\n };\n }\n }\n /**\n * Handles column sizing based on sizeColumnsToContent and sizeColumnsToFit attributes\n * @private\n */\n handleColumnSizing() {\n if (!this.sizeColumnsToContent && !this.sizeColumnsToFit)\n return;\n if (this.sizeColumnsToContent && this.sizeColumnsToFit && this.columnApi && this.gridApi) {\n this.handleBothSizingModes();\n }\n else {\n this.handleIndividualSizingModes();\n }\n }\n /**\n * Handles when both sizeColumnsToContent and sizeColumnsToFit are enabled\n * @private\n */\n handleBothSizingModes() {\n const totalColumnWidth = this.calculateTotalColumnWidth();\n const gridWidth = this.getGridWidth();\n if (totalColumnWidth > gridWidth) {\n if (!this.columnApi)\n return;\n this.columnApi.autoSizeAllColumns();\n }\n else {\n if (!this.gridApi)\n return;\n this.gridApi.sizeColumnsToFit();\n }\n }\n /**\n * Handles individual sizing modes when only one is enabled\n * @private\n */\n handleIndividualSizingModes() {\n if (this.sizeColumnsToContent && this.columnApi) {\n this.columnApi.autoSizeAllColumns();\n }\n if (this.sizeColumnsToFit && this.gridApi) {\n this.gridApi.sizeColumnsToFit();\n }\n }\n /**\n * Calculates the total width of all columns\n * @private\n */\n calculateTotalColumnWidth() {\n if (!this.columnApi) {\n return 0;\n }\n const allColumns = this.columnApi.getAllGridColumns();\n const currentColumnCount = allColumns.length;\n // Check if cache is still valid (same number of columns)\n if (this.cachedTotalColumnWidth !== null && this.columnCount === currentColumnCount) {\n return this.cachedTotalColumnWidth;\n }\n // Calculate and cache the total width\n this.cachedTotalColumnWidth = allColumns.reduce((sum, col) => sum + (col.getActualWidth() || 0), 0);\n this.columnCount = currentColumnCount;\n return this.cachedTotalColumnWidth;\n }\n /**\n * Invalidates the cached column width calculation\n * @private\n * @remarks This method is called automatically when column changes occur (resize, move, pin, etc.)\n * to ensure the cached width calculation remains accurate.\n */\n invalidateColumnWidthCache() {\n this.cachedTotalColumnWidth = null;\n this.columnCount = 0;\n }\n /**\n * Gets the available grid width with fallbacks\n * @private\n */\n getGridWidth() {\n const gridElement = this;\n let gridWidth = (gridElement === null || gridElement === void 0 ? void 0 : gridElement.clientWidth) || 0;\n if (gridWidth === 0 && this.gridSlot) {\n gridWidth = this.gridSlot.clientWidth || 0;\n }\n if (gridWidth === 0) {\n gridWidth = this.clientWidth || 0;\n }\n return gridWidth;\n }\n get observedAttributes() {\n // allow properties to be supplied either lowercased or kebab-cased\n // this allows the user to either supply (for example) enableSorting or enabled-sorting\n // properties lowercased\n const lowerCasedPropertyNames = AG_PROPERTIES.map((property) => property.toLowerCase());\n // properties kebab-cased\n const kebabCasePropertyNames = AG_PROPERTIES.map((property) => convertToKebabCase(property));\n return lowerCasedPropertyNames.concat(kebabCasePropertyNames);\n }\n agAttributeChangedCallback(attName, oldValue, newValue) {\n if (oldValue === newValue) {\n return;\n }\n const gridPropertyName = this.agPropertiesMap[attName];\n if (gridPropertyName) {\n // for properties set before gridOptions is called\n this.agAttributes[gridPropertyName] = newValue;\n if (this.initialised) {\n // for subsequent (post gridOptions) changes\n const changeObject = {};\n changeObject[gridPropertyName] = { currentValue: newValue };\n ComponentUtil.processOnChange(changeObject, this.gridApi);\n }\n }\n }\n globalEventListener(eventType, event) {\n const eventLowerCase = eventType.toLowerCase();\n const browserEvent = new Event(eventLowerCase);\n const browserEventNoType = browserEvent;\n browserEventNoType.agGridDetails = event;\n // for when defining events via myGrid.addEventListener('columnresized', function (event) {...\n this.dispatchEvent(browserEvent);\n // for when defining events via myGrid.oncolumnresized = function (event) {....\n const callbackMethod = 'on' + eventLowerCase;\n if (typeof this[callbackMethod] === 'function') {\n this[callbackMethod](browserEvent);\n }\n }\n insertFontFace(newValue) {\n const fontFaceRule = agThemeFontFaceMap[newValue] || this.gridFontFace;\n this.destroyFontFace();\n const newDestroy = insertDocumentCSSRule(fontFaceRule, agThemeFontsId(newValue));\n if (newDestroy) {\n this.fontFaceDestroy = newDestroy;\n }\n }\n destroyFontFace() {\n if (this.fontFaceDestroy) {\n this.fontFaceDestroy();\n this.fontFaceDestroy = null;\n }\n }\n}\n__decorate([\n observable\n], GridPro.prototype, \"columnApi\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridApi\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridErrorItems\", void 0);\n__decorate([\n StatePersistence\n], GridPro.prototype, \"statePersistence\", void 0);\n__decorate([\n attr({ attribute: 'auto-cell-renderer-by-type', mode: 'boolean' })\n], GridPro.prototype, \"autoCellRendererByType\", void 0);\n__decorate([\n attr({ attribute: 'only-template-col-defs', mode: 'boolean' })\n], GridPro.prototype, \"onlyTemplateColDefs\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'grid-autosizing' })\n], GridPro.prototype, \"gridAutosizingEnabled\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'size-columns-to-content' })\n], GridPro.prototype, \"sizeColumnsToContent\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'size-columns-to-fit' })\n], GridPro.prototype, \"sizeColumnsToFit\", void 0);\n__decorate([\n attr({ attribute: 'add-index' })\n], GridPro.prototype, \"addIndex\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-add' })\n], GridPro.prototype, \"asyncAdd\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-remove' })\n], GridPro.prototype, \"asyncRemove\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-update' })\n], GridPro.prototype, \"asyncUpdate\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enable-cell-flashing' })\n], GridPro.prototype, \"enableCellFlashing\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enabled-row-flashing' })\n], GridPro.prototype, \"enabledRowFlashing\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enable-row-flashing' })\n], GridPro.prototype, \"enableRowFlashing\", void 0);\n__decorate([\n attr({ attribute: 'persist-column-state-key' })\n], GridPro.prototype, \"persistColumnStateKey\", void 0);\n__decorate([\n attr({ attribute: 'persist-filter-model-key' })\n], GridPro.prototype, \"persistFilterModelKey\", void 0);\n__decorate([\n attr({ attribute: 'default-column-config' })\n], GridPro.prototype, \"defaultColumnConfig\", void 0);\n__decorate([\n attr({ attribute: 'header-case-type' })\n], GridPro.prototype, \"headerCaseType\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"rowData\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridFontFace\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"columnComponentName\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"eventsAndCallbacks\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"headerHeight\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"rowHeight\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"theme\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"classNames\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"agGrid\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridSlot\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"themeMode\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridComponents\", void 0);\n__decorate([\n attr({ mode: 'boolean' })\n], GridPro.prototype, \"pagination\", void 0);\n__decorate([\n attr({ attribute: 'pagination-page-size' })\n], GridPro.prototype, \"paginationPageSize\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"statusBarConfig\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'with-status-bar' })\n], GridPro.prototype, \"withStatusBar\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"customErrorHandlerTemplate\", void 0);\n__decorate([\n GridOptionsConfig\n], GridPro.prototype, \"gridOptionsConfig\", void 0);\n/**\n * GridPro shadow root options.\n * @public\n * @remarks\n * For extensibility, this can be used to set the shadow root mode and delegatesFocus\n */\nexport const foundationGridProShadowOptions = undefined;\n/**\n * Grid Pro default configuration.\n * @public\n */\nexport const defaultGridProConfig = {\n shadowOptions: undefined,\n};\n/**\n * A function that returns a Foundation Grid Pro registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro\\>\n */\nexport const foundationGridPro = GridPro.compose(Object.assign({ baseName: 'grid-pro', styles,\n template, shadowOptions: foundationGridProShadowOptions }, defaultGridProConfig));\n","import { css } from '@microsoft/fast-element';\nimport { errorHandlerDialogStyles } from './datasource/error-handler.dialog';\nimport { agExternalStockStyles } from './external';\n/**\n * The Grid Pro styles.\n * @public\n * @remarks this is the default CSS, bundles Alpine/Balham/Material AG themes.\n */\nexport const foundationGridProStyles = css `\n ${agExternalStockStyles}\n ${errorHandlerDialogStyles}\n :host {\n --datasource-error-background-color: var(--neutral-layer-4);\n --datasource-error-background-opacity: 0.5;\n --datasource-error-dialog-max-width: 50%;\n --datasource-error-dialog-min-width: auto;\n --ag-status-bar-height: 32.5px;\n\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n :host([ds-disconnected]) {\n display: block;\n }\n\n :host([ds-disconnected])::part(grid) {\n cursor: not-allowed;\n opacity: 40%;\n pointer-events: none;\n }\n\n .ag-side-bar,\n .ag-menu {\n --ag-subheader-background-color: var(--ag-background-color);\n --ag-control-panel-background-color: var(--ag-background-color);\n }\n\n .ag-cell-inline-editing {\n height: inherit !important;\n }\n\n .hidden {\n display: none;\n }\n\n .error {\n border-color: var(--error-color) !important;\n }\n\n .ag-status-bar {\n height: var(--ag-status-bar-height);\n }\n\n .ag-status-name-value {\n padding-top: var(--ag-grid-size);\n padding-bottom: var(--ag-grid-size);\n }\n\n /* Custom styling for the unsort icon (sortNone) - only for sortable columns */\n .ag-header-cell.ag-header-cell-sortable .ag-icon-none {\n opacity: 100%;\n color: var(--rapid-ag-header-foreground-color, var(--ag-foreground-color, #fff));\n font-size: calc(var(--ag-icon-size, 12px) * 1.2);\n font-weight: bold;\n }\n\n .ag-header-cell.ag-header-cell-sortable:hover .ag-icon-none {\n opacity: 100%;\n color: var(--rapid-ag-header-foreground-color, var(--ag-foreground-color, #fff));\n transform: scale(1.1);\n transition: transform 0.2s ease;\n }\n`;\n","import { html, ref } from '@microsoft/fast-element';\nimport { getErrorHandlerDialogTemplate } from './datasource/error-handler.dialog';\n/**\n * Get a Design System prefixed The Grid Pro template.\n * @param prefix - The design system prefix to use. Defaults to 'foundation'.\n * @returns A grid Pro template prefixed with the correct design system.\n * @public\n */\nexport const getGridProTemplate = (prefix = 'foundation') => html `\n <template>\n <span part=\"grid\" data-ag-theme-mode=${(x) => x.themeMode} class=\"${(x) => x.classNames}\">\n <slot name=\"grid\" ${ref('gridSlot')}></slot>\n <slot></slot>\n </span>\n ${(x) => x.customErrorHandlerTemplate\n ? x.customErrorHandlerTemplate(prefix, x.gridErrorItems.filter(({ type }) => type === 'datasource'))\n : getErrorHandlerDialogTemplate(prefix, x.gridErrorItems.filter(({ type }) => type === 'datasource'))}\n </template>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: <foundation-grid-pro>\n */\nexport const gridProTemplate = getGridProTemplate();\n","import { CSSVarsTokenMapper } from '@genesislcap/foundation-ui';\nimport { css } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\n/**\n * All official AG CSS variables\n * @public\n */\nexport var AgGridCSSVars;\n(function (AgGridCSSVars) {\n AgGridCSSVars[\"foregroundColor\"] = \"--ag-foreground-color\";\n AgGridCSSVars[\"dataColor\"] = \"--ag-data-color\";\n AgGridCSSVars[\"secondaryForegroundColor\"] = \"--ag-secondary-foreground-color\";\n AgGridCSSVars[\"headerForegroundColor\"] = \"--ag-header-foreground-color\";\n AgGridCSSVars[\"disabledForegroundColor\"] = \"--ag-disabled-foreground-color\";\n AgGridCSSVars[\"backgroundColor\"] = \"--ag-background-color\";\n AgGridCSSVars[\"headerBackgroundColor\"] = \"--ag-header-background-color\";\n AgGridCSSVars[\"subheaderBackgroundColor\"] = \"--ag-subheader-background-color\";\n AgGridCSSVars[\"subheaderToolbarBackgroundColor\"] = \"--ag-subheader-toolbar-background-color\";\n AgGridCSSVars[\"controlPanelBackgroundColor\"] = \"--ag-control-panel-background-color\";\n AgGridCSSVars[\"selectedRowBackgroundColor\"] = \"--ag-selected-row-background-color\";\n AgGridCSSVars[\"oddRowBackgroundColor\"] = \"--ag-odd-row-background-color\";\n AgGridCSSVars[\"rowHoverColor\"] = \"--ag-row-hover-color\";\n AgGridCSSVars[\"rangeSelectionBorderColor\"] = \"--ag-range-selection-border-color\";\n AgGridCSSVars[\"rangeSelectionBackgroundColor\"] = \"--ag-range-selection-background-color\";\n AgGridCSSVars[\"selectedTabUnderlineColor\"] = \"--ag-selected-tab-underline-color\";\n AgGridCSSVars[\"rangeSelectionChartCategoryBackgroundColor\"] = \"--ag-range-selection-chart-category-background-color\";\n AgGridCSSVars[\"rangeSelectionChartBackgroundColor\"] = \"--ag-range-selection-chart-background-color\";\n AgGridCSSVars[\"headerCellHoverBackgroundColor\"] = \"--ag-header-cell-hover-background-color\";\n AgGridCSSVars[\"headerCellMovingBackgroundColor\"] = \"--ag-header-cell-moving-background-color\";\n AgGridCSSVars[\"chipBackgroundColor\"] = \"--ag-chip-background-color\";\n AgGridCSSVars[\"borderColor\"] = \"--ag-border-color\";\n AgGridCSSVars[\"secondaryBorderColor\"] = \"--ag-secondary-border-color\";\n AgGridCSSVars[\"rowBorderColor\"] = \"--ag-row-border-color\";\n AgGridCSSVars[\"headerColumnSeparatorColor\"] = \"--ag-header-column-separator-color\";\n AgGridCSSVars[\"headerColumnResizeHandleColor\"] = \"--ag-header-column-resize-handle-color\";\n AgGridCSSVars[\"inputBorderColor\"] = \"--ag-input-border-color\";\n AgGridCSSVars[\"inputDisabledBorderColor\"] = \"--ag-input-disabled-border-color\";\n AgGridCSSVars[\"inputDisabledBackgroundColor\"] = \"--ag-input-disabled-background-color\";\n AgGridCSSVars[\"checkboxBackgroundColor\"] = \"--ag-checkbox-background-color\";\n AgGridCSSVars[\"checkboxCheckedColor\"] = \"--ag-checkbox-checked-color\";\n AgGridCSSVars[\"checkboxUncheckedColor\"] = \"--ag-checkbox-unchecked-color\";\n AgGridCSSVars[\"checkboxIndeterminateColor\"] = \"--ag-checkbox-indeterminate-color\";\n AgGridCSSVars[\"toggleButtonOffBorderColor\"] = \"--ag-toggle-button-off-border-color\";\n AgGridCSSVars[\"toggleButtonOffBackgroundColor\"] = \"--ag-toggle-button-off-background-color\";\n AgGridCSSVars[\"toggleButtonOnBorderColor\"] = \"--ag-toggle-button-on-border-color\";\n AgGridCSSVars[\"toggleButtonOnBackgroundColor\"] = \"--ag-toggle-button-on-background-color\";\n AgGridCSSVars[\"toggleButtonSwitchBackgroundColor\"] = \"--ag-toggle-button-switch-background-color\";\n AgGridCSSVars[\"toggleButtonSwitchBorderColor\"] = \"--ag-toggle-button-switch-border-color\";\n AgGridCSSVars[\"minichartSelectedChartColor\"] = \"--ag-minichart-selected-chart-color\";\n AgGridCSSVars[\"minichartSelectedPageColor\"] = \"--ag-minichart-selected-page-color\";\n AgGridCSSVars[\"modalOverlayBackgroundColor\"] = \"--ag-modal-overlay-background-color\";\n AgGridCSSVars[\"inputFocusBoxShadow\"] = \"--ag-input-focus-box-shadow\";\n AgGridCSSVars[\"inputFocusBorderColor\"] = \"--ag-input-focus-border-color\";\n})(AgGridCSSVars || (AgGridCSSVars = {}));\n/**\n * The available Grid Pro themes.\n * @public\n */\nexport var AgGridTheme;\n(function (AgGridTheme) {\n AgGridTheme[\"alpine\"] = \"ag-theme-alpine\";\n AgGridTheme[\"alpineDark\"] = \"ag-theme-alpine-dark\";\n AgGridTheme[\"balham\"] = \"ag-theme-balham\";\n AgGridTheme[\"balhamDark\"] = \"ag-theme-balham-dark\";\n AgGridTheme[\"material\"] = \"ag-theme-material\";\n})(AgGridTheme || (AgGridTheme = {}));\n/**\n * Generates the class name for a given Grid Pro theme name.\n * @param themeName - the Grid Pro theme name\n * @returns the class name for the Grid Pro token map\n * @public\n * @example The result of this will be a class name that is applied to the grid part of GridPro template (actual content of the class comes from agThemeTokenMapCSS):\n * ```html\n * <span part=\"grid\" class=\"ag-theme-genesis-rapid-dark\">\n * ```\n */\nexport const agThemeTokenMapClassname = (themeName) => `${themeName}-token-map`;\n/**\n * Generates the id name for custom Grid Pro fonts.\n * @param themeName - the Grid Pro theme name\n * @returns the id name for the Grid Pro fonts\n * @public\n * @example The result of this is used in the id of style tag:\n * ```html\n * <style id=\"ag-theme-alpine-fonts\"></style>\n * ```\n */\nexport const agThemeFontsId = (themeName) => `${themeName}-fonts`;\n/**\n * Generates the CSS for a given GridPro theme name and token map\n * @param themeName - the GridPro theme name\n * @param tokenMap - a map of CSS variables {@link @genesislcap/grid-pro#AgGridCSSVars} and custom token values\n * @returns the CSS for the Grid Pro token map\n * @public\n * @example\n * ```ts\n * export const agThemeGenesisRapidTokens = {\n * backgroundColor: create<Swatch>('rapid-ag-background-color').withDefault((elem: HTMLElement) =>\n * baseLayerLuminance.getValueFor(elem) === StandardLuminance.LightMode\n * ? lightColors.backgroundSwatch\n * : darkColors.backgroundSwatch\n * ),\n * foregroundColor: create<Swatch>('rapid-ag-foreground-color').withDefault((elem: HTMLElement) =>\n * baseLayerLuminance.getValueFor(elem) === StandardLuminance.LightMode\n * ? lightColors.foregroundSwatch\n * : darkColors.foregroundSwatch\n * ),\n * };\n * export const agThemeGenesisRapidTokenMap: CSSVarTokenMap<AgGridCSSVars | string> = {\n * [AgGridCSSVars.backgroundColor]: agThemeGenesisRapidTokens.backgroundColor,\n * [AgGridCSSVars.foregroundColor]: agThemeGenesisRapidTokens.foregroundColor,\n * };\n * ```\n */\nexport const agThemeTokenMapCSS = (themeName, tokenMap) => css `\n .${agThemeTokenMapClassname(themeName)} {\n ${new CSSVarsTokenMapper(tokenMap)}\n }\n`;\n/**\n * The available Grid Pro Renderer Types\n * @public\n */\nexport var GridProRendererTypes;\n(function (GridProRendererTypes) {\n GridProRendererTypes[\"action\"] = \"action\";\n GridProRendererTypes[\"actionsMenu\"] = \"actionsMenu\";\n GridProRendererTypes[\"boolean\"] = \"boolean\";\n GridProRendererTypes[\"editable\"] = \"editable\";\n GridProRendererTypes[\"icon\"] = \"icon\";\n GridProRendererTypes[\"text\"] = \"text\";\n GridProRendererTypes[\"select\"] = \"select\";\n GridProRendererTypes[\"statusPill\"] = \"statusPill\";\n GridProRendererTypes[\"dateEditor\"] = \"dateEditor\";\n GridProRendererTypes[\"selectEditor\"] = \"selectEditor\";\n GridProRendererTypes[\"numberEditor\"] = \"numberEditor\";\n GridProRendererTypes[\"stringEditor\"] = \"stringEditor\";\n GridProRendererTypes[\"multiselectEditor\"] = \"multiselectEditor\";\n})(GridProRendererTypes || (GridProRendererTypes = {}));\n/**\n * The available Grid Pro Status Bar Types\n * @public\n * @remarks\n * These status bar components require AG Grid Enterprise module to be enabled.\n * Status bar components will only be displayed if the Enterprise module is available.\n * @see https://www.ag-grid.com/javascript-data-grid/component-status-bar/\n */\nexport var GridProStatusBarTypes;\n(function (GridProStatusBarTypes) {\n GridProStatusBarTypes[\"labelValue\"] = \"labelValue\";\n GridProStatusBarTypes[\"pagination\"] = \"pagination\";\n GridProStatusBarTypes[\"loadMore\"] = \"loadMore\";\n GridProStatusBarTypes[\"reload\"] = \"reload\";\n GridProStatusBarTypes[\"rowCount\"] = \"rowCount\";\n})(GridProStatusBarTypes || (GridProStatusBarTypes = {}));\n/**\n * Event fired when grid is ready\n * @public\n * @deprecated - Use `Events.EVENT_GRID_READY` from `@ag-grid-community/core` instead\n * @privateRemarks\n * This will be removed when we do the AG Upgrade.\n */\nexport const GRID_READY_EVENT = 'onGridReady';\n/**\n * Key used to store currently edited column when it being synced with server side data\n * @public\n */\nexport const EDITED_COLUMN_FIELD = '__editedColumn';\n/**\n * Key used to store error details (column, message) when inline edit fails sync with server side data\n * @public\n */\nexport const ERROR_COLUMN_FIELD = '__errorColumn';\n/**\n * Default grid options\n * @public\n */\nexport const defaultGridOptionsConfig = {};\n/**\n * Grid options config used to inject into grids in application\n * @internal\n */\nexport const GridOptionsConfig = DI.createInterface((x) => x.instance(defaultGridOptionsConfig));\n/**\n * The available Grid Pro header case types\n * @public\n */\nexport var GridProCaseType;\n(function (GridProCaseType) {\n GridProCaseType[\"camelCase\"] = \"camelCase\";\n GridProCaseType[\"capitalCase\"] = \"capitalCase\";\n GridProCaseType[\"dotCase\"] = \"dotCase\";\n GridProCaseType[\"headerCase\"] = \"headerCase\";\n GridProCaseType[\"noCase\"] = \"noCase\";\n GridProCaseType[\"paramCase\"] = \"paramCase\";\n GridProCaseType[\"pascalCase\"] = \"pascalCase\";\n GridProCaseType[\"pathCase\"] = \"pathCase\";\n GridProCaseType[\"sentenceCase\"] = \"sentenceCase\";\n GridProCaseType[\"snakeCase\"] = \"snakeCase\";\n})(GridProCaseType || (GridProCaseType = {}));\n/**\n * Default status bar configuration\n * @public\n */\nexport const DEFAULT_STATUS_BAR_CONFIG = {\n rows: true,\n maxRows: false,\n aggregation: true,\n loadMore: {\n tooltip: 'Load more rows from server',\n },\n reload: {\n tooltip: 'Reload the datasource.',\n },\n};\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Session } from '@genesislcap/foundation-comms';\n/**\n * Implementation for the Local Storage State Persistence interface.\n * @public\n */\nexport class LocalStorageStatePersistence {\n getColumnState(persistColumnStateKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const localStorageGridOptions = this.session.getLocalStorageItem('gridOptions');\n if (localStorageGridOptions) {\n const allGridOptions = JSON.parse(localStorageGridOptions);\n if (persistColumnStateKey in allGridOptions) {\n return JSON.parse(allGridOptions[persistColumnStateKey]);\n }\n }\n return [];\n });\n }\n saveColumnState(persistColumnStateKey, columnState) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n existingOptions[persistColumnStateKey] = JSON.stringify(columnState);\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n deleteColumnState(persistColumnStateKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n delete existingOptions[persistColumnStateKey];\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n getFilterModel(persistFilterModelKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const localStorageGridOptions = this.session.getLocalStorageItem('gridOptions');\n if (localStorageGridOptions) {\n const allGridOptions = JSON.parse(localStorageGridOptions);\n if (persistFilterModelKey in allGridOptions) {\n return JSON.parse(allGridOptions[persistFilterModelKey]);\n }\n }\n return {};\n });\n }\n saveFilterModel(persistFilterModelKey, filterModel) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n existingOptions[persistFilterModelKey] = JSON.stringify(filterModel);\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n}\n__decorate([\n Session\n], LocalStorageStatePersistence.prototype, \"session\", void 0);\n","import { DI } from '@microsoft/fast-foundation';\nimport { LocalStorageStatePersistence } from './local-state';\n/**\n * The DI token for the StatePersistence interface.\n * @internal\n */\nexport const StatePersistence = DI.createInterface((x) => x.singleton(LocalStorageStatePersistence));\n","/**\n * Label Value Status Bar Component\n * @public\n */\nexport class LabelValueStatusBarComponent {\n init(params) {\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-name-value', 'ag-status-panel');\n this.element.setAttribute('data-test-id', 'grid-label-value-panel');\n this.element.setAttribute('role', 'status');\n this.currentParams = params;\n this.updateDisplay();\n }\n updateParams(params) {\n this.currentParams = Object.assign(Object.assign({}, this.currentParams), params);\n this.updateDisplay();\n }\n updateDisplay() {\n if (!this.element)\n return;\n if (this.currentParams.hide) {\n this.element.style.display = 'none';\n return;\n }\n else {\n this.element.style.display = '';\n }\n // Set accessible label for the entire component\n this.element.setAttribute('aria-label', `${this.currentParams.label}: ${this.currentParams.value}`);\n // Create or update label element\n if (!this.labelElement) {\n this.labelElement = document.createElement('span');\n this.labelElement.setAttribute('data-test-id', 'grid-label-value-label');\n this.labelElement.setAttribute('aria-hidden', 'true');\n this.element.appendChild(this.labelElement);\n }\n this.labelElement.innerHTML = `${this.currentParams.label}: `;\n // Create or update value element\n if (!this.valueElement) {\n this.valueElement = document.createElement('span');\n this.valueElement.classList.add('ag-status-name-value-value');\n this.valueElement.setAttribute('data-test-id', 'grid-label-value-value');\n this.valueElement.setAttribute('aria-hidden', 'true');\n this.element.appendChild(this.valueElement);\n }\n this.valueElement.innerHTML = this.currentParams.value;\n }\n getGui() {\n return this.element;\n }\n destroy() { }\n}\n","import { __awaiter } from \"tslib\";\nimport { delay, getCurrentDesignSystemPrefix } from '@genesislcap/foundation-utils';\nconst LOADING_DELAY = 500;\n/**\n * A status bar component that shows a \"Load More\" button when more rows are available\n * @public\n */\nexport class LoadMoreStatusBarComponent {\n constructor() {\n this.buttonLabel = 'Load More';\n this.isLoading = false;\n this.isLeftAligned = false;\n }\n init(params) {\n var _a, _b, _c;\n this.params = params;\n this.gridApi = params.api;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-panel', 'ag-load-more-panel');\n this.element.setAttribute('data-test-id', 'grid-load-more-panel');\n this.element.setAttribute('role', 'region');\n this.element.setAttribute('aria-label', 'Load more data controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n // Determine alignment based on pagination status\n // When pagination is enabled, load more is aligned left, otherwise right\n this.isLeftAligned = ((_c = (_b = (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.gridOptionsService) === null || _b === void 0 ? void 0 : _b.gridOptions) === null || _c === void 0 ? void 0 : _c.pagination) || false;\n this.element.style.justifyContent = this.isLeftAligned ? 'flex-start' : 'flex-end';\n // Only add padding on the side where the button is\n this.element.style.paddingLeft = 'var(--ag-grid-size)';\n this.element.style.paddingRight = 'var(--ag-grid-size)';\n this.element.style.height = 'var(--ag-status-bar-height)';\n // Detect the current design system prefix (rapid or zero)\n this.designSystemPrefix = getCurrentDesignSystemPrefix(this.element, 'zero');\n this.createProgressRing();\n this.createLoadMoreButton();\n this.updateButtonVisibility();\n // Remove all children first to ensure correct ordering\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n // Add elements in the correct order based on alignment\n if (this.isLeftAligned) {\n // Left-aligned: Button first, then progress ring\n this.element.appendChild(this.loadMoreButton);\n this.element.appendChild(this.progressRing);\n }\n else {\n // Right-aligned: Progress ring first, then button\n this.element.appendChild(this.progressRing);\n this.element.appendChild(this.loadMoreButton);\n }\n }\n createProgressRing() {\n // Create the progress ring with the appropriate design system prefix\n this.progressRing = document.createElement(`${this.designSystemPrefix}-progress-ring`);\n this.progressRing.setAttribute('data-test-id', 'grid-load-more-progress');\n this.progressRing.setAttribute('aria-label', 'Loading more data');\n // Set styles for the progress ring\n this.progressRing.style.width = '20px';\n this.progressRing.style.height = '20px';\n // Different margin based on alignment - when left-aligned, progress ring goes after button\n this.progressRing.style.margin = this.isLeftAligned ? '0 0 0 8px' : '0 8px 0 0';\n this.progressRing.style.display = 'none'; // Hidden by default\n }\n createLoadMoreButton() {\n var _a, _b;\n // Create the button with the appropriate design system prefix\n this.loadMoreButton = document.createElement(`${this.designSystemPrefix}-button`);\n this.loadMoreButton.setAttribute('data-test-id', 'grid-load-more-button');\n // Set button appearance - use custom appearance if provided, otherwise default to 'outline'\n const appearance = ((_a = this.params) === null || _a === void 0 ? void 0 : _a.appearance) || 'outline';\n this.loadMoreButton.setAttribute('appearance', appearance);\n // Set button label - use default\n this.loadMoreButton.textContent = this.buttonLabel;\n // Set button styles - improve sizing to match UI better\n this.loadMoreButton.style.margin = '2px 8px';\n this.loadMoreButton.style.minWidth = '120px';\n this.loadMoreButton.style.textAlign = 'center';\n this.loadMoreButton.style.height = '24px';\n this.loadMoreButton.style.lineHeight = '20px';\n // Add native tooltip if provided\n if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) {\n this.loadMoreButton.setAttribute('title', this.params.tooltip);\n this.loadMoreButton.setAttribute('aria-describedby', 'grid-load-more-tooltip');\n }\n // Set initial ARIA attributes - use tooltip as aria-label if available, otherwise use default\n this.updateAriaLabel();\n this.loadMoreButton.setAttribute('role', 'button');\n // Add event listener for the load more action\n this.clickHandler = () => __awaiter(this, void 0, void 0, function* () {\n if (this.isLoading)\n return; // Prevent multiple clicks\n try {\n this.showLoading(true);\n yield delay(LOADING_DELAY);\n // Execute the load more action\n if (this.params.onLoadMore) {\n this.params.onLoadMore();\n }\n // After the action completes, hide the loading state\n // this.showLoading(false);\n }\n catch (error) {\n // In case of error, ensure loading state is hidden\n this.showLoading(false);\n }\n });\n this.loadMoreButton.addEventListener('click', this.clickHandler);\n }\n /**\n * Update the aria-label based on current state and tooltip\n */\n updateAriaLabel() {\n var _a, _b;\n let ariaLabel;\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip) {\n // Use tooltip as primary aria-label\n ariaLabel = this.params.tooltip;\n }\n else {\n // Fall back to descriptive labels based on state\n if (this.isLoading) {\n ariaLabel = 'Loading more data';\n }\n else if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.moreRows) {\n ariaLabel = 'Load more rows from server';\n }\n else {\n ariaLabel = 'No more rows available';\n }\n }\n this.loadMoreButton.setAttribute('aria-label', ariaLabel);\n }\n /**\n * Show or hide the loading state\n */\n showLoading(loading) {\n var _a;\n this.isLoading = loading;\n if (loading) {\n // Show loading state\n this.progressRing.style.display = 'inline-block';\n this.loadMoreButton.setAttribute('disabled', 'true');\n this.loadMoreButton.textContent = 'Loading...';\n }\n else {\n // Hide loading state\n this.progressRing.style.display = 'none';\n // Reset button state based on moreRows parameter\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.moreRows) {\n this.loadMoreButton.textContent = 'Load More';\n this.loadMoreButton.removeAttribute('disabled');\n }\n else {\n this.loadMoreButton.textContent = 'No More Rows';\n this.loadMoreButton.setAttribute('disabled', 'true');\n }\n }\n // Update aria-label to reflect current state\n this.updateAriaLabel();\n }\n updateButtonVisibility() {\n // If we don't have params or during loading, don't update\n if (!this.params || this.isLoading) {\n return;\n }\n // Reset loading state (safeguard)\n this.progressRing.style.display = 'none';\n // If we have more rows, enable the button\n if (this.params.moreRows) {\n this.loadMoreButton.style.display = 'inline-flex';\n this.loadMoreButton.textContent = 'Load More';\n this.loadMoreButton.removeAttribute('disabled');\n }\n else {\n // No more rows available\n this.loadMoreButton.style.display = 'inline-flex';\n this.loadMoreButton.textContent = 'No More Rows';\n this.loadMoreButton.setAttribute('disabled', 'true');\n }\n // Update aria-label to reflect current state\n this.updateAriaLabel();\n }\n updateParams(params) {\n var _a, _b;\n const prevParams = this.params;\n this.params = Object.assign(Object.assign({}, this.params), params);\n // If tooltip changed, update the title attribute\n if ((prevParams === null || prevParams === void 0 ? void 0 : prevParams.tooltip) !== ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip) && ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip)) {\n this.loadMoreButton.setAttribute('title', this.params.tooltip);\n }\n // If we were loading, but got an update that says no more rows,\n // we need to stop the loading state immediately\n if (this.isLoading) {\n this.showLoading(false);\n }\n this.updateButtonVisibility();\n }\n getGui() {\n return this.element;\n }\n destroy() {\n // Clean up event listeners\n if (this.loadMoreButton && this.clickHandler) {\n this.loadMoreButton.removeEventListener('click', this.clickHandler);\n }\n }\n}\n","/**\n * Pagination Status Bar Component for AG Grid\n * Displays pagination controls and information about current page and total rows\n * @public\n */\nexport class PaginationStatusBarComponent {\n init(params) {\n this.api = params.api;\n this.element = document.createElement('div');\n this.element.className = 'ag-status-panel';\n this.element.setAttribute('data-test-id', 'grid-pagination-panel');\n this.element.setAttribute('role', 'navigation');\n this.element.setAttribute('aria-label', 'Pagination controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n this.element.style.justifyContent = 'flex-end';\n this.element.style.height = 'var(--ag-status-bar-height)';\n this.createPaginationPanel();\n // Initial update\n this.updateDisplay();\n // Listen to pagination changes\n this.paginationChangedHandler = () => {\n this.updateDisplay();\n };\n this.api.addEventListener('paginationChanged', this.paginationChangedHandler);\n }\n getGui() {\n return this.element;\n }\n createPaginationPanel() {\n // Create the main pagination panel\n this.paginationPanel = document.createElement('div');\n this.paginationPanel.className = 'ag-paging-panel ag-unselectable';\n this.paginationPanel.setAttribute('id', 'ag-pagination-clone');\n this.paginationPanel.setAttribute('data-test-id', 'grid-pagination-controls');\n // Row summary panel\n this.paginationSummaryPanel = document.createElement('span');\n this.paginationSummaryPanel.className = 'ag-paging-row-summary-panel';\n this.paginationSummaryPanel.setAttribute('role', 'status');\n this.paginationSummaryPanel.setAttribute('data-test-id', 'grid-pagination-summary');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary');\n // First page button\n this.firstPageButton = this.createPaginationButton('btFirst', 'ag-paging-button ag-disabled', 'First Page', true);\n this.firstPageButton.setAttribute('data-test-id', 'grid-pagination-first');\n // Previous page button\n this.prevPageButton = this.createPaginationButton('btPrevious', 'ag-paging-button ag-disabled', 'Previous Page', true);\n this.prevPageButton.setAttribute('data-test-id', 'grid-pagination-previous');\n // Create the description panel\n this.descriptionPanel = document.createElement('span');\n this.descriptionPanel.className = 'ag-paging-description';\n this.descriptionPanel.setAttribute('role', 'status');\n this.descriptionPanel.setAttribute('data-test-id', 'grid-pagination-description');\n this.descriptionPanel.setAttribute('aria-label', 'Current page information');\n // Page information elements\n this.pageStartDisplay = document.createElement('span');\n this.pageStartDisplay.className = 'ag-paging-number';\n this.pageStartDisplay.setAttribute('id', 'ag-pagination-clone-start-page');\n this.pageStartDisplay.setAttribute('data-test-id', 'grid-pagination-page-label');\n this.pageStartDisplay.textContent = 'Page';\n this.pageNumberDisplay = document.createElement('span');\n this.pageNumberDisplay.className = 'ag-paging-number';\n this.pageNumberDisplay.setAttribute('id', 'ag-pagination-clone-start-page-number');\n this.pageNumberDisplay.setAttribute('ref', 'lbCurrent');\n this.pageNumberDisplay.setAttribute('data-test-id', 'grid-pagination-current-page');\n this.pageNumberDisplay.setAttribute('aria-label', 'Current page number');\n this.pageNumberDisplay.textContent = '1';\n this.pageOfDisplay = document.createElement('span');\n this.pageOfDisplay.className = 'ag-paging-number';\n this.pageOfDisplay.setAttribute('id', 'ag-pagination-clone-of-page');\n this.pageOfDisplay.setAttribute('data-test-id', 'grid-pagination-of-label');\n this.pageOfDisplay.textContent = 'of';\n this.pageNumberTotalDisplay = document.createElement('span');\n this.pageNumberTotalDisplay.className = 'ag-paging-number';\n this.pageNumberTotalDisplay.setAttribute('id', 'ag-pagination-clone-of-page-number');\n this.pageNumberTotalDisplay.setAttribute('ref', 'lbTotal');\n this.pageNumberTotalDisplay.setAttribute('data-test-id', 'grid-pagination-total-pages');\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'Total number of pages');\n this.pageNumberTotalDisplay.textContent = '1';\n // Next page button\n this.nextPageButton = this.createPaginationButton('btNext', 'ag-paging-button', 'Next Page', false);\n this.nextPageButton.setAttribute('data-test-id', 'grid-pagination-next');\n // Last page button\n this.lastPageButton = this.createPaginationButton('btLast', 'ag-paging-button', 'Last Page', false);\n this.lastPageButton.setAttribute('data-test-id', 'grid-pagination-last');\n // Assemble the description panel\n this.descriptionPanel.appendChild(this.pageStartDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageNumberDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageOfDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageNumberTotalDisplay);\n // Assemble the pagination panel\n this.paginationPanel.appendChild(this.paginationSummaryPanel);\n this.paginationPanel.appendChild(this.firstPageButton);\n this.paginationPanel.appendChild(this.prevPageButton);\n this.paginationPanel.appendChild(this.descriptionPanel);\n this.paginationPanel.appendChild(this.nextPageButton);\n this.paginationPanel.appendChild(this.lastPageButton);\n // Add to main container\n this.element.appendChild(this.paginationPanel);\n // Add event listeners with keyboard support\n this.addPaginationEventListeners();\n }\n addPaginationEventListeners() {\n // Click event listeners\n this.firstPageButton.addEventListener('click', () => this.goToPage('first'));\n this.prevPageButton.addEventListener('click', () => this.goToPage('previous'));\n this.nextPageButton.addEventListener('click', () => this.goToPage('next'));\n this.lastPageButton.addEventListener('click', () => this.goToPage('last'));\n // Keyboard event listeners for accessibility\n this.firstPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('first');\n }\n });\n this.prevPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('previous');\n }\n });\n this.nextPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('next');\n }\n });\n this.lastPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('last');\n }\n });\n }\n createPaginationButton(ref, className, ariaLabel, disabled) {\n const button = document.createElement('div');\n button.setAttribute('ref', ref);\n button.className = className;\n button.setAttribute('role', 'button');\n button.setAttribute('aria-label', ariaLabel);\n button.setAttribute('tabindex', disabled ? '-1' : '0');\n if (disabled) {\n button.setAttribute('aria-disabled', 'true');\n }\n const iconSpan = document.createElement('span');\n iconSpan.className = `ag-icon ag-icon-${ref.substring(2).toLowerCase()}`;\n iconSpan.setAttribute('unselectable', 'on');\n iconSpan.setAttribute('role', 'presentation');\n button.appendChild(iconSpan);\n return button;\n }\n goToPage(page) {\n var _a;\n const apiAny = this.api;\n const methodMap = {\n first: ['paginationGoToFirstPage', 'goToFirstPage'],\n previous: ['paginationGoToPreviousPage', 'goToPreviousPage'],\n next: ['paginationGoToNextPage', 'goToNextPage'],\n last: ['paginationGoToLastPage', 'goToLastPage'],\n };\n const [directMethod, proxyMethod] = methodMap[page];\n if (typeof apiAny[directMethod] === 'function') {\n apiAny[directMethod]();\n }\n else if (typeof ((_a = apiAny.paginationProxy) === null || _a === void 0 ? void 0 : _a[proxyMethod]) === 'function') {\n apiAny.paginationProxy[proxyMethod]();\n }\n }\n updateDisplay() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n // Use compatibility layer for v34 pagination API\n const apiAny = this.api;\n const currentPage = ((_e = (_b = (_a = apiAny.paginationGetCurrentPage) === null || _a === void 0 ? void 0 : _a.call(apiAny)) !== null && _b !== void 0 ? _b : (_d = (_c = apiAny.paginationProxy) === null || _c === void 0 ? void 0 : _c.getCurrentPage) === null || _d === void 0 ? void 0 : _d.call(_c)) !== null && _e !== void 0 ? _e : 0) + 1; // 1-based for display\n const totalPages = (_k = (_g = (_f = apiAny.paginationGetTotalPages) === null || _f === void 0 ? void 0 : _f.call(apiAny)) !== null && _g !== void 0 ? _g : (_j = (_h = apiAny.paginationProxy) === null || _h === void 0 ? void 0 : _h.getTotalPages) === null || _j === void 0 ? void 0 : _j.call(_h)) !== null && _k !== void 0 ? _k : 1;\n const pageSize = (_m = (_l = apiAny.paginationGetPageSize) === null || _l === void 0 ? void 0 : _l.call(apiAny)) !== null && _m !== void 0 ? _m : (_p = (_o = apiAny.paginationProxy) === null || _o === void 0 ? void 0 : _o.getPageSize) === null || _p === void 0 ? void 0 : _p.call(_o);\n const rowCount = (_r = (_q = apiAny.paginationGetRowCount) === null || _q === void 0 ? void 0 : _q.call(apiAny)) !== null && _r !== void 0 ? _r : (_t = (_s = apiAny.paginationProxy) === null || _s === void 0 ? void 0 : _s.getMasterRowCount) === null || _t === void 0 ? void 0 : _t.call(_s);\n // Check if we're in server-side mode and if the total count is uncertain\n // Add null checks for test environment compatibility\n const isServerSide = ((_x = (_w = (_v = (_u = this.api).getModel) === null || _v === void 0 ? void 0 : _v.call(_u)) === null || _w === void 0 ? void 0 : _w.getType) === null || _x === void 0 ? void 0 : _x.call(_w)) === 'serverSide';\n const hasUncertainTotal = isServerSide && apiAny.paginationIsLastPageFound && !apiAny.paginationIsLastPageFound();\n // Update the page numbers\n this.pageNumberDisplay.textContent = currentPage.toString();\n this.pageNumberTotalDisplay.textContent = hasUncertainTotal ? 'more' : totalPages.toString();\n // Update accessibility attributes when showing \"more\"\n if (hasUncertainTotal) {\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'More pages available');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary with more data available');\n }\n else {\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'Total number of pages');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary');\n }\n // Update the row summary panel\n const startRow = (currentPage - 1) * pageSize + 1;\n const endRow = Math.min(currentPage * pageSize, rowCount);\n const totalDisplay = hasUncertainTotal ? 'more' : rowCount.toString();\n this.paginationSummaryPanel.textContent = `${rowCount > 0 ? startRow : 0} to ${endRow} of ${totalDisplay}`;\n // Update button states\n const isFirstPage = currentPage === 1;\n const isLastPage = hasUncertainTotal ? false : currentPage >= totalPages;\n this.updateButtonState(this.firstPageButton, isFirstPage);\n this.updateButtonState(this.prevPageButton, isFirstPage);\n this.updateButtonState(this.nextPageButton, isLastPage);\n // Disable \"last page\" button when we don't know the total (showing \"more\")\n this.updateButtonState(this.lastPageButton, hasUncertainTotal || isLastPage);\n // Update last page button accessibility when uncertain total\n if (hasUncertainTotal) {\n this.lastPageButton.setAttribute('aria-label', 'Last page unavailable - total number of pages unknown');\n this.lastPageButton.setAttribute('title', 'Cannot jump to last page when total is unknown');\n }\n else {\n this.lastPageButton.setAttribute('aria-label', 'Last Page');\n this.lastPageButton.removeAttribute('title');\n }\n }\n updateButtonState(button, disabled) {\n if (disabled) {\n button.classList.add('ag-disabled');\n button.setAttribute('aria-disabled', 'true');\n button.setAttribute('tabindex', '-1');\n }\n else {\n button.classList.remove('ag-disabled');\n button.setAttribute('aria-disabled', 'false');\n button.setAttribute('tabindex', '0');\n }\n }\n destroy() {\n // Remove event listeners\n if (this.api && this.paginationChangedHandler) {\n this.api.removeEventListener('paginationChanged', this.paginationChangedHandler);\n }\n this.api = null;\n this.paginationChangedHandler = null;\n }\n}\n","import { __awaiter } from \"tslib\";\nimport { delay, getCurrentDesignSystemPrefix } from '@genesislcap/foundation-utils';\n// Delay in milliseconds to keep the icon in disabled state for visual feedback\nconst RELOAD_DELAY = 500;\n/**\n * A status bar component that shows a refresh icon to reload the grid data\n * @public\n */\nexport class ReloadStatusBarComponent {\n constructor() {\n this.isReloading = false;\n }\n init(params) {\n this.params = params;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-panel', 'ag-reload-panel');\n this.element.setAttribute('data-test-id', 'grid-reload-panel');\n this.element.setAttribute('role', 'region');\n this.element.setAttribute('aria-label', 'Reload data controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n this.element.style.justifyContent = 'center';\n this.element.style.paddingLeft = 'var(--ag-grid-size)';\n this.element.style.height = 'var(--ag-status-bar-height)';\n // Detect the current design system prefix (rapid or zero)\n this.designSystemPrefix = getCurrentDesignSystemPrefix(this.element, 'zero');\n this.createRefreshIcon();\n this.createProgressRing();\n // Initially show the icon, hide the progress ring\n this.element.appendChild(this.refreshIcon);\n this.element.appendChild(this.progressRing);\n this.progressRing.style.display = 'none';\n }\n createProgressRing() {\n // Create the progress ring with the appropriate design system prefix\n this.progressRing = document.createElement(`${this.designSystemPrefix}-progress-ring`);\n this.progressRing.setAttribute('data-test-id', 'grid-reload-progress');\n this.progressRing.setAttribute('aria-label', 'Reloading data');\n // Set styles for the progress ring\n this.progressRing.style.width = '20px';\n this.progressRing.style.height = '20px';\n this.progressRing.style.margin = '4px';\n this.progressRing.style.display = 'none'; // Hidden by default\n }\n createRefreshIcon() {\n var _a, _b, _c, _d;\n // For design systems that support icons\n if (this.designSystemPrefix === 'zero' || this.designSystemPrefix === 'rapid') {\n this.refreshIcon = document.createElement(`${this.designSystemPrefix}-icon`);\n // Use custom icon if provided, otherwise default to 'refresh'\n const iconName = ((_a = this.params) === null || _a === void 0 ? void 0 : _a.icon) || 'refresh';\n this.refreshIcon.setAttribute('name', iconName);\n this.refreshIcon.setAttribute('aria-label', ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) || 'Reload grid data');\n }\n else {\n // Fallback for systems without icon components\n this.refreshIcon = document.createElement('div');\n this.refreshIcon.textContent = '↻'; // Unicode refresh symbol\n this.refreshIcon.setAttribute('aria-label', ((_c = this.params) === null || _c === void 0 ? void 0 : _c.tooltip) || 'Reload grid data');\n }\n // Add accessibility attributes\n this.refreshIcon.setAttribute('data-test-id', 'grid-reload-button');\n this.refreshIcon.setAttribute('role', 'button');\n this.refreshIcon.setAttribute('tabindex', '0');\n // Set common styles for the icon - make it larger\n this.refreshIcon.style.cursor = 'pointer';\n this.refreshIcon.style.width = '28px';\n this.refreshIcon.style.height = '28px';\n this.refreshIcon.style.display = 'flex';\n this.refreshIcon.style.alignItems = 'center';\n this.refreshIcon.style.justifyContent = 'center';\n this.refreshIcon.style.fontSize = '20px'; // Increase text size for fallback icon\n // Add native tooltip if provided\n if ((_d = this.params) === null || _d === void 0 ? void 0 : _d.tooltip) {\n this.refreshIcon.setAttribute('title', this.params.tooltip);\n }\n // Add hover effect\n this.mouseoverHandler = () => {\n if (!this.isReloading) {\n this.refreshIcon.style.opacity = '0.7';\n }\n };\n this.refreshIcon.addEventListener('mouseover', this.mouseoverHandler);\n this.mouseoutHandler = () => {\n if (!this.isReloading) {\n this.refreshIcon.style.opacity = '1';\n }\n };\n this.refreshIcon.addEventListener('mouseout', this.mouseoutHandler);\n // Add click event listener\n this.clickHandler = () => __awaiter(this, void 0, void 0, function* () {\n if (this.isReloading)\n return; // Prevent multiple clicks\n try {\n this.showReloading(true);\n yield delay(RELOAD_DELAY);\n // Execute the reload action if provided\n if (this.params.onReload) {\n this.params.onReload();\n }\n // Reset the icon state\n this.showReloading(false);\n }\n catch (error) {\n // In case of error, ensure icon state is reset\n this.showReloading(false);\n }\n });\n this.refreshIcon.addEventListener('click', this.clickHandler);\n // Add keyboard support for accessibility\n this.refreshIcon.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n // Trigger the same click handler\n this.clickHandler(new MouseEvent('click'));\n }\n });\n }\n /**\n * Show or hide the reloading state\n */\n showReloading(reloading) {\n this.isReloading = reloading;\n if (reloading) {\n // Hide the icon and show the progress ring\n this.refreshIcon.style.display = 'none';\n this.progressRing.style.display = 'inline-block';\n }\n else {\n // Show the icon and hide the progress ring\n this.refreshIcon.style.display = 'inline-flex';\n this.progressRing.style.display = 'none';\n }\n }\n updateParams(params) {\n var _a, _b;\n const prevParams = this.params;\n this.params = Object.assign(Object.assign({}, this.params), params);\n // If tooltip changed, update the title attribute and aria-label\n if ((prevParams === null || prevParams === void 0 ? void 0 : prevParams.tooltip) !== ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip)) {\n if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) {\n this.refreshIcon.setAttribute('title', this.params.tooltip);\n this.refreshIcon.setAttribute('aria-label', this.params.tooltip);\n }\n else {\n this.refreshIcon.removeAttribute('title');\n this.refreshIcon.setAttribute('aria-label', 'Reload grid data');\n }\n }\n }\n getGui() {\n return this.element;\n }\n destroy() {\n // Clean up event listeners\n if (this.refreshIcon) {\n this.refreshIcon.removeEventListener('mouseover', this.mouseoverHandler);\n this.refreshIcon.removeEventListener('mouseout', this.mouseoutHandler);\n this.refreshIcon.removeEventListener('click', this.clickHandler);\n }\n }\n}\n","/**\n * Row Count Status Bar Component for Server-Side Infinite Scroll\n * Displays current row count information for server-side grids without pagination.\n * For pagination scenarios, use PaginationStatusBarComponent instead.\n * @public\n */\nexport class RowCountStatusBarComponent {\n init(params) {\n this.api = params.api;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-name-value', 'ag-status-panel');\n this.element.setAttribute('data-test-id', 'grid-row-count-panel');\n this.element.setAttribute('role', 'status');\n const labelElement = document.createElement('span');\n labelElement.setAttribute('data-test-id', 'grid-row-count-label');\n labelElement.setAttribute('aria-hidden', 'true');\n labelElement.innerHTML = 'Rows: ';\n this.rowCountDisplay = document.createElement('span');\n this.rowCountDisplay.classList.add('ag-status-name-value-value');\n this.rowCountDisplay.setAttribute('data-test-id', 'grid-row-count-value');\n this.rowCountDisplay.setAttribute('aria-hidden', 'true');\n this.element.appendChild(labelElement);\n this.element.appendChild(this.rowCountDisplay);\n this.updateDisplay();\n this.modelUpdatedHandler = () => {\n this.updateDisplay();\n };\n this.api.addEventListener('modelUpdated', this.modelUpdatedHandler);\n this.api.addEventListener('rowDataUpdated', this.modelUpdatedHandler);\n }\n updateDisplay() {\n var _a, _b, _c;\n if (!this.api || !this.rowCountDisplay)\n return;\n const apiAny = this.api;\n const rowCount = (_c = (_b = (_a = this.api).getDisplayedRowCount) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : 0;\n // Check if total count is uncertain (more data available)\n // Only show uncertain total if we have rows and there might be more\n const hasMoreRows = apiAny.paginationIsLastPageFound !== undefined && !apiAny.paginationIsLastPageFound();\n const hasUncertainTotal = hasMoreRows && rowCount > 0;\n const displayText = hasUncertainTotal ? `${rowCount - 1}+` : rowCount.toString();\n this.rowCountDisplay.textContent = displayText;\n const ariaLabel = hasUncertainTotal\n ? `Row count: ${rowCount} or more rows`\n : `Row count: ${rowCount} rows`;\n this.element.setAttribute('aria-label', ariaLabel);\n }\n getGui() {\n return this.element;\n }\n destroy() {\n if (this.api && this.modelUpdatedHandler) {\n this.api.removeEventListener('modelUpdated', this.modelUpdatedHandler);\n this.api.removeEventListener('rowDataUpdated', this.modelUpdatedHandler);\n }\n this.api = null;\n this.modelUpdatedHandler = null;\n }\n}\n","/**\n * Tooltip for errors that happen while syncing data with server after inline editing\n * @internal\n */\nexport class ErrorTooltip {\n init(params) {\n const eGui = (this.eGui = document.createElement('div'));\n const message = params.value;\n eGui.classList.add('custom-tooltip');\n eGui.style['background-color'] = '#f14376';\n eGui.style['border'] = '1px inside';\n eGui.style['border-color'] = '#2e3339';\n eGui.style['border-radius'] = '4px';\n eGui.style['padding'] = '5px';\n eGui.style['box-shadow'] = '0px 4px 10px 0px rgba(0, 0, 0, 0.25);';\n eGui.innerHTML = `<span style='color: #000000; font-size: 10px'>${message}</span>`;\n }\n getGui() {\n return this.eGui;\n }\n}\n","/**\n * Converts a ColDef to a ColumnState\n * @param colDef - The column definition to convert\n * @returns The corresponding ColumnState\n * @public\n */\nexport function convertColDefToColumnState(colDef) {\n return {\n colId: colDef.field || colDef.colId || '',\n hide: colDef.hide || false,\n width: colDef.width || null,\n pinned: colDef.pinned || null,\n sort: colDef.sort || null,\n sortIndex: colDef.sortIndex || null,\n aggFunc: colDef.aggFunc || null,\n rowGroup: colDef.rowGroup || false,\n rowGroupIndex: colDef.rowGroupIndex || null,\n pivot: colDef.pivot || false,\n pivotIndex: colDef.pivotIndex || null,\n flex: colDef.flex || null,\n };\n}\nconst allowedColumnStateKeys = Object.keys(convertColDefToColumnState({}));\n/**\n * Sanitizes persisted column state by removing unsupported keys.\n * @remarks Some AG Grid versions include legacy properties (e.g. `sortType`) that should not\n * be copied onto ColDefs during state merge.\n * @public\n */\nexport function sanitizeColumnState(columnState) {\n if (!Array.isArray(columnState)) {\n return [];\n }\n return columnState.map((state) => {\n const sanitizedState = {};\n const mutableSanitizedState = sanitizedState;\n for (const key of allowedColumnStateKeys) {\n const value = state[key];\n if (value !== undefined) {\n mutableSanitizedState[key] = value;\n }\n }\n return sanitizedState;\n });\n}\n/**\n * Converts an array of ColDef to an array of ColumnState\n * @param colDefs - The column definitions to convert\n * @returns The corresponding ColumnState array\n * @public\n */\nexport function convertColDefsToColumnStates(colDefs) {\n return colDefs.map(convertColDefToColumnState);\n}\n/**\n * Merges two arrays, one of `ColDef` and one of `ColumnState`, and deduplicates them.\n * @remarks ColDef uses `field` and ColumnState uses `colId` to identify columns.\n * @privateRemarks For restoring saved `ColumnState` but also keep custom renderers and other `ColDef` properties.\n * @public\n */\nexport function mergeAndDedupColDefWithColumnState(colDefs, columnStates) {\n const sanitizedColumnStates = sanitizeColumnState(columnStates);\n const merged = {};\n const deduplicated = [];\n const fieldProp = 'field';\n const colIdProp = 'colId';\n sanitizedColumnStates.forEach((state) => {\n const matchingColDef = colDefs.find((item) => item[fieldProp] === state[colIdProp] ||\n (item[colIdProp] && item[colIdProp] === state[colIdProp]));\n if (matchingColDef) {\n const colDefStateMerge = Object.assign(Object.assign({}, matchingColDef), state);\n merged[matchingColDef[fieldProp]] = colDefStateMerge;\n deduplicated.push(colDefStateMerge);\n }\n });\n colDefs.forEach((def) => {\n if (!merged.hasOwnProperty(def[fieldProp])) {\n const newObj = Object.assign({}, def);\n merged[def[fieldProp]] = newObj;\n deduplicated.push(newObj);\n }\n });\n return deduplicated;\n}\n","/**\n * Extracts a user-friendly error message from a given error detail.\n * @param detail - The error detail, which can be a string, array, or object.\n * @returns A user-friendly error message.\n * @public\n */\nexport const extractErrorMessage = (detail) => {\n if (!detail)\n return '';\n if (typeof detail === 'string')\n return detail;\n if (Array.isArray(detail)) {\n return detail.map(extractErrorMessage).join(', ');\n }\n if (typeof detail === 'object') {\n if ('message' in detail && typeof detail.message === 'string')\n return detail.message;\n if ('TEXT' in detail && typeof detail.TEXT === 'string')\n return detail.TEXT;\n return JSON.stringify(detail);\n }\n return String(detail);\n};\n","import { createLogger } from '@genesislcap/foundation-logger';\n/**\n * Logger for the grid-pro package\n * @public\n */\nexport const logger = createLogger('grid-pro');\n","/**\n * Get the keys of the Metadata indexes map\n * @remarks This function will return a flat string array of all the keys in the \"metadata indexes\" map\n * @param data - the map data to have the keys extracted from\n * @returns the keys of the map\n * @public\n */\nexport function getAvailableIndexes(data) {\n const availabeIndexes = [];\n for (const [key] of data) {\n if (key) {\n availabeIndexes.push(key);\n }\n }\n return availabeIndexes;\n}\n/**\n * Get the values of the Metadata indexes map\n * @remarks This function will return a flat string array of all the values in the \"metadata indexes\" map\n * @param data - the map data to have the values extracted from\n * @returns the values of the map\n * @public\n */\nexport function getAvailableIndexFields(data) {\n const availableIndexFields = [];\n function traverse(items) {\n for (const item of items) {\n if (item !== null) {\n availableIndexFields.push(item);\n }\n }\n }\n for (const [key, value] of data) {\n if (key !== null && value !== null) {\n traverse(value);\n }\n }\n return availableIndexFields;\n}\n","/**\n * Convert string values from 'camelCase' to 'kebab-case'\n * @param value - The value to convert to Kebab case.\n * @returns The Kebab case result.\n * @public\n */\nexport const convertToKebabCase = (value) => value.replace(/([a-z])([A-Z])|\\s+/g, '$1-$2').toLowerCase();\n","import { __classPrivateFieldGet, __classPrivateFieldSet } from \"tslib\";\n/** @internal **/\nconst CLEANUP_TIMEOUT_MS = 10000;\n/**\n * @beta\n * Mixin class to expose `shouldRunConnect` and `shouldRunDisconnect`\n *\n * @remarks These can be used to control what lifecycle functionality is ran when the elements\n * are part of a custom layout. The class itself handles all events\n * @privateRemarks\n * #_ syntax is used for a javascript private method/variable\n * we can't use private/protected from typescript in an anonymous class like this\n */\nexport const LifecycleMixin = (Base) => { var _instances, __container, __latestTokenCode, __hasFirstLoaded, __cleanupTimeout, __shouldForceLifecycle, __blockLifecycleDueToTokenChange, __tryFindContainingLayout, _a; return _a = class extends Base {\n constructor(...args) {\n super(args);\n _instances.add(this);\n /** @internal **/\n __container.set(this, { _key: 'dom' });\n /**\n * If the token changes we suggest blocking the lifecycle methods\n * @internal\n **/\n __latestTokenCode.set(this, '');\n /**\n * Track first loaded to allow us to always run the connect lifecycle on the first load\n * @internal\n **/\n __hasFirstLoaded.set(this, false);\n /**\n * When you request to delete an item from the layout it will be removed from the DOM,\n * but the lifecycle might be blocked due to the same mechanism that we block the other\n * items.\n * This would block cleanup of the item, so we need to force a disconnection after a timeout\n * if this item hasn't reconnected within `CLEANUP_TIMEOUT_MS`.\n * @internal\n **/\n __cleanupTimeout.set(this, void 0);\n /**\n * Used to force lifecycle to run even if the token has changed, such as in instances where\n * we are forcing a disconnection due to this item being remove from the layout.\n * @internal\n **/\n __shouldForceLifecycle.set(this, false);\n }\n /**\n * @privateRemarks\n * Rather than using the basic implementation of cloning we run a copy constructor (deepClone)\n * and then manually clone the children too so they can intercept with an overriden cloneNode\n * if they want to\n */\n cloneNode(deep) {\n const thisClone = this.deepClone();\n if (deep) {\n Array.from(this.childNodes).forEach((child) => {\n thisClone.appendChild(child.cloneNode(true));\n });\n }\n return thisClone;\n }\n /**\n * @privateRemarks\n * Basic implementation of a copy constructor which creates a new element of the same class\n * and copies all attributes over.\n * None-trivial elements will likely want to override this function, call it using super.deepClone(),\n * and then perform extra setup such as copying properties, setting up event listeners\n */\n deepClone() {\n const copy = document.createElement(this.tagName.toLowerCase());\n this.getAttributeNames().forEach((at) => copy.setAttribute(at, this.getAttribute(at)));\n return copy;\n }\n /**\n * @beta\n * @returns - boolean controlling whether to run all disconnectedCallback lifecycle functionality\n */\n get shouldRunDisconnect() {\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'dom') {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'foundation-layout-cache') {\n return false;\n }\n // _key === 'foundation-layout'\n return !(__classPrivateFieldGet(this, __container, \"f\").dragging ||\n !__classPrivateFieldGet(this, __container, \"f\").hasFirstLoaded ||\n __classPrivateFieldGet(this, _instances, \"m\", __blockLifecycleDueToTokenChange).call(this, 'disconnect'));\n }\n /**\n * @beta\n * @returns - boolean controlling whether to run all connectedCallback lifecycle functionality\n * @privateRemarks\n * For now its just the same logic as shouldRunDisconnect\n */\n get shouldRunConnect() {\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'dom') {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'foundation-layout-cache') {\n return false;\n }\n // _key === 'foundation-layout'\n let connectionType = 'reconnect';\n if (__classPrivateFieldGet(this, __hasFirstLoaded, \"f\") === false) {\n __classPrivateFieldSet(this, __hasFirstLoaded, true, \"f\");\n connectionType = 'connect';\n }\n return !(__classPrivateFieldGet(this, __container, \"f\").dragging ||\n !__classPrivateFieldGet(this, __container, \"f\").hasFirstLoaded ||\n __classPrivateFieldGet(this, _instances, \"m\", __blockLifecycleDueToTokenChange).call(this, connectionType));\n }\n connectedCallback() {\n super.connectedCallback();\n if (__classPrivateFieldGet(this, __container, \"f\")._key !== 'foundation-layout') {\n __classPrivateFieldSet(this, __container, __classPrivateFieldGet(this, _instances, \"m\", __tryFindContainingLayout).call(this, this), \"f\");\n }\n }\n },\n __container = new WeakMap(),\n __latestTokenCode = new WeakMap(),\n __hasFirstLoaded = new WeakMap(),\n __cleanupTimeout = new WeakMap(),\n __shouldForceLifecycle = new WeakMap(),\n _instances = new WeakSet(),\n __blockLifecycleDueToTokenChange = function __blockLifecycleDueToTokenChange(lifecycleType) {\n var _b, _c;\n if (__classPrivateFieldGet(this, __container, \"f\")._key !== 'foundation-layout') {\n throw new Error('LifecycleMixin: should not be checking a token change if container not in the layout');\n }\n const tokensDifferent = __classPrivateFieldGet(this, __latestTokenCode, \"f\") !== __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken;\n let result = false;\n if (lifecycleType === 'connect') {\n // We always want to allow a first connection in the layout\n __classPrivateFieldSet(this, __latestTokenCode, (_b = __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken) !== null && _b !== void 0 ? _b : '', \"f\");\n }\n else if (lifecycleType === 'disconnect') {\n result = tokensDifferent;\n __classPrivateFieldSet(this, __cleanupTimeout, setTimeout(() => {\n __classPrivateFieldSet(this, __shouldForceLifecycle, result, \"f\");\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n this.disconnectedCallback();\n }\n }, CLEANUP_TIMEOUT_MS), \"f\");\n }\n else if (lifecycleType === 'reconnect') {\n result = tokensDifferent;\n __classPrivateFieldSet(this, __latestTokenCode, (_c = __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken) !== null && _c !== void 0 ? _c : '', \"f\");\n clearTimeout(__classPrivateFieldGet(this, __cleanupTimeout, \"f\"));\n }\n return result;\n },\n __tryFindContainingLayout = function __tryFindContainingLayout(e) {\n var _b;\n /**\n * This is a special case where the element is part of the layout cache\n * signified by a symbol put on the document cache root\n */\n if (e.getRootNode()[layoutCacheDocument] === true) {\n return { _key: 'foundation-layout-cache' };\n }\n /**\n * If this happens we have found the root of the document\n * without finding a containing FoundationLayout\n * hence, this item is not in a custom layout\n */\n if (e.getRootNode() instanceof Document || !((_b = e.getRootNode()) === null || _b === void 0 ? void 0 : _b.host)) {\n return { _key: 'dom' };\n }\n const shadowHost = e.getRootNode().host;\n if (shadowHost.class === 'FoundationLayoutMain') {\n const layoutHost = shadowHost;\n layoutHost._key = 'foundation-layout';\n return layoutHost;\n }\n return __classPrivateFieldGet(this, _instances, \"m\", __tryFindContainingLayout).call(this, shadowHost);\n },\n _a; };\n/**\n * Stored on the layout's internal cache to signify that the document is not part of the DOM\n * @public\n */\nexport const layoutCacheDocument = Symbol('layout-cache-document');\n","/**\n * Delay for a given number of milliseconds\n * @param ms - The number of milliseconds to delay\n * @returns A promise that resolves after the given number of milliseconds\n * @public\n * @example\n * ```ts\n * await delay(1000);\n * console.log('1 second later');\n * ```\n */\nexport const delay = (ms) => new Promise((resolve) => {\n setTimeout(resolve, ms);\n});\n","import { logger } from './logger';\n/**\n * Inserts a CSS rule into the document by creating a new style element or using an existing one with the specified ID.\n * Returns a function that can be called to remove the rule from the document.\n * @public\n * @param cssRule - The CSS rule to insert.\n * @param styleElementId - The ID of the style element to use or create.\n * @returns A function that removes the rule from the document.\n */\nexport const insertDocumentCSSRule = (cssRule, styleElementId) => {\n var _a;\n let styleElement = document.getElementById(styleElementId);\n if (styleElement) {\n logger.debug(`\n An element with the id of '${styleElementId}' already exists and likely has the css rules applied.\n `);\n return;\n }\n const headElement = (_a = document.head) !== null && _a !== void 0 ? _a : document.getElementsByTagName('head')[0];\n styleElement = document.createElement('style');\n styleElement.id = styleElementId;\n headElement.appendChild(styleElement);\n // Check if the CSS rule contains multiple rules (contains multiple closing braces)\n const ruleCount = (cssRule.match(/}/g) || []).length;\n if (ruleCount > 1) {\n // Multiple rules: use textContent to avoid insertRule limitations\n styleElement.textContent = cssRule;\n return () => {\n if (!styleElement) {\n return;\n }\n headElement.removeChild(styleElement);\n };\n }\n else {\n // Single rule: use insertRule for consistency with existing behavior\n const styleIndex = styleElement.sheet.insertRule(cssRule);\n return () => {\n if (!styleElement) {\n return;\n }\n styleElement.sheet.deleteRule(styleIndex);\n headElement.removeChild(styleElement);\n };\n }\n};\n/**\n * Inserts a CSS link into the document if it doesn't already exist.\n * @public\n * @param href - The URL of the CSS file to insert.\n */\nexport const insertDocumentLink = (href) => {\n const links = document.head.querySelectorAll('link');\n // Already been injected\n for (const index in links)\n if (links[index].href === href)\n return;\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n document.head.appendChild(link);\n};\n/**\n * Recursively gather all elements including those in shadow DOM\n * @public\n */\nexport function getAllElements(root) {\n const elements = [];\n const processedShadowRoots = new Set();\n function collectElements(node) {\n // Get all elements in the current node\n const nodeElements = Array.from(node.querySelectorAll('*'));\n elements.push(...nodeElements);\n // Process shadow roots\n nodeElements.forEach((el) => {\n if (el.shadowRoot && !processedShadowRoots.has(el.shadowRoot)) {\n processedShadowRoots.add(el.shadowRoot);\n collectElements(el.shadowRoot);\n }\n });\n }\n collectElements(root);\n return elements;\n}\n","import { createLogger } from '@genesislcap/foundation-logger';\n/**\n * Logger for the foundation-utils package\n * @public\n */\nexport const logger = createLogger('foundation-utils');\n"],"names":["DateEditor","FoundationElement","init","params","this","value","dateFormat","withTime","inputType","actualWidth","column","getActualWidth","getGui","refresh","getValue","isPopup","changeHandler","event","dateValue","target","control","valueAsNumber","isNaN","undefined","afterGuiAttached","input","focus","isCancelBeforeStart","data","observable","prototype","agDateEditorStyles","css","getDateEditorTemplate","prefix","html","ref","x","format","c","foundationDateEditor","compose","baseName","styles","template","MultiselectEditor","selectedOptions","selectedOptionsCallback","then","split","destroy","detail","agMultiselectEditorStyles","getMultiselectEditorTemplate","designSystem","async","allOptionsResourceName","valueField","labelField","datasourceOptions","foundationMultiselectEditor","NumberEditor","parseFloat","onChange","agNumberEditorStyles","getNumberEditorTemplate","withFormatting","formatOptions","String","placeholder","disabled","foundationNumberEditor","SelectEditor","combobox","open","_a","agSelectEditorStyles","getSelectEditorTemplate","position","allowCustomOptions","values","foundationSelectEditor","StringEditor","agStringEditorStyles","getStringEditorTemplate","foundationStringEditor","ActionRenderer","eGridCell","addEventListener","key","ENTER","clickHandler","isDisabled","error","actionClick","pendingAction","dataTestId","_b","uniqueFieldName","create","DesignToken","actionHeightMultiplier","withDefault","agActionRendererStyles","foundationGridProActionRenderer","actionButtonStyle","appearance","actionName","ActionsMenuRenderer","foundationGridProActionsMenuRenderer","headerName","getActionsMenuDef","actions","overrideDef","customActionsOpenerName","isVertical","buttonAppearance","actionsMenuDef","cellRenderer","actionsMenu","cellRendererParams","buttonText","cellStyle","border","overflow","field","width","Object","assign","BooleanRenderer","colDef","editable","selected","userInputHandler","e","MouseEvent","type","button","KeyboardEvent","api","getEditingCells","find","cell","rowIndex","node","getInstanceId","eventStarted","getColDef","rowPinned","dispatchEvent","valueChanged","setDataValue","eventStopped","oldValue","newValue","getDataTestId","agBooleanRendererStyles","getAgBooleanRendererTemplate","checkboxComponent","foundationAgBooleanRenderer","EditableRenderer","valueFormatted","formatValue","agEditableRendererStyles","getAgEditableRendererTemplate","foundationAgEditableRenderer","agIconRendererStyles","hasIconSrc","iconSrc","length","hasIconName","iconName","getIconRendererTemplate","iconComponent","showHover","_c","when","iconHeight","iconColor","classes","iconSize","variant","secondaryIcon","secondaryIconColor","IconRenderer","foundationIconRenderer","SelectRenderer","constructor","super","arguments","selectionChanged","onSelect","accessor","agSelectRendererStyles","getSelectRendererTemplate","selectComponent","optionComponent","defaultValue","repeat","options","name","parent","tooltip","displayName","foundationAgSelectRenderer","agStatusPillRendererStyles","getStatusPillRendererTemplate","backgroundColor","iconInitial","iconInitialBackgroundColor","textColor","text","dateCountdownUnit","dateCountdown","dateCountdownCompletedMessage","hideWhenCountdownCompleted","dateCountdownVisibleAfter","StatusPillRenderer","foundationStatusPillRenderer","AgTextFieldRenderer","textValue","textChanged","includes","textField","caretPos","selectionStart","stopPropagation","textFieldRendererStyles","getTextFieldRendererTemplate","textComponent","suffix","hideAffixFromScreenReader","maxLength","foundationAgTextFieldRenderer","AgTextRenderer","textRendererStyles","getTextRendererTemplate","foundationAgTextRenderer","setValueWithAccessor","indexOf","accessorPieces","currentObject","fieldPiece","shift","GridProCell","connectedCallback","wrapperGridProColumn","parentElement","renderer","definition","rendererParams","slottedAgRendererChanged","customElement","CellTemplate","slotted","GridProColumn","slottedAgCellChanged","deepClone","copy","keys","forEach","bind","structuredClone","ColumnTemplate","criteriaDelimiter","criteriaJoin","GenesisGridDatasourceElement","isSnapshot","maxRows","MAX_ROWS_250","maxView","MAX_VIEW_1000","movingView","reverse","disablePolling","offset","DEFAULT_REQ_REP_OFFSET","pollingInterval","REQ_REP_POLLING_INTERVAL_MS","pollTriggerEvents","requestAutoSetup","restartOnReconnection","criteriaFromFilters","Map","update","rowId","rowIdAttr","isRequestServer","REQUEST_SERVER_ROW_ID","DATASERVER_ROW_ID","hasDefaultRowId","defaultRowIdByResourceType","criteria","buildCriteria","orderBy","resourceName","viewNumber","fields","request","concat","Array","from","normalisedCriteria","join","setFilter","fieldName","newFilter","set","next","removeFilter","delete","datasource","status","REQUEST_SERVER","datasourceStatusChanged","prev","handleErrors","errors","message","isArray","map","item","TEXT","$emit","clearErrors","connected","initializeDatasource","options_1","fetchMeta","startStream","connect","isConnected","getMetadata","catch","host","errorMessage","errorType","Error","OperationType","attr","mode","attribute","converter","nullableNumberConverter","volatile","GridProBaseDatasource","dataSubWasLoggedOff","keepColDefsOnClearRowData","rowData","transactionData","add","remove","_isDisconnected","subscribeToConnection","isConnected$","connectionSub","unsubscribe","subscribe","isDisconnected","setDisconnected","reloadResourceData","unsubscribeFromConnection","generateColumnDefsFromMetadata","fieldsMetadata","getFilterParamsByFieldType","getFilterByFieldType","flatMap","colDefBase","filterParams","STRING","cellEditor","stringEditor","NUMBER","numberEditor","BOOLEAN","boolean","DATE","valueFormatter","dateEditor","DATETIME","cellEditorParams","ENUM","enumOptions","selectEditor","option","label","warn","filter","handleStreamInserts","insertedRows","addIndex","currentAddIndex","insertData","has","existingData","get","updatedRow","push","handleStreamDeletes","deletedRows","deleteData","rowToBeDeleted","fromEntries","obj","handleStreamUpdates","updatedRows","updateData","rowToBeUpdated","applyAllTransactions","_d","_e","_f","loadingFinished","size","noDataAvailable","applyMappedTransaction","Add","Remove","Update","transaction","operation","mappedTransaction","mapTransaction","dataChanged","changes","applyTransaction","operations","rowDataMapper","loadMore","restart","disconnected","getStatusBarActionConfig","configValue","enabled","config","getDatasourceStatusBarPanels","isServerSide","statusBarConfig","additionalPanels","loadMoreConfig","loadMoreParams","onLoadMore","statusPanel","statusPanelParams","align","pagination","reloadConfig","reload","reloadParams","onReload","icon","baseDatasourceEventNames","GridProClientSideDatasource","errorHandlerDialogStyles","getErrorHandlerDialogTemplate","gridErrorItems","dialogTag","buttonTag","hideDatasourceError","gridProDatasource","toLowerCase","getServerSideFilterParamsByFieldType","buttons","closeOnApply","closeOnClear","maxNumConditions","filterOptions","displayKey","predicate","_","cellValue","numberOfInputs","comparator","filterLocalDateAtMidnight","cellValueTime","Date","setHours","filterValueTime","getTime","browserDatePicker","BaseServerSideDatasource","serverRowsCount","clientRowsCount","moreRows","calculatedRowsCount","currentSequenceId","reloadResourceDataFunc","errorHandlerFunc","resourceParams","originalCriteriaMatch","getResourceParam","resourceIndexes","resourceColDefs","zeroBasedViewNumber","pagingMode","criteriaOnlyRequest","DETAILS","setResourceParam","getRows","setupFiltering","filterModelBeingApplied","filterModel","filtersAreBeingApplied","filtersAreGettingCleaned","filterModelBeingAppliedDiffersFromCurrent","JSON","stringify","currentFilterModel","refreshDatasource","buildCriteriaMatchFromFilters","setupFilteringAndSorting","setupSorting","sourceRef","lastSuccessRowData","updateResourceParams","getOrderByAndToBeSortedColIds","searchValue","entries","searchIndex","findIndex","toBeSorted","splice","criteriaMatch","filters","getFiltersByType","k","model","selectedValues","colMeta","o","NAME","allValues","VALID_VALUES","every","v","orConditions","val","safeVal","replace","valueTwo","filterTo","dateFrom","dateTo","now","todayStr","getFullYear","getMonth","toString","padStart","getDate","filterType","getPageNumber","start","recordsPerPage","totalRecords","Math","floor","currentPageIndex","ceil","getCorrectRowCount","currentLastRowNumber","endRow","defaultCount","min","rowCount","isNotFirstViewNumber","getEffectivePagingMode","DataserverServerSideDatasource","createDataserverStreamFunc","_super","dataserverStreamSubscription","call","isNewPageSize","success","dataserverStream","startRow","Number","VIEW_NUMBER","getMoreRows","applyResult","dataserverResult","DOM","queueUpdate","CRITERIA_MATCH","updatedInfo","snapshot","MAX_ROWS","MAX_VIEW","ROW","ROWS_COUNT","applyServerSideData","result","messageType","MESSAGE_TYPE","LOGOFF_ACK","MSG_NACK","fail","MORE_ROWS","successRowData","nextMessage","dataServerResultFilter","d","handleCurrentStreamLoad","SEQUENCE_ID","SOURCE_REF","toBeAppliedSortModel","sortModel","currentSortModel","ORDER_BY","REVERSE","coldIdBeingSorted","colId","sortTypeBeingApplied","sort","orderByAndToBeSortedColIds","availableIndexes","availableIndexFields","debug","rows","inserts","ReqRepServerSideDatasource","discoveredTotalRowCount","currentNextOffset","createReqRepRequestFunc","createReqRepStreamFunc","onPollingUpdate","onPollingUpdateFunc","resetPreviousPollResult","resetPreviousPollResultFunc","usePolling","debouncedCreateStream","createPollingStream","OFFSET","effectivePagingMode","updatePaginationParams","requestParams","buildRequestDetails","requestResult","isLastView","determineIsLastView","schedulePollingStream","hasMoreRowsInResult","NEXT_VIEW","preCheckRequestParams","moreRowsPreCheck","REPLY","NEXT_OFFSET","destroyPollingStream","currentBatchSize","reply","insertDataRowId","noRowIdMessage","logger","tempId","uuid","createId","cancel","currentStreamParams","stream","reqRepPollingStream","reqRepPollingDatasource","reqRepPollingSubscription","receivedMessage","ERROR","baseDetails","GridProServerSideDatasource","liveUpdates","sortIndicatorCSSDestroy","previousPollResult","hasCapturedFirstPollResult","resourceNameChanged","criteriaChanged","oldCriteria","newCriteria","criteriaIsNotDuplicate","normaliseCriteria","ssrmDatasource","shouldRunConnect","disconnectedCallback","shouldRunDisconnect","deferredGridOptions","deferredColumnStates","liveUpdatesStream","cacheFilterConfig","clearRowData","refreshServerSide","purge","setServerSideDatasource","loadingStarted","applyServerSideSortIndicatorStyling","removeServerSideSortIndicatorStyling","addGridCssClass","className","removeGridCssClass","gridOptions","getRowId","getRowStyle","ROW_REF","color","cacheBlockSize","defaultColDef","resizable","sortable","unSortIcon","rowBuffer","rowModelType","suppressServerSideInfiniteScroll","suppressMultiSort","onFilterChanged","onSortChanged","onPaginationChanged","initialize","ready","dataInit","indexes","getResourceIndexes","availableSortableFields","fieldMetadata","originalFieldDef","agColumnDefs","getAgColumnDefs","schemaUpdated","schema","metadata","createReqRepRequest","createReqRepStream","applyReqRepPollingUpdate","requestOnlyParams","createDataserverStream","dataserverOnlyParams","filtersRestored","once","newPage","pollingDatasource","withColumnDefs","dataCleared","includeSchema","applyServerSideTransaction","avaialbleIndexes","resourceIndexesMap","allSortableFields","Set","index","FIELDS","fieldsFromIndexes","additionalFields","existingParams","_g","_h","currentOffset","baseMaxRows","totalRowsToFetch","clear","polledData","startsWith","row","currentPollMap","rowsToUpdate","rowsToInsert","rowsToDelete","previousRow","serializer","serialize","added","updated","removed","totalInPoll","streamOnMessage","QUERY_UPDATE","updates","deletes","netRowChange","clientNetRowChange","onError","colDefsFromGenesisData","availableCriteriaFields","agHeadCSS","agGridAlpineFontFace","agGridBalhamFontFace","agGridMaterialFontFace","agThemeFontFaceMap","alpine","alpineDark","balham","balhamDark","material","defaultAgGridFontFace","agGridCSS","agThemeAlpineNofontsCSS","agThemeBalhamNofontsCSS","agThemeMaterialNofontsCSS","agExternalStockStyles","datasourceEventNames","dataLoaded","moreDataAvailable","sizeChanged","gridProGenesisDatasourceEventNames","moreRowsChanged","getClientSideFilterParamsByFieldType","GridProGenesisDatasource","cachedRowArray","requiresFullRowDataAndColDefs","_lastMoreRows","_isMoreRowsResult","_nextOffset","_loadMoreCount","initialized","requestChanged","oldRequest","newRequest","requestIsNotDuplicate","colDefsDeepClone","columnDefinition","definitionCopy","fieldKey","loadResourceData","updateSub","pipe","skip","debounceTime","tap","f","dataSub","_sourceRef","BehaviorSubject","deinit","reset","refreshRows","updateCachedRowArray","emitDataLoaded","setRowData","emitDataChanged","isInitialLoad","updateLoadMoreCount","withFullInit","requiresMetadataFetch","handleSnapshot","catchError","err","hasRowsCountInResult","hasNextOffsetInResult","resourceType","updateLoadMoreStatus","handleStreamResult","moreRowsDetail","applyRequestServerData","applyDataserverData","hasMoreData","requestServerResult","previousSize","requestServerData","noRowIdError","handleSizeChanged","match","dataServerResult","oldSize","newSize","DATASERVER","getEnumFilterParams","getColumnType","metadataType","dateValueFormatter","dateTimeValueFormatter","formatDateExtra","epoch","toISOString","slice","DEBOUNCED_RESIZE_TIME","gridProEventNames","datasourceErrorClose","gridProErrorNames","unknown","AG_PROPERTIES","AG_NUMBER_PROPERTIES","AG_BOOLEAN_PROPERTIES","AG_NUMBER_PROPERTIES_SET","AG_BOOLEAN_PROPERTIES_SET","AG_PROPERTIES_SET","toBoolean","toUpperCase","copyAttributesToGridOptions","component","pGridOptions","coercedValue","toNumber","G","registerModules","GridPro","rowDataChanged","initialised","gridApi","themeChanged","classNames","destroyFontFace","insertFontFace","getfilterModel","persistFilterModelKey","_filterConfig","statePersistence","getFilterModel","setFilterModel","saveFilterModel","cachedTotalColumnWidth","columnCount","disposed","debouncedSaveColumnState","saveColumnState","debouncedSaveFilterModel","autoCellRendererByType","onlyTemplateColDefs","gridAutosizingEnabled","sizeColumnsToContent","sizeColumnsToFit","asyncAdd","asyncRemove","asyncUpdate","enableCellFlashing","enabledRowFlashing","enableRowFlashing","defaultColumnConfig","gridFontFace","columnComponentName","theme","themeMode","withStatusBar","rehydrationAttempted","eventHandlers","gridEventsQueue","registeredGridEvents","gridEventListeners","boundGlobalEventListener","globalEventListener","agAttributes","agPropertiesMap","reduce","property","hideDataSourceError","handleBaseDatasourceError","handleInitialize","handleDataLoaded","handleDataChanged","handleSchemaUpdated","handleDataCleared","handleLoadingStarted","handleLoadingFinished","handleNoDataAvailable","handleFiltersRestored","handleMoreDataAvailable","handleDatasourceError","handleDatasourceDestroy","handleRefreshServerSide","handleSetServerSideDatasource","handleAddGridCssClass","handleRemoveGridCssClass","handleApplyServerSideTransaction","eventType","listener","PUBLIC_EVENTS","addGridEventListener","handleError","gridProError","removeAttribute","visibilityObserverCleanup","gridVisible","debouncedColumnAutosize","eventName","handler","defineProperty","agAttributeChangedCallback","enumerable","configurable","paginationPageSize","DEFAULT_PAGINATION_PAGE_SIZE","removeEventListener","performDisconnectCleanup","queueMicrotask","debounced","clearTimeout","clearLocalGridOptions","destroyGridInstance","invalidateColumnWidthCache","agGrid","gridSlot","replaceChildren","columnApi","columnDefinitions","getColumnDefs","columnState","getColumnState","agGridOptions","columnDefs","initGrid","applyTransactionAsync","flashAddedCells","rowNodes","flashCells","preSetColumnDefs","colDefs","getColumnDef","colDefsMergedWithTemplateDefs","mergeAllColumnDefsAndStates","col","rowGroup","pivot","setColumnDefs","flushAsyncTransactions","refreshCells","force","showLoadingOverlay","hideOverlay","showNoRowsOverlay","restoreCachedFilterConfig","statusBar","getStatusPanel","updateParams","setAttribute","gridElement","classList","callback","applyServerSideTransactionAsync","combineAllGridComponents","gridOptionsComponents","defaultFoundationAgComponents","action","statusPill","select","multiselectEditor","labelValue","gridComponents","statePersistanceEnabled","persistColumnStateKey","getSelectedRows","rowSelectionMode","rowSelection","getCellRanges","getCellRangeRowData","enableRangeSelection","focusedCell","getFocusedCell","rowNode","getDisplayedRowAtIndex","cellRanges","range","startIndex","endIndex","some","existing","hasSelectedRows","updateLabelValueStatusBar","setTimeout","removeConfigWidthsToAutosize","colState","allHeadersHidden","hide","getColumn","Boolean","getSavedColumnState","deleteColumnState","resetToDefault","applyColumnState","state","applyOrder","resetColumnState","handleColumnSizing","restoreColumnState","sanitizedColState","gridParams","querySelector","gridOnChangeCallback","attributes","attrName","components","onGridReady","onFirstDataRendered","rest","gridOptionsConfig","derivedOptions","enableCellChangeFlash","suppressDragLeaveHidesColumns","eventsAndCallbacks","EVENT_GRID_READY","gridId","id","onColumnPinned","onColumnResized","onColumnMoved","onDisplayedColumnsChanged","filterChangedEvent","onGridSizeChanged","hasGetRowId","setupPaginationAndStatusBar","setLocalGridOptions","firstChild","removeChild","applyTemplateDefinitions","deferredColumnDefsOrState","deprecated","columnDefs_1","columnDefinitionsFromMetadata","colDefFromMetadata","headerCaseType","changeCaseByType","templateColumnDefs","querySelectorAll","templateColumn","columnDef","metadataValues","cellRendererSelector","tooltipComponent","tooltipValueGetter","cellClassRules","metadataColumnDef","templateColumnKeys","colDefsToReturn","g","savedColumnState","panelExists","statusPanelType","panels","panel","addRowCountPanel","statusPanels","isPaginationEnabled","rowCountStatusPanel","addMaxRowsPanel","addAggregationPanel","aggregation","addDatasourcePanels","newDatasourcePanels","addPaginationPanel","suppressScrollOnNewData","suppressPaginationPanel","newUserDefinedPanels","handleBothSizingModes","handleIndividualSizingModes","calculateTotalColumnWidth","getGridWidth","autoSizeAllColumns","allColumns","getAllGridColumns","currentColumnCount","sum","gridWidth","clientWidth","observedAttributes","lowerCasedPropertyNames","kebabCasePropertyNames","attName","gridPropertyName","changeObject","currentValue","processOnChange","eventLowerCase","browserEvent","Event","agGridDetails","callbackMethod","fontFaceRule","newDestroy","fontFaceDestroy","foundationGridProShadowOptions","defaultGridProConfig","shadowOptions","foundationGridPro","foundationGridProStyles","getGridProTemplate","customErrorHandlerTemplate","gridProTemplate","AgGridCSSVars","AgGridTheme","agThemeTokenMapClassname","themeName","agThemeFontsId","agThemeTokenMapCSS","tokenMap","CSSVarsTokenMapper","GridProRendererTypes","GridProStatusBarTypes","GRID_READY_EVENT","EDITED_COLUMN_FIELD","ERROR_COLUMN_FIELD","defaultGridOptionsConfig","GridOptionsConfig","DI","createInterface","instance","GridProCaseType","DEFAULT_STATUS_BAR_CONFIG","LocalStorageStatePersistence","localStorageGridOptions","session","getLocalStorageItem","allGridOptions","parse","existingOptions","setLocalStorageItem","StatePersistence","singleton","LabelValueStatusBarComponent","element","document","createElement","currentParams","updateDisplay","style","display","labelElement","appendChild","innerHTML","valueElement","LoadMoreStatusBarComponent","buttonLabel","isLoading","isLeftAligned","alignItems","gridOptionsService","justifyContent","paddingLeft","paddingRight","height","designSystemPrefix","createProgressRing","createLoadMoreButton","updateButtonVisibility","loadMoreButton","progressRing","margin","textContent","minWidth","textAlign","lineHeight","updateAriaLabel","showLoading","ariaLabel","loading","prevParams","PaginationStatusBarComponent","createPaginationPanel","paginationChangedHandler","paginationPanel","paginationSummaryPanel","firstPageButton","createPaginationButton","prevPageButton","descriptionPanel","pageStartDisplay","pageNumberDisplay","pageOfDisplay","pageNumberTotalDisplay","nextPageButton","lastPageButton","createTextNode","addPaginationEventListeners","goToPage","preventDefault","iconSpan","substring","page","apiAny","directMethod","proxyMethod","first","previous","last","paginationProxy","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","currentPage","paginationGetCurrentPage","getCurrentPage","totalPages","paginationGetTotalPages","getTotalPages","pageSize","paginationGetPageSize","getPageSize","paginationGetRowCount","getMasterRowCount","hasUncertainTotal","getModel","getType","paginationIsLastPageFound","totalDisplay","isFirstPage","isLastPage","updateButtonState","ReloadStatusBarComponent","isReloading","createRefreshIcon","refreshIcon","cursor","fontSize","mouseoverHandler","opacity","mouseoutHandler","showReloading","reloading","RowCountStatusBarComponent","rowCountDisplay","modelUpdatedHandler","getDisplayedRowCount","displayText","ErrorTooltip","eGui","convertColDefToColumnState","pinned","sortIndex","aggFunc","rowGroupIndex","pivotIndex","flex","allowedColumnStateKeys","sanitizeColumnState","sanitizedState","mutableSanitizedState","convertColDefsToColumnStates","mergeAndDedupColDefWithColumnState","columnStates","sanitizedColumnStates","merged","deduplicated","fieldProp","colIdProp","matchingColDef","colDefStateMerge","def","hasOwnProperty","newObj","extractErrorMessage","createLogger","getAvailableIndexes","availabeIndexes","getAvailableIndexFields","traverse","items","convertToKebabCase","LifecycleMixin","Base","_instances","__container","__latestTokenCode","__hasFirstLoaded","__cleanupTimeout","__shouldForceLifecycle","__blockLifecycleDueToTokenChange","__tryFindContainingLayout","args","_key","cloneNode","deep","thisClone","childNodes","child","tagName","getAttributeNames","at","getAttribute","dragging","hasFirstLoaded","connectionType","WeakMap","WeakSet","lifecycleType","tokensDifferent","lifecycleUpdateToken","getRootNode","layoutCacheDocument","Document","shadowHost","class","layoutHost","Symbol","delay","ms","Promise","resolve","insertDocumentCSSRule","cssRule","styleElementId","styleElement","getElementById","headElement","head","getElementsByTagName","styleIndex","sheet","insertRule","deleteRule","getAllElements","root","elements","processedShadowRoots","collectElements","nodeElements","el","shadowRoot"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"445.445.xxxxxxxxxxxxxxxxxxxx.js","mappings":"oSAMA,WAAa,KAMN,MAAMA,UAAmB,EAAAC,kBAC5B,IAAAC,CAAKC,GACIA,IAELC,KAAKD,OAASA,EACdC,KAAKC,MAAQF,EAAOE,MACpBD,KAAKE,WAAaH,EAAOI,SAAW,mBAAqB,aACzDH,KAAKI,UAAYL,EAAOI,SAAW,iBAAmB,OACtDH,KAAKK,YAAcN,EAAOO,OAAOC,iBACrC,CACA,MAAAC,GACI,OAAOR,IACX,CACA,OAAAS,CAAQV,GACJ,OAAO,CACX,CACA,QAAAW,GACI,OAAOV,KAAKC,KAChB,CACA,OAAAU,GACI,OAAO,CACX,CACA,aAAAC,CAAcC,GACV,MAAMC,EAAYD,EAAME,OAAOC,QAAQC,cACvCjB,KAAKC,MAASiB,MAAMJ,QAAyBK,EAAZL,CACrC,CACA,gBAAAM,GACIpB,KAAKqB,MAAMC,OACf,CACA,mBAAAC,GACI,QAASvB,KAAKD,OAAOyB,KAAK,KAC9B,GAEJ,QAAW,CACP,EAAAC,YACD7B,EAAW8B,UAAW,aAAS,IAClC,QAAW,CACP,EAAAD,YACD7B,EAAW8B,UAAW,mBAAe,GAKjC,MAAMC,EAAqB,EAAAC,GAAI;;;;EAWzBC,EAAwB,CAACC,EAAS,eAAiB,EAAAC,IAAK;KAChED;OACC,IAAAE,KAAI;aACIC,QAAkBd,IAAZc,EAAEhC,OAAmC,OAAZgC,EAAEhC,MAAiB,GAAK,QAAUgC,EAAEhC,OAAOiC,OAAOD,EAAE/B;WACrF+B,GAAMA,EAAE7B;aACP,CAAC6B,EAAGE,IAAMF,EAAErB,cAAcuB,EAAEtB;oBACpBoB,GAAMA,EAAE5B;OACtByB;EAQMM,EAAuBxC,EAAWyC,QAAQ,CACnDC,SAAU,cACVC,OAAQZ,EACRa,SAAUX,K,4GC3EP,MAAMY,UAA0B,EAAA5C,kBACnC,IAAAC,CAAKC,GACIA,IAELC,KAAKD,OAASA,EACdC,KAAK0C,gBAAkB3C,EAAOE,MAE1BD,KAAKD,OAAO4C,yBACZ3C,KAAKD,OAAO4C,wBAAwB3C,KAAKD,OAAOyB,MAAMoB,KAAMF,IACxD1C,KAAK0C,gBAAkBA,IAIH,iBAAjB3C,EAAOE,QACdD,KAAK0C,gBAAkB3C,EAAOE,MAAM4C,MAAM,MAElD,CACA,MAAArC,GACI,OAAOR,IACX,CACA,OAAA8C,GAAY,CACZ,OAAArC,CAAQV,GACJ,OAAO,CACX,CACA,QAAAW,GACI,OAAOV,KAAK0C,eAChB,CACA,OAAA/B,GACI,OAAO,CACX,CACA,aAAAC,CAAcC,GACVb,KAAK0C,gBAAkB7B,EAAMkC,MACjC,CACA,mBAAAxB,GACI,QAASvB,KAAKD,OAAOyB,KAAK,KAC9B,GAEJ,QAAW,CACP,EAAAC,YACDgB,EAAkBf,UAAW,cAAU,IAC1C,QAAW,CACP,EAAAD,YACDgB,EAAkBf,UAAW,uBAAmB,GAK5C,MAAMsB,EAA4B,EAAApB,GAAI,GAOhCqB,EAA+B,CAACC,EAAe,eAAiB,EAAAnB,IAAK;KAC7EmB;;aAESjB,GAAMA,EAAElC,OAAOoD;uBACLlB,GAAMA,EAAES,iBAAmB;uBAC5B,CAACT,EAAGE,IAAMF,EAAErB,cAAcuB,EAAEtB;;;qBAG7BoB,GAAMA,EAAElC,OAAOqD;oBAChBnB,GAAMA,EAAElC,OAAOsD;oBACfpB,GAAMA,EAAElC,OAAOuD;0BACTrB,GAAMA,EAAElC,OAAOwD;;MAEpCL;EAQOM,EAA8Bf,EAAkBJ,QAAQ,CACjEC,SAAU,qBACVC,OAAQS,EACRR,SAAUS,K,4GC9EP,MAAMQ,UAAqB,EAAA5D,kBAC9B,IAAAC,CAAKC,GACIA,IAELC,KAAKD,OAASA,EACdC,KAAKC,MAAQF,EAAOE,MACpBD,KAAKK,YAAcN,EAAOO,OAAOC,iBACrC,CACA,MAAAC,GACI,OAAOR,IACX,CACA,OAAAS,CAAQV,GACJ,OAAO,CACX,CACA,QAAAW,GACI,OAAOV,KAAKC,KAChB,CACA,OAAAU,GACI,OAAO,CACX,CACA,gBAAAS,GACIpB,KAAKqB,MAAMC,OACf,CACA,aAAAV,CAAcC,GACV,MAAMZ,EAAQyD,WAAW7C,EAAME,OAAOd,OACtCD,KAAKC,MAASiB,MAAMjB,QAAiBkB,EAARlB,EACzBD,KAAKD,OAAO4D,UACZ3D,KAAKD,OAAO4D,SAAS3D,KAAKC,MAAOD,KAAKD,OAC9C,CACA,mBAAAwB,GACI,QAASvB,KAAKD,OAAOyB,KAAK,KAC9B,GAEJ,QAAW,CACP,EAAAC,YACDgC,EAAa/B,UAAW,cAAU,IACrC,QAAW,CACP,EAAAD,YACDgC,EAAa/B,UAAW,aAAS,IACpC,QAAW,CACP,EAAAD,YACDgC,EAAa/B,UAAW,mBAAe,GAKnC,MAAMkC,EAAuB,EAAAhC,GAAI;;;;EAW3BiC,EAA0B,CAACX,EAAe,eAAiB,EAAAnB,IAAK;KACxEmB;OACC,IAAAlB,KAAI;qBACYC,GAAMA,EAAElC,OAAO+D;eACrB7B,GAAMA,EAAElC,OAAOgE;aACjB9B,QAAmBd,IAAZc,EAAEhC,MAAsB,GAAK+D,OAAO/B,EAAEhC;aAC9C,CAACgC,EAAGE,KACbF,EAAErB,cAAcuB,EAAEtB;kBAEHoB,GAAMA,EAAElC,OAAOkE;gBACjBhC,GAAMA,EAAElC,OAAOmE;;oBAEXjC,GAAMA,EAAE5B;OACtB6C;EAQMiB,EAAyBV,EAAapB,QAAQ,CACvDC,SAAU,gBACVC,OAAQqB,EACRpB,SAAUqB,K,4GCjFP,MAAMO,UAAqB,EAAAvE,kBAC9B,IAAAC,CAAKC,GACIA,IAELC,KAAKD,OAASA,EACdC,KAAKC,MAAQF,EAAOE,MACpBD,KAAKK,YAAcN,EAAOO,OAAOC,iBACrC,CACA,MAAAC,GACI,OAAOR,IACX,CACA,OAAAS,CAAQV,GACJ,OAAO,CACX,CACA,QAAAW,GACI,OAAOV,KAAKC,KAChB,CACA,OAAAU,GACI,OAAO,CACX,CACA,gBAAAS,GACIpB,KAAKqE,SAASC,MAAO,CACzB,CACA,aAAA1D,CAAcC,GACV,IAAI0D,EACJvE,KAAKC,MAAgC,QAAvBsE,EAAK1D,EAAMkC,cAA2B,IAAPwB,OAAgB,EAASA,EAAGtE,KAC7E,CACA,mBAAAsB,GACI,QAASvB,KAAKD,OAAOyB,KAAK,KAC9B,GAEJ,QAAW,CACP,EAAAC,YACD2C,EAAa1C,UAAW,cAAU,IACrC,QAAW,CACP,EAAAD,YACD2C,EAAa1C,UAAW,aAAS,IACpC,QAAW,CACP,EAAAD,YACD2C,EAAa1C,UAAW,mBAAe,GAKnC,MAAM8C,EAAuB,EAAA5C,GAAI,GAO3B6C,EAA0B,CAACvB,EAAe,eAAiB,EAAAnB,IAAK;KACxEmB;oBACgBjB,GAAMA,EAAE5B;OACvB,IAAA2B,KAAI;eACMC,GAAOA,EAAElC,OAAO2E,SAAWzC,EAAElC,OAAO2E,SAASzC,EAAElC,OAAOyB,MAAQ;aAChES,GAAMA,EAAElC,OAAOoD;oBACT,CAAClB,EAAGE,IAAMF,EAAErB,cAAcuB,EAAEtB;;;qBAG1BoB,GAAMA,EAAElC,OAAOqD;oBAChBnB,GAAMA,EAAElC,OAAOsD;oBACfpB,GAAMA,EAAElC,OAAOuD;wBACZJ;8BACOjB,GAAMA,EAAElC,OAAO4E;0BACnB1C,GAAMA,EAAElC,OAAOwD;cAC3BtB,GAAMA,EAAElC,OAAO6E;8BACC3C,GAAMA,EAAElC,OAAOE;;MAExCiD;EAQO2B,EAAyBT,EAAa/B,QAAQ,CACvDC,SAAU,gBACVC,OAAQiC,EACRhC,SAAUiC,K,4GChFP,MAAMK,UAAqB,EAAAjF,kBAC9B,IAAAC,CAAKC,GACIA,IAELC,KAAKD,OAASA,EACdC,KAAKC,MAAQF,EAAOE,MACpBD,KAAKK,YAAcN,EAAOO,OAAOC,iBACrC,CACA,MAAAC,GACI,OAAOR,IACX,CACA,OAAAS,CAAQV,GACJ,OAAO,CACX,CACA,QAAAW,GACI,OAAOV,KAAKC,KAChB,CACA,OAAAU,GACI,OAAO,CACX,CACA,gBAAAS,GACIpB,KAAKqB,MAAMC,OACf,CACA,aAAAV,CAAcC,GACVb,KAAKC,MAAQY,EAAME,OAAOd,KAC9B,CACA,mBAAAsB,GACI,QAASvB,KAAKD,OAAOyB,KAAK,KAC9B,GAEJ,QAAW,CACP,EAAAC,YACDqD,EAAapD,UAAW,cAAU,IACrC,QAAW,CACP,EAAAD,YACDqD,EAAapD,UAAW,aAAS,IACpC,QAAW,CACP,EAAAD,YACDqD,EAAapD,UAAW,mBAAe,GAKnC,MAAMqD,EAAuB,EAAAnD,GAAI;;;;EAW3BoD,EAA0B,CAAC9B,EAAe,eAAiB,EAAAnB,IAAK;KACxEmB;OACC,IAAAlB,KAAI;aACIC,QAAmBd,IAAZc,EAAEhC,MAAsB,GAAKgC,EAAEhC;aACvC,CAACgC,EAAGE,KACbF,EAAErB,cAAcuB,EAAEtB;kBAEHoB,GAAMA,EAAElC,OAAOkE;oBACbhC,GAAMA,EAAE5B;;MAEvB6C;EAQO+B,EAAyBH,EAAazC,QAAQ,CACvDC,SAAU,gBACVC,OAAQwC,EACRvC,SAAUwC,K,sHC1EP,MAAME,UAAuB,EAAArF,kBAChC,IAAAC,CAAKC,GACIA,IAELC,KAAKD,OAASA,EACdA,EAAOoF,UAAUC,iBAAiB,UAAYvE,IACtCA,EAAMwE,MAAQ,MAAQC,OACtBtF,KAAKuF,iBAGjB,CACA,MAAA/E,GACI,OAAOR,IACX,CACA,OAAAS,CAAQV,GAEJ,OADAC,KAAKD,OAASA,GACP,CACX,CACA,UAAAyF,CAAWhE,GACP,IAAI+C,EACJ,GAAuF,mBAApD,QAAtBA,EAAKvE,KAAKD,cAA2B,IAAPwE,OAAgB,EAASA,EAAGiB,YACnE,IACI,OAAOxF,KAAKD,OAAOyF,WAAWhE,EAClC,CACA,MAAOiE,GACH,IAAOA,MAAM,iEAAkEA,EACnF,CAEJ,OAAO,CACX,CACA,YAAAF,GACI,OAAO,QAAUvF,UAAM,OAAQ,EAAQ,YAC9BA,KAAKD,OAAO2F,cAEjB1F,KAAK2F,eAAgB,QACf3F,KAAKD,OAAO2F,YAAY1F,KAAKD,OAAOyB,MAC1CxB,KAAK2F,eAAgB,EACzB,EACJ,CACA,cAAIC,GACA,IAAIrB,EAAIsB,EACR,GAA2B,QAAtBtB,EAAKvE,KAAKD,cAA2B,IAAPwE,OAAgB,EAASA,EAAGqB,WAC3D,OAAO5F,KAAKD,OAAO6F,YAAuE,QAAxDC,EAAK7F,KAAKD,OAAOyB,KAAKxB,KAAKD,OAAO+F,wBAAqC,IAAPD,EAAgBA,EAAK,GAG/H,GAEJ,QAAW,CACP,EAAApE,YACDyD,EAAexD,UAAW,cAAU,IACvC,QAAW,CACP,EAAAD,YACDyD,EAAexD,UAAW,qBAAiB,GAC9C,MAAM,OAAEqE,GAAW,EAAAC,YAMNC,EAAyBF,EAAO,4BAA4BG,YAAY,SAKxEC,EAAyB,EAAAvE,GAAI;;;;;;;;;;;;;;;EAuB7BwE,EAAkClB,EAAe7C,QAAQ,CAClEC,SAAU,2BACVC,OAAQ,EAAAX,GAAI;MACVuE;IAEF3D,SAAU,EAAAT,IAAK;;;;;iBAKDE,GAAMA,EAAElC,OAAOsG,mBAAqB;wBAC7BpE,GAAMA,EAAE2D;oBACZ3D,IAAQ,IAAIsC,EAAI,OAAOtC,EAAE0D,eAAiB1D,EAAEuD,WAA+B,QAAnBjB,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG/C;sBAC7GS,GAAMA,EAAElC,OAAOuG;iBACpBrE,GAAMA,EAAEsD,mBAAoBtD,GAAMA,EAAElC,OAAOwG;2HCpGtD,MAAMC,UAA4B,EAAA3G,kBACrC,IAAAC,CAAKC,GACIA,IAELC,KAAKD,OAASA,EAClB,CACA,MAAAS,GACI,OAAOR,IACX,CACA,OAAAS,CAAQV,GACJ,OAAO,CACX,GAEJ,QAAW,CACP,EAAA0B,YACD+E,EAAoB9E,UAAW,cAAU,GAQrC,MAAM+E,EAAuCD,EAAoBnE,QAAQ,CAC5EC,SAAU,iCACVE,SAAU,EAAAT,IAAK;;cAEJE,GAAMA,EAAElC,OAAO2G;oBACTzE,GAAMA,EAAElC;;MAqChB4G,EAAoB,CAACC,EAASC,EAAc,CAAC,EAAGC,EAA0B,IAAKC,GAAa,EAAOC,KAC5G,MAAMC,EAAiB,CACnBC,aAAc,KAAqBC,YACnCC,mBAAoB,CAChBR,UACAI,mBACAD,aACAM,WAAYP,GAEhBQ,UAAW,CAAEC,OAAQ,OAAQC,SAAU,WACvCC,MAAO,IAAG,OAAmBZ,EAAYH,aAAe,iBACxDA,WAAY,UAMZgB,MAAO,KAEX,OAAOC,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAGX,GAAiBJ,G,sHCrFrD,MAAMgB,UAAwB,EAAAhI,kBACjC,UAAA2F,CAAWhE,GACP,IAAI+C,EAAIsB,EACR,GAAuF,mBAApD,QAAtBtB,EAAKvE,KAAKD,cAA2B,IAAPwE,OAAgB,EAASA,EAAGiB,YACnE,IACI,OAAOxF,KAAKD,OAAOyF,WAAWhE,EAClC,CACA,MAAOiE,GACH,IAAOA,MAAM,iEAAkEA,EACnF,CAEJ,QAAgC,QAAtBI,EAAK7F,KAAKD,cAA2B,IAAP8F,OAAgB,EAASA,EAAGiC,OAAOC,SAC/E,CACA,IAAAjI,CAAKC,GACIA,IAELC,KAAKD,OAASA,EACdC,KAAKgI,SAAWjI,EAAOE,MAC3B,CAEA,gBAAAgI,CAAiBC,GAEb,IAAKlI,KAAKD,OAAO+H,SAC2B,mBAAhC9H,KAAKD,OAAO+H,OAAOC,WACnB,WAAY/H,KAAKD,UACjBC,KAAKD,OAAO+H,OAAOC,SAAS/H,KAAKD,SACH,IAAhCC,KAAKD,OAAO+H,OAAOC,UACzB,OAEJ,GAAIG,aAAaC,WAAY,CACzB,GAAe,UAAXD,EAAEE,MAAiC,IAAbF,EAAEG,OACxB,OACJrI,KAAKgI,UAAYhI,KAAKgI,QAC1B,CACA,GAAIE,aAAaI,cAAe,CAC5B,GAAe,YAAXJ,EAAEE,MAAiC,MAAVF,EAAE7C,KAAyB,UAAV6C,EAAE7C,IAC5C,OACJrF,KAAKgI,UAAYhI,KAAKgI,QAC1B,CAIA,MAHoBhI,KAAKD,OAAOwI,IAAIC,kBACcC,KAAMC,GAASA,EAAKC,WAAa3I,KAAKD,OAAO6I,KAAKD,UAChGD,EAAKpI,OAAOuI,kBAAoB7I,KAAKD,OAAOO,OAAOuI,iBACrB,CAG9B,MAAM,OAAEvI,EAAM,KAAEsI,EAAI,MAAE3I,GAAUD,KAAKD,OAC/B+I,EAAe,CACjBV,KAAM,qBACN9H,OAAQA,EACRwH,OAAQxH,EAAOyI,YACfvH,KAAMoH,EAAKpH,KACXoH,OACAD,SAAUC,EAAKD,SACfK,UAAWJ,EAAKI,UAChB/I,SAEJD,KAAKD,OAAOwI,IAAIU,cAAcH,GAC9B,MAAMI,EAAelJ,KAAKD,OAAO6I,KAAKO,aAAanJ,KAAKD,OAAOO,OAAQN,KAAKgI,SAAU,QAClFhI,KAAKD,OAAO4D,UACZ3D,KAAKD,OAAO4D,SAASiF,EAAKpH,MAC9B,MAAM4H,EAAe,CACjBhB,KAAM,qBACN9H,OAAQA,EACRwH,OAAQxH,EAAOyI,YACfvH,KAAMoH,EAAKpH,KACXoH,OACAD,SAAUC,EAAKD,SACfK,UAAWJ,EAAKI,UAChB/I,QACAoJ,SAAUpJ,EACVqJ,SAAUtJ,KAAKgI,SACfkB,gBAEJlJ,KAAKD,OAAOwI,IAAIU,cAAcG,EAClC,CACJ,CACA,MAAA5I,GACI,OAAOR,IACX,CACA,OAAA8C,GAAY,CACZ,OAAArC,CAAQV,GAEJ,OADAC,KAAKgI,SAAWjI,EAAOE,OAChB,CACX,CACA,QAAAS,GACI,OAAOV,KAAKgI,QAChB,CACA,mBAAAzG,GACI,QAASvB,KAAKD,OAAOyB,KAAK,KAC9B,CAEA,aAAA+H,GACI,IAAIhF,EACJ,GAA6B,QAAtBA,EAAKvE,KAAKD,cAA2B,IAAPwE,OAAgB,EAASA,EAAGqB,WAEjE,MAAsC,mBAA3B5F,KAAKD,OAAO6F,WACZ5F,KAAKD,OAAO6F,WAAW5F,KAAKD,OAAO6I,KAAKpH,MAC5CxB,KAAKD,OAAO6F,UACvB,GAEJ,QAAW,CACP,EAAAnE,YACDoG,EAAgBnG,UAAW,cAAU,IACxC,QAAW,CACP,EAAAD,YACDoG,EAAgBnG,UAAW,gBAAY,GAKnC,MAAM8H,EAA0B,EAAA5H,GAAI;;;;;;EAa9B6H,EAA+B,CAACvG,EAAe,gBACxD,MAAMwG,EAAoB,GAAGxG,aAC7B,OAAO,EAAAnB,IAAK;OACT2H;eACQ,CAACzH,EAAGE,IAAMF,EAAEgG,iBAAiB9F,EAAEtB;iBAC7B,CAACoB,EAAGE,IAAMF,EAAEgG,iBAAiB9F,EAAEtB;iBAC9BoB,GAAMA,EAAE+F;kBACP/F,IAAQ,IAAIsC,EAAI,OAAOtC,EAAEuD,WAA+B,QAAnBjB,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG/C;sBACxFS,GAAMA,EAAEsH;SACtBG;KAUIC,EAA8B9B,EAAgBxF,QAAQ,CAC/DC,SAAU,mBACVC,OAAQiH,EACRhH,SAAUiH,K,iGCnJP,MAAMG,UAAyB,EAAA/J,kBAClC,IAAAC,CAAKC,GACIA,IAELC,KAAK6J,eAAiB9J,EAAO+J,YAAY/J,EAAOE,OACpD,CACA,MAAAO,GACI,OAAOR,IACX,CACA,OAAAS,CAAQV,GAEJ,OADAC,KAAK6J,eAAiB9J,EAAO+J,YAAY/J,EAAOE,QACzC,CACX,GAEJ,QAAW,CACP,EAAAwB,YACDmI,EAAiBlI,UAAW,sBAAkB,GAK1C,MAAMqI,EAA2B,EAAAnI,GAAI;;;;;;EAa/BoI,EAAgC,CAAC9G,EAAe,eAClD,EAAAnB,IAAK;YACHE,GAAMA,EAAE4H;OACd3G,kEAA6EA;IAUvE+G,EAA+BL,EAAiBvH,QAAQ,CACjEC,SAAU,oBACVC,OAAQwH,EACRvH,SAAUwH,K,2GClDP,MAAME,EAAuB,EAAAtI,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CxC,SAASuI,EAAWpK,GAChB,QAAUA,GAAoC,iBAAnBA,EAAOqK,SAAwBrK,EAAOqK,QAAQC,OAAS,CACtF,CACA,SAASC,EAAYvK,GACjB,QAAUA,GAAqC,iBAApBA,EAAOwK,UAAyBxK,EAAOwK,SAASF,OAAS,CACxF,CAOO,MAAMG,EAA0B,CAACtH,EAAe,WACnD,MAAMuH,EAAgB,GAAGvH,SACzB,OAAO,EAAAnB,IAAK;;8BAEeE,IAAQ,IAAIsC,EAAIsB,EAAI,OAAO,OAAW,CAAC,aAAkC,QAAnBtB,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGmG,WAAY,CAAC,WAAgC,QAAnB7E,EAAK5D,EAAElC,cAA2B,IAAP8F,OAAgB,EAASA,EAAG3B;eAC9M,CAACjC,EAAGE,KACX,IAAIoC,EAAIsB,EAAI8E,EACZ,QAA6B,QAAnBpG,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGL,YAAkC,QAAnB2B,EAAK5D,EAAElC,cAA2B,IAAP8F,OAAgB,EAASA,EAAGN,cAC7G,QAAnBoF,EAAK1I,EAAElC,cAA2B,IAAP4K,OAAgB,EAASA,EAAGpF,aAAapD,EAAEtB,MAAOoB,EAAElC,OAAOyB,MACvF;;SAGN,IAAAoJ,MAAM3I,GAAMkI,EAAWlI,EAAElC,QAAS,EAAAgC,IAAK;;;mBAG3BE,GAAOkI,EAAWlI,EAAElC,QAAUkC,EAAElC,OAAOqK,QAAU;qBAC/CnI,IACd,IAAKkI,EAAWlI,EAAElC,QACd,MAAO,GACX,IAAIwC,EAAS,WAAWN,EAAElC,OAAO8K,YAAc,uBAG/C,OAFI5I,EAAElC,OAAO+K,YACTvI,GAAU,WAAWN,EAAElC,OAAO+K,cAC3BvI;;;SAIP,IAAAqI,MAAM3I,GAAMqI,EAAYrI,EAAElC,QAAS,EAAAgC,IAAK;WACrC0I;mBACSxI,IACZ,IAAIsC,EACJ,IAAIwG,EAAU,eAGd,OAFwB,QAAnBxG,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGmG,aACxDK,GAAW,eACRA;kBAEI9I,GAAOqI,EAAYrI,EAAElC,QAAUkC,EAAElC,OAAOwK,SAAW;kBACnDtI,GAAOqI,EAAYrI,EAAElC,SAAUkC,EAAElC,OAAOiL,UAAmB;mBAC1D/I,GAAOA,EAAElC,OAAO+K,UAAY,UAAU7I,EAAElC,OAAO+K,aAAe;qBAC5D7I,GAAMA,EAAElC,OAAOkL;aACxBR;;SAEL,IAAAG,MAAM3I,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG2G,eAAkB,EAAAnJ,IAAK;WACzG0I;;kBAEQxI,GAAMA,EAAElC,OAAOmL;;mBAEdjJ,GAAOA,EAAElC,OAAOoL,mBAAqB,UAAUlJ,EAAElC,OAAOoL,sBAAwB;aACvFV;;;KAWN,MAAMW,UAAqB,EAAAvL,kBAE9B,IAAAC,CAAKC,GACDC,KAAKD,OAASA,CAClB,CACA,MAAAS,GACI,OAAOR,IACX,CACA,OAAAS,CAAQV,GAEJ,OADAC,KAAKD,OAASA,GACP,CACX,CACA,OAAA+C,GAAY,GAEhB,QAAW,CACP,EAAArB,YACD2J,EAAa1J,UAAW,cAAU,GAQ9B,MAAM2J,EAAyBD,EAAa/I,QAAQ,CACvDC,SAAU,gBACVE,SAAUgI,IACVjI,OAAQ2H,G,qHCzIL,MAAMoB,UAAuB,EAAAzL,kBAChC,WAAA0L,GACIC,SAASC,WACTzL,KAAK0L,iBAAoBxD,IACrBlI,KAAKC,MAAQiI,EAAEnH,OAAOd,MACtBD,KAAKD,OAAO4L,SAASzD,EAAEnH,OAAOd,MAAOD,KAAKD,QAElD,CACA,IAAAD,CAAKC,GACD,IAAIwE,EACCxE,IAELC,KAAKD,OAASA,EACdC,KAAKC,OAAQ,OAA4C,QAAtBsE,EAAKxE,EAAO6I,YAAyB,IAAPrE,OAAgB,EAASA,EAAG/C,KAAMzB,EAAO6L,gBAAazK,EAC3H,CACA,MAAAX,GACI,OAAOR,IACX,CACA,OAAA8C,GAAY,CACZ,OAAArC,CAAQV,GACJ,OAAO,CACX,CACA,UAAAyF,CAAWhE,GACP,IAAI+C,EACJ,GAAuF,mBAApD,QAAtBA,EAAKvE,KAAKD,cAA2B,IAAPwE,OAAgB,EAASA,EAAGiB,YACnE,IACI,OAAOxF,KAAKD,OAAOyF,WAAWhE,EAClC,CACA,MAAOiE,GACH,IAAOA,MAAM,iEAAkEA,EACnF,CAEJ,OAAO,CACX,GAEJ,QAAW,CACP,EAAAhE,YACD6J,EAAe5J,UAAW,cAAU,IACvC,QAAW,CACP,EAAAD,YACD6J,EAAe5J,UAAW,aAAS,GAK/B,MAAMmK,EAAyB,EAAAjK,GAAI;;;;;;;;;;;;;;EAqB7BkK,EAA4B,CAAC5I,EAAe,gBACrD,MAAM6I,EAAkB,GAAG7I,WACrB8I,EAAkB,GAAG9I,WAC3B,OAAO,EAAAnB,IAAK;OACTgK;;iBAEW9J,GAAOA,EAAElC,OAAO2E,SAAWzC,EAAElC,OAAO2E,SAASzC,EAAElC,OAAO6I,KAAKpH,MAAQ;kBAClES,IAAQ,IAAIsC,EAAI,OAAOtC,EAAEuD,WAA+B,QAAnBjB,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG/C;gBAC/F,CAACS,EAAGE,IAAMF,EAAEyJ,iBAAiBvJ,EAAEtB;eAC/BoB,GAAMA,EAAEhC;;SAEf+L;;;;UAIE/J,GAAMA,EAAElC,OAAOkM,cAAgB;UAChCD;SACF,IAAAE,QAAQjK,GAAMA,EAAElC,OAAOoM,QAAQlK,EAAElC,OAAO6I,KAAKpH,MAAO,EAAAO,IAAK;WACtDiK;kBACQ/J,GAAMA,EAAEmK;sBACL,CAACnK,EAAGE,KAAQ,IAAIoC,EAAI,MAA+B,mBAAjBtC,EAAEuD,YAA4BvD,EAAEuD,WAAsC,QAA1BjB,EAAKpC,EAAEkK,OAAOtM,cAA2B,IAAPwE,OAAgB,EAASA,EAAG/C;qBAC5IS,GAAOA,EAAEqK,QAAUrK,EAAEqK,QAAU;WACzCrK,GAAMA,EAAEsK,gBAAgBP;;QAE5BD;KAUKS,EAA6BlB,EAAejJ,QAAQ,CAC7DC,SAAU,kBACVC,OAAQsJ,EACRrJ,SAAUsJ,K,iGC1GP,MAAMW,EAA6B,EAAA7K,GAAI;;;;;;;EAcjC8K,EAAgC,CAACxJ,EAAe,UAClD,EAAAnB,IAAK;OACTmB;0BACoBjB,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGoI;mBACtF1K,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGgG;kBAChFtI,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG6F;sBAC3EnI,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGqI;uCAC9D3K,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGsI;mBACnG5K,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGyG;oBAC9E/I,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGuI;cACrF7K,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGwI;6BAChE9K,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGyI;wBACpF/K,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG0I;0CAC7DhL,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG2I;wCACjFjL,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG4I;sCACjFlL,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG6I;;QAE9GlK;IAQD,MAAMmK,UAA2B,EAAAxN,kBACpC,IAAAC,CAAKC,GACDC,KAAKD,OAASA,CAClB,CACA,MAAAS,GACI,OAAOR,IACX,CACA,OAAAS,CAAQV,GAEJ,OADAC,KAAKD,OAASA,GACP,CACX,CACA,OAAA+C,GAAY,GAEhB,QAAW,CACP,EAAArB,YACD4L,EAAmB3L,UAAW,cAAU,GAQpC,MAAM4L,EAA+BD,EAAmBhL,QAAQ,CACnEC,SAAU,uBACVE,SAAUkK,IACVnK,OAAQkK,G,gIC7DL,MAAMc,UAA4B,EAAA1N,kBACrC,WAAA0L,GACIC,SAASC,WAETzL,KAAKwN,UAAY,GAKjBxN,KAAKyN,YAAevF,IAChBlI,KAAKwN,UAAYtF,EAAEnH,OAAOd,MAC1BD,KAAKD,OAAO4D,SAASuE,EAAEnH,OAAOd,MAAOD,KAAKD,QAElD,CACA,IAAAD,CAAKC,GACD,IAAIwE,EACCxE,IAELC,KAAKD,OAASA,EACdC,KAAKwN,UACkB,KAAnBxN,KAAKwN,WACC,OAA4F,QAAtEjJ,EAAKxE,aAAuC,EAASA,EAAO6I,YAAyB,IAAPrE,OAAgB,EAASA,EAAG/C,KAAMzB,EAAO6L,UAC7I5L,KAAKwN,UAEfxN,KAAKoF,iBAAiB,UAAYvE,IAE9B,GAAI,CAAC,YAAa,cAAc6M,SAAS7M,EAAMwE,KAAM,CAEjD,MAAMhE,EAAQrB,KAAK2N,UAAU3M,QACvB4M,EAAWvM,EAAMwM,gBACL,cAAdhN,EAAMwE,KAAuBuI,EAAW,GAGrB,eAAd/M,EAAMwE,KAAwBuI,EAAWvM,EAAMpB,MAAMoK,SAF1DxJ,EAAMiN,iBAKd,IAER,CACA,MAAAtN,GACI,OAAOR,IACX,CACA,OAAA8C,GAAY,CACZ,OAAArC,CAAQV,GACJ,OAAO,CACX,CACA,UAAAyF,CAAWhE,GACP,IAAI+C,EACJ,GAAuF,mBAApD,QAAtBA,EAAKvE,KAAKD,cAA2B,IAAPwE,OAAgB,EAASA,EAAGiB,YACnE,IACI,OAAOxF,KAAKD,OAAOyF,WAAWhE,EAClC,CACA,MAAOiE,GACH,IAAOA,MAAM,iEAAkEA,EACnF,CAEJ,OAAO,CACX,GAEJ,QAAW,CACP,EAAAhE,YACD8L,EAAoB7L,UAAW,iBAAa,IAC/C,QAAW,CACP,EAAAD,YACD8L,EAAoB7L,UAAW,cAAU,GAKrC,MAAMqM,EAA0B,EAAAnM,GAAI;;;;;;;;;;EAiB9BoM,EAA+B,CAAC9K,EAAe,gBACxD,MAAM+K,EAAgB,GAAG/K,eACzB,OAAO,EAAAnB,IAAK;OACTkM;SACC,IAAAjM,KAAI;;;gBAGKC,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAGzC;gBAC/EG,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG2J;wCACvDjM,IAAQ,IAAIsC,EAAI,OAA2B,QAAnBA,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG4J;oBACnGlM,GAAMA,EAAElC,OAAOqO;kBACjBnM,IAAQ,IAAIsC,EAAI,OAAOtC,EAAEuD,WAA+B,QAAnBjB,EAAKtC,EAAElC,cAA2B,IAAPwE,OAAgB,EAASA,EAAG/C;iBAC/F,OAAMS,GAAMA,EAAEuL;iBACb,CAACvL,EAAGE,IAAMF,EAAEwL,YAAYtL,EAAEtB;SAClCoN;KAUII,EAAgCd,EAAoBlL,QAAQ,CACrEC,SAAU,yBACVC,OAAQwL,EACRvL,SAAUwL,K,0ECrHP,MAAMM,UAAuB,MAM7B,MAAMC,EAAqB,KAKrBC,EAA0B,KAS1BC,EAA2BH,EAAejM,QAAQ,CAC3DC,SAAU,qBACVC,OAAQgM,EACR/L,SAAUgM,K,+BC9BP,MAAME,EAAuB,CAAClN,EAAMoK,KAEvC,GAAIA,EAAS+C,QAAQ,KAAO,EAExB,OAAOnN,EAAKoK,GAEX,CAED,MAAMgD,EAAiBhD,EAAS/I,MAAM,KACtC,IAAIgM,EAAgBrN,EACpB,KAAOoN,EAAevE,OAAS,GAAKwE,GAAe,CAC/C,MAAMC,EAAaF,EAAeG,QAClC,GAA8B,IAA1BH,EAAevE,OACf,OAAOwE,EAAcC,GAGrBD,EAAgBA,EAAcC,EAEtC,CACJ,E,+ECVJ,IAAIE,EAAc,cAA0B,EAAAnP,kBACxC,iBAAAoP,GACIzD,MAAMyD,oBACN,MAAMC,EAAuBlP,KAAKmP,cAC9BnP,KAAKoP,WACLF,EAAqBG,WAAWnI,aAAelH,KAAKoP,UAEpDpP,KAAKsP,iBACLJ,EAAqBG,WAAWjI,mBAAqBpH,KAAKsP,eAElE,CACA,IAAAxP,CAAKC,GACDC,KAAKsP,eAAiBvP,CAC1B,CACA,MAAAS,GACI,MAA6B,iBAAlBR,KAAKoP,SACLpP,KAAKoP,SAASpP,KAAKsP,gBAEvBtP,IACX,CACA,OAAA8C,GAAY,CACZ,OAAArC,CAAQV,GACJ,OAAO,CACX,CACA,wBAAAwP,GAA6B,IAEjC,QAAW,CACP,EAAA9N,YACDuN,EAAYtN,UAAW,gBAAY,IACtC,QAAW,CACP,EAAAD,YACDuN,EAAYtN,UAAW,sBAAkB,IAC5C,QAAW,CACP,EAAAD,YACDuN,EAAYtN,UAAW,uBAAmB,GAC7CsN,GAAc,QAAW,EACrB,IAAAQ,eAAc,CACVpD,KAAM,gBACN5J,SAAQ,OAEbwM,E,8CC5CI,MAAMS,EAAe,EAAA1N,IAAK;;aAErB,IAAA2N,SAAQ,mCAAoCzN,GAAMA,EAAEsN;;4FCGhE,IAAII,EAAgB,eAA4B,OAAe,EAAA9P,oBAC3D,WAAA0L,GACIC,SAASC,WACTzL,KAAKqP,WAAa,CAAC,CACvB,CACA,oBAAAO,GAAyB,CACzB,SAAAC,GACI,MAAMC,EAAOtE,MAAMqE,YAYnB,OAXAC,EAAKT,WAAa,CAAC,EACfrP,KAAKqP,YACL1H,OAAOoI,KAAK/P,KAAKqP,YAAYW,QAAS3K,IACE,mBAAzBrF,KAAKqP,WAAWhK,GACvByK,EAAKT,WAAWhK,GAAOrF,KAAKqP,WAAWhK,GAAK4K,KAAKH,GAGjDA,EAAKT,WAAWhK,GAAO6K,gBAAgBlQ,KAAKqP,WAAWhK,MAI5DyK,CACX,IAEJ,QAAW,CACP,EAAArO,YACDkO,EAAcjO,UAAW,qBAAiB,IAC7C,QAAW,CACP,EAAAD,YACDkO,EAAcjO,UAAW,kBAAc,GAC1CiO,GAAgB,QAAW,EACvB,IAAAH,eAAc,CACVpD,KAAM,kBACN5J,SAAQ,OAEbmN,E,+CCtCI,MAAMQ,EAAiB,EAAApO,IAAK;;aAEvB,IAAA2N,SAAQ,iCAAkCzN,GAAMA,EAAE2N;;wPCMvD,MAAMQ,EAAoB,IAKpBC,EAAe,OAYrB,MAAMC,WAAqC,OAAuB,EAAAzQ,oBACrE,WAAA0L,GACIC,SAASC,WAKTzL,KAAKuQ,YAAa,EAKlBvQ,KAAKwQ,QAAU,KAAmBC,aAKlCzQ,KAAK0Q,QAAU,KAAmBC,cAKlC3Q,KAAK4Q,YAAa,EAKlB5Q,KAAK6Q,SAAU,EAMf7Q,KAAK8Q,gBAAiB,EAKtB9Q,KAAK+Q,OAAS,KAAmBC,uBAKjChR,KAAKiR,gBAAkB,KAAmBC,4BAK1ClR,KAAKmR,kBAAoB,GAMzBnR,KAAKoR,kBAAmB,EAMxBpR,KAAKqR,uBAAwB,EAC7BrR,KAAKsR,oBAAsB,IAAIC,IAC/BvR,KAAKwR,OAAS,IAAI,IAAgB,IAAID,IAC1C,CAMA,SAAIE,GACA,OAAIzR,KAAK0R,UACE1R,KAAK0R,UACZ1R,KAAK2R,gBACE,KAAmBC,sBACvB,KAAmBC,iBAC9B,CAKA,mBAAIC,GACA,OAAS9R,KAAK0R,WACV1R,KAAK0R,YAAc,KAAmBE,uBACtC5R,KAAK0R,YAAc,KAAmBG,iBAC9C,CACA,8BAAIE,GACA,OAAO/R,KAAK2R,gBACN,KAAmBC,sBACnB,KAAmBC,iBAC7B,CACA,iBAAAtO,GACI,MAAO,CAEHyO,SAAUhS,KAAKiS,gBACf1B,WAAYvQ,KAAKuQ,WACjBC,SAAUxQ,KAAKwQ,QACf0B,QAASlS,KAAKkS,QACdC,aAAcnS,KAAKmS,aACnBC,YAAapS,KAAKoS,WAElBC,OAAQrS,KAAKqS,OACb3B,SAAU1Q,KAAK0Q,QACfE,WAAY5Q,KAAK4Q,WACjBC,QAAS7Q,KAAK6Q,QAEdC,eAAgB9Q,KAAK8Q,eACrBC,OAAQ/Q,KAAK+Q,OACbE,gBAAiBjR,KAAKiR,gBACtBE,kBAAmBnR,KAAKmR,kBACxBmB,QAAStS,KAAKsS,QACdlB,iBAAkBpR,KAAKoR,iBAE/B,CACA,aAAAa,GACI,IAAI1N,EACJ,MACMyN,IAD4C,QAAxBzN,EAAKvE,KAAKgS,gBAA6B,IAAPzN,OAAgB,EAASA,EAAG1B,MAAMuN,KAAuB,IAClFmC,OAAOC,MAAMC,KAAKzS,KAAKsR,oBAAoB1M,WACtE8N,GAAqB,OAAkBV,EAASW,KAAKtC,GAAeD,GAC1E,OAAOsC,QAA0CvR,CACrD,CACA,SAAAyR,CAAUC,EAAWC,GACjB9S,KAAKsR,oBAAoByB,IAAIF,EAAWC,GACxC9S,KAAKwR,OAAOwB,KAAKhT,KAAKsR,oBAC1B,CACA,YAAA2B,CAAaJ,GACT7S,KAAKsR,oBAAoB4B,OAAOL,GAChC7S,KAAKwR,OAAOwB,KAAKhT,KAAKsR,oBAC1B,CACA,mBAAIK,GACA,IAAIpN,EACJ,OAA0C,QAAjCA,EAAKvE,KAAKmT,WAAWC,cAA2B,IAAP7O,OAAgB,EAASA,EAAG6D,QAAU,IAAaiL,cACzG,CAEA,uBAAAC,CAAwBC,EAAMP,GAG9B,CAOA,YAAAQ,CAAaC,EAAQrL,EAAO,WACxB,IAAIsL,EACJ,GAAIlB,MAAMmB,QAAQF,GAAS,CAYvBC,EAXoBD,EAAOG,IAAKC,GACR,iBAATA,EACAA,EAEc,iBAATA,GAA8B,OAATA,GAAiB,SAAUA,EACrDA,EAAKC,KAGL9P,OAAO6P,IAGAlB,KAAK,KAC/B,MAEIe,EADuB,iBAAXD,EACFA,EAGAzP,OAAOyP,GAEjBC,IACA,IAAOjO,MAAM,GAAG2C,MAASsL,KAEzB1T,KAAK+T,MAAM,IAAyBtO,MAAO,CAAEiO,UAAStL,SACtDpI,KAAK+T,MAAM,IAAqBtO,MAAO,CAAEiO,UAAStL,SAE1D,CAKA,WAAA4L,GACIhU,KAAK+T,MAAM,IAAyBE,UACxC,CAKA,oBAAAC,CAAqBC,GACjB,OAAO,QAAUnU,KAAMyL,eAAW,EAAQ,UAAWU,EAASiI,GAAY,EAAMC,GAAc,GAC1F,IAEI,SADsBrU,KAAKmT,WAAWrT,KAAKqM,EAASiI,EAAWC,GAG3D,OADArU,KAAKgU,eACE,EAEN,CAED,MAAM7B,EAAehG,EAAQgG,aAC7B,GAAKA,EAGA,GAAKnS,KAAKsU,QAAQC,YAGlB,QAE6BvU,KAAKsU,QAAQE,YAAYrC,GAAcsC,MAAM,IAAM,OAK7EzU,KAAKwT,aAAa,uCAAuCrB,IAAgB,WAHzEnS,KAAKwT,aAAa,aAAarB,wBAAmCnS,KAAKsU,QAAQI,OAAQ,sBAK/F,MAXI1U,KAAKwT,aAAa,wBAAwBxT,KAAKsU,QAAQI,OAAQ,mBAH/D1U,KAAKwT,aAAa,4BAA6B,uBAenD,OAAO,CACX,CACJ,CACA,MAAO/N,GACH,IAAIkP,EAAe,+BACfC,EAAY,UAqBhB,OApBInP,aAAiBoP,QACjBF,EAAelP,EAAMiO,QAEjBiB,EAAajH,SAAS,YAAciH,EAAajH,SAAS,cAC1DkH,EAAY,aAEPD,EAAajH,SAAS,aAAeiH,EAAajH,SAAS,kBAChEkH,EAAY,sBAEPD,EAAajH,SAAS,YAC3BkH,EAAY,WAEPD,EAAajH,SAAS,UAC3BkH,EAAY,SAEPD,EAAajH,SAAS,cAC3BkH,EAAY,aAGpB5U,KAAKwT,aAAamB,EAAcC,IACzB,CACX,CACJ,EACJ,EA8EG,IAAIE,GA5EX,QAAW,CACP,MACDxE,EAA6B5O,UAAW,eAAW,IACtD,QAAW,CACP,MACD4O,EAA6B5O,UAAW,kBAAc,IACzD,QAAW,CACP,EAAAD,YACD6O,EAA6B5O,UAAW,2BAAuB,IAClE,QAAW,CACP,EAAAD,YACD6O,EAA6B5O,UAAW,4BAAwB,IACnE,QAAW,CACP,EAAAD,YACD6O,EAA6B5O,UAAW,qBAAiB,IAC5D,QAAW,CACP,EAAAqT,MACDzE,EAA6B5O,UAAW,gBAAY,IACvD,QAAW,EACP,IAAAqT,MAAK,CAAEC,KAAM,UAAWC,UAAW,iBACpC3E,EAA6B5O,UAAW,kBAAc,IACzD,QAAW,EACP,IAAAqT,MAAK,CAAEE,UAAW,WAAYC,UAAW,EAAAC,2BAC1C7E,EAA6B5O,UAAW,eAAW,IACtD,QAAW,EACP,IAAAqT,MAAK,CAAEE,UAAW,cACnB3E,EAA6B5O,UAAW,eAAW,IACtD,QAAW,EACP,IAAAqT,MAAK,CAAEE,UAAW,mBACnB3E,EAA6B5O,UAAW,oBAAgB,IAC3D,QAAW,EACP,IAAAqT,MAAK,CAAEE,UAAW,cAAeC,UAAW,EAAAC,2BAC7C7E,EAA6B5O,UAAW,kBAAc,IACzD,QAAW,CACP,EAAAqT,MACDzE,EAA6B5O,UAAW,cAAU,IACrD,QAAW,EACP,IAAAqT,MAAK,CAAEE,UAAW,WAAYC,UAAW,EAAAC,2BAC1C7E,EAA6B5O,UAAW,eAAW,IACtD,QAAW,EACP,IAAAqT,MAAK,CAAEC,KAAM,UAAWC,UAAW,iBACpC3E,EAA6B5O,UAAW,kBAAc,IACzD,QAAW,EACP,IAAAqT,MAAK,CAAEC,KAAM,aACd1E,EAA6B5O,UAAW,eAAW,IACtD,QAAW,EACP,IAAAqT,MAAK,CAAEC,KAAM,UAAWC,UAAW,qBACpC3E,EAA6B5O,UAAW,sBAAkB,IAC7D,QAAW,EACP,IAAAqT,MAAK,CAAEG,UAAW,EAAAC,2BACnB7E,EAA6B5O,UAAW,cAAU,IACrD,QAAW,EACP,IAAAqT,MAAK,CAAEE,UAAW,sBACnB3E,EAA6B5O,UAAW,uBAAmB,IAC9D,QAAW,CACP,EAAAD,YACD6O,EAA6B5O,UAAW,yBAAqB,IAChE,QAAW,CACP,EAAAD,YACD6O,EAA6B5O,UAAW,eAAW,IACtD,QAAW,EACP,IAAAqT,MAAK,CAAEC,KAAM,UAAWC,UAAW,wBACpC3E,EAA6B5O,UAAW,wBAAoB,IAC/D,QAAW,EACP,IAAAqT,MAAK,CAAEE,UAAW,YACnB3E,EAA6B5O,UAAW,iBAAa,IACxD,QAAW,EACP,IAAAqT,MAAK,CAAEC,KAAM,UAAWC,UAAW,6BACpC3E,EAA6B5O,UAAW,6BAAyB,IACpE,QAAW,CACP,EAAA0T,UACD9E,EAA6B5O,UAAW,kBAAmB,MAM9D,SAAWoT,GACPA,EAAmB,IAAI,MACvBA,EAAsB,OAAI,SAC1BA,EAAsB,OAAI,QAC7B,CAJD,CAIGA,IAAkBA,EAAgB,CAAC,IAC/B,MAAMO,UAA8B/E,EACvC,WAAA/E,GACIC,SAASC,WACTzL,KAAKsV,qBAAsB,EAC3BtV,KAAKuV,2BAA4B,EACjCvV,KAAKwV,QAAU,IAAIjE,IACnBvR,KAAKyV,gBAAkB,CACnBC,IAAK,GACLC,OAAQ,GACRnE,OAAQ,IAEZxR,KAAK4V,iBAAkB,CAC3B,CACA,qBAAAC,GACI,IAAItR,EACAvE,KAAKsU,SAAWtU,KAAKsU,QAAQwB,eACC,QAA7BvR,EAAKvE,KAAK+V,qBAAkC,IAAPxR,GAAyBA,EAAGyR,cAClEhW,KAAK+V,cAAgB/V,KAAKsU,QAAQwB,aAAaG,UAAW1B,IAClDA,GAAevU,KAAKkW,kBACpBlW,KAAKmW,iBAAgB,GACjBnW,KAAKqR,uBACLrR,KAAKoW,sBAGH7B,GACNvU,KAAKmW,iBAAgB,KAIrC,CACA,yBAAAE,GACI,IAAI9R,EAC0B,QAA7BA,EAAKvE,KAAK+V,qBAAkC,IAAPxR,GAAyBA,EAAGyR,cAClEhW,KAAK+V,mBAAgB5U,CACzB,CACA,8BAAAmV,CAA+BC,EAAgBC,EAA4BC,GACvE,OAAOF,aAAuD,EAASA,EAAeG,QAASjP,IAC3F,MAAMkP,EAAa,CAAC,EAEpB,OADAA,EAAWC,aAAeJ,EAA2B/O,GAC7CA,EAAMW,MACV,KAAK,IAAcyO,OACfF,EAAWG,WAAa,KAAqBC,aAC7C,MACJ,KAAK,IAAcC,OACfL,EAAWG,WAAa,KAAqBG,aAC7C,MACJ,KAAK,IAAcC,QACfP,EAAWzP,aAAe,KAAqBiQ,QAC/CR,EAAWG,WAAa,KAAqBK,QAC7C,MACJ,KAAK,IAAcC,KACfT,EAAWU,eAAiB,KAC5BV,EAAWG,WAAa,KAAqBQ,WAC7C,MACJ,KAAK,IAAcC,SACfZ,EAAWU,eAAiB,KAC5BV,EAAWG,WAAa,KAAqBQ,WAC7CX,EAAWa,iBAAmB,CAC1BrX,UAAU,GAEd,MACJ,KAAK,IAAcsX,KACXhQ,EAAMiQ,aACNf,EAAWG,WAAa,KAAqBa,aAC7ChB,EAAWa,iBAAmB,CAC1B5S,OAAQ6C,EAAMiQ,YAAY9D,IAAKgE,IAAW,CAAG3X,MAAO2X,EAAQC,MAAOD,KACnEvU,WAAY,QACZC,WAAY,UAIhB,IAAOwU,KAAK,kCAAkCrQ,EAAM2E,sCAMhE,OAAIpM,KAAKqS,SAAWrS,KAAKqS,OAAO3E,SAASjG,EAAM2E,MACpC,GAEJzE,OAAOC,OAAO,CAAEH,MAAOA,EAAM2E,KAAMhE,MAAM,QAAcX,EAAMW,MAAO2P,OAAQtB,EAAqBhP,EAAMW,OAASuO,IAE/H,CACA,mBAAAqB,CAAoBC,EAAcC,EAAW,GAEzC,IAAIC,EAAkBD,EACtBD,SAA4DA,EAAajI,QAASoI,IAC9E,MAAM3G,EAAQ2G,EAAWpY,KAAKyR,OAC9B,IAAKA,EAED,YADA,IAAOqG,KAAK,8CAA+CM,GAI/D,GAD8BpY,KAAKwV,QAAQ6C,IAAI5G,IAClBzR,KAAKsV,oBAAqB,CACnD,MAAMgD,EAAetY,KAAKwV,QAAQ+C,IAAI9G,GAChC+G,EAAa7Q,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAG0Q,GAAeF,GAClEpY,KAAKyV,gBAAgBjE,OAAOiH,KAAKD,GACjCxY,KAAKwV,QAAQzC,IAAItB,EAAO+G,EAC5B,MAEIxY,KAAKyV,gBAAgBC,IAAI+C,KAAKL,GAE9BpY,KAAKyV,gBAAgByC,SAAWC,EAChCnY,KAAKwV,QAAQzC,IAAItB,EAAO2G,GAGpBF,EAAW,IAEXC,GAAmB,IAInC,CACA,mBAAAO,CAAoBC,GAChBA,SAA0DA,EAAY3I,QAAS4I,IAC3E,GAAI5Y,KAAK8R,iBAAmB9R,KAAK2R,gBAC7B3R,KAAKyV,gBAAgBE,OAAO8C,KAAK,CAAE,CAACzY,KAAKyR,OAAQmH,EAAW5Y,KAAKyR,aAEhE,CACD,MAAMoH,EAAiBlR,OAAO/C,OAAO+C,OAAOmR,YAAY9Y,KAAKwV,UAAU/M,KAAMsQ,GAAQA,EAAI/Y,KAAK+R,8BAAgC6G,EAAW5Y,KAAK+R,6BAC9I/R,KAAKyV,gBAAgBE,OAAO8C,KAAK,CAAE,CAACzY,KAAKyR,OAAQoH,EAAe7Y,KAAKyR,QACzE,CACAzR,KAAKwV,QAAQtC,OAAO0F,EAAW5Y,KAAKyR,SAE5C,CACA,mBAAAuH,CAAoBC,GAChBA,SAA0DA,EAAYjJ,QAASkJ,IAC3E,IAAIV,EACJ,GAAIxY,KAAK8R,iBAAmB9R,KAAK2R,gBAAiB,CAC9C,MAAMwH,EAAiBnZ,KAAKwV,QAAQ+C,IAAIW,EAAWlZ,KAAKyR,QACxD+G,EAAa7Q,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAGuR,GAAiBD,GAC9DlZ,KAAKyV,gBAAgBjE,OAAOiH,KAAKD,EACrC,KACK,CACD,MAAMW,EAAiBxR,OAAO/C,OAAO+C,OAAOmR,YAAY9Y,KAAKwV,UAAU/M,KAAMsQ,GAAQA,EAAI/Y,KAAK+R,8BAAgCmH,EAAWlZ,KAAK+R,6BAC9IyG,EAAa7Q,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAGuR,GAAiBD,GAC9DlZ,KAAKyV,gBAAgBjE,OAAOiH,KAAKD,EACrC,CACAxY,KAAKwV,QAAQzC,IAAImG,EAAWlZ,KAAKyR,OAAQ+G,IAEjD,CACA,oBAAAY,GACI,IAAI7U,EAAIsB,EAAI8E,EAAI0O,EAAIC,EAAIC,EACxB,KAA0C,QAAnChV,EAAKvE,KAAKyV,gBAAgBC,WAAwB,IAAPnR,OAAgB,EAASA,EAAG8F,WACjC,QAAtCxE,EAAK7F,KAAKyV,gBAAgBjE,cAA2B,IAAP3L,OAAgB,EAASA,EAAGwE,WACpC,QAAtCM,EAAK3K,KAAKyV,gBAAgBE,cAA2B,IAAPhL,OAAgB,EAASA,EAAGN,QAK7E,OAJArK,KAAK+T,MAAM,IAAqByF,sBACN,IAAtBxZ,KAAKwV,QAAQiE,MACbzZ,KAAK+T,MAAM,IAAqB2F,mBAIC,QAAnCL,EAAKrZ,KAAKyV,gBAAgBC,WAAwB,IAAP2D,OAAgB,EAASA,EAAGhP,QAAU,GACnFrK,KAAK2Z,uBAAuB,CACxBjE,IAAK1V,KAAKyV,gBAAgBC,IAC1BwC,SAAUlY,KAAKyV,gBAAgByC,UAChCpD,EAAc8E,MAEuB,QAAtCN,EAAKtZ,KAAKyV,gBAAgBE,cAA2B,IAAP2D,OAAgB,EAASA,EAAGjP,QAAU,GACtFrK,KAAK2Z,uBAAuB,CAAEhE,OAAQ3V,KAAKyV,gBAAgBE,QAAUb,EAAc+E,SAE3C,QAAtCN,EAAKvZ,KAAKyV,gBAAgBjE,cAA2B,IAAP+H,OAAgB,EAASA,EAAGlP,QAAU,GACtFrK,KAAK2Z,uBAAuB,CAAEnI,OAAQxR,KAAKyV,gBAAgBjE,QAAUsD,EAAcgF,OAE3F,CACA,sBAAAH,CAAuBI,EAAaC,GAChC,MAAMC,EAAoBja,KAAKka,eAAeH,EAAa,CAACC,IAC5Dha,KAAK+T,MAAM,IAAqBoG,YAAa,CACzCC,QAASH,GAEjB,CACA,gBAAAI,CAAiBN,GACb,MAAM,IAAIlF,MAAM,0BACpB,CAOA,cAAAqF,CAAeH,EAAaO,EAAa3S,OAAO/C,OAAOkQ,IACnD,IAAK9U,KAAKua,cACN,OAAOR,EAEX,MAAME,EAAoB,CAAC,EAa3B,OAZIK,EAAW5M,SAASoH,EAAc8E,OAClCK,EAAkBvE,IAAM1V,KAAKua,cAAcR,EAAYrE,IAAK1V,KAAKwV,UAEjE8E,EAAW5M,SAASoH,EAAc+E,UAClCI,EAAkBtE,OAAS3V,KAAKua,cAAcR,EAAYpE,OAAQ3V,KAAKwV,UAEvE8E,EAAW5M,SAASoH,EAAcgF,UAClCG,EAAkBzI,OAASxR,KAAKua,cAAcR,EAAYvI,OAAQxR,KAAKwV,eAE9CrU,IAAzB4Y,EAAY7B,WACZ+B,EAAkB/B,SAAW6B,EAAY7B,UAEtC+B,CACX,CACA,QAAAO,GACI,MAAM,IAAI3F,MAAM,oDACpB,CACA,OAAA4F,GACI,MAAM,IAAI5F,MAAM,mDACpB,CACA,kBAAAuB,GACI,MAAM,IAAIvB,MAAM,8DACpB,CACA,OAAA/R,GACI,MAAM,IAAI+R,MAAM,mDACpB,CAKA,eAAAsB,CAAgBuE,GACZ1a,KAAK4V,gBAAkB8E,EACnBA,EACA1a,KAAK+T,MAAM,IAAqBtO,MAAO,CACnCiO,QAAS,0BACTtL,KAAM,eAIVpI,KAAKgU,aAEb,CAIA,cAAAkC,GACI,OAAOlW,KAAK4V,eAChB,CAKA,wBAAA+E,CAAyBC,GACrB,MAA2B,kBAAhBA,EACA,CAAEC,QAASD,GAEK,iBAAhBA,GAA4C,OAAhBA,EAC5B,CACHC,SAAS,EACTC,OAAQF,GAGT,CAAEC,SAAS,EACtB,CAMA,4BAAAE,CAA6BC,EAAcC,GACvC,IAAI1W,EAAIsB,EAAI8E,EAAI0O,EAAIC,EAAIC,EACxB,MAAM2B,EAAmB,GAEnBC,EAAiBnb,KAAK2a,yBAAyBM,aAAyD,EAASA,EAAgBT,UAEvI,GAAIW,EAAeN,UAAYG,EAAc,CACzC,MAAMI,EAAiB,CAAC,GAEa,QAAhC7W,EAAK4W,EAAeL,cAA2B,IAAPvW,OAAgB,EAASA,EAAG8W,YACrED,EAAeC,WAAaF,EAAeL,OAAOO,WAGlDD,EAAeC,WAAarb,KAAKwa,SAASvK,KAAKjQ,OAGd,QAAhC6F,EAAKsV,EAAeL,cAA2B,IAAPjV,OAAgB,EAASA,EAAGS,cACrE8U,EAAe9U,WAAa6U,EAAeL,OAAOxU,YAGtD8U,EAAe9O,SAA4C,QAAhC3B,EAAKwQ,EAAeL,cAA2B,IAAPnQ,OAAgB,EAASA,EAAG2B,UAAY,YAC3G4O,EAAiBzC,KAAK,CAClB6C,YAAa,KAAsBd,SACnCe,kBAAmBH,EACnBI,MAAOxb,KAAKyb,WAAa,OAAS,SAE1C,CAEA,MAAMC,EAAe1b,KAAK2a,yBAAyBM,aAAyD,EAASA,EAAgBU,QAErI,GAAID,EAAab,QAAS,CACtB,MAAMe,EAAe,CAAC,GAEa,QAA9BvC,EAAKqC,EAAaZ,cAA2B,IAAPzB,OAAgB,EAASA,EAAGwC,UACnED,EAAaC,SAAWH,EAAaZ,OAAOe,SAG5CD,EAAaC,SAAW7b,KAAKoW,mBAAmBnG,KAAKjQ,OAGtB,QAA9BsZ,EAAKoC,EAAaZ,cAA2B,IAAPxB,OAAgB,EAASA,EAAGwC,QACnEF,EAAaE,KAAOJ,EAAaZ,OAAOgB,MAG5CF,EAAatP,SAA0C,QAA9BiN,EAAKmC,EAAaZ,cAA2B,IAAPvB,OAAgB,EAASA,EAAGjN,UAAY,SACvG4O,EAAiBzC,KAAK,CAClB6C,YAAa,KAAsBK,OACnCJ,kBAAmBK,EACnBJ,MAAO,SAEf,CACA,OAAON,CACX,E,gCC/oBG,MAAMa,EAA2B,CACpCtW,MAAO,wBACPwO,UAAW,4B,qECqBf,IAAI+H,EAA8B,cAA0C,MAE5EA,GAA8B,QAAW,EACrC,IAAAxM,eAAc,CACVpD,KAAM,qCAEX4P,E,kEC/BI,MAAMC,EAA2B,EAAAra,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoErC,SAASsa,EAA8Bpa,EAAQqa,GAClD,MAAMC,EAAY,GAAGta,WACfua,EAAY,GAAGva,WACrB,OAAO,EAAAC,IAAK;OACV,IAAA6I,MAAK,IAAMuR,GAAkBA,EAAe9R,OAAS,EAAG,EAAAtI,IAAK;;;aAGtDqa;;;;;;;;;;;;;;qBAcO,IAAAlQ,QAAO,IAAMiQ,EAAgB,EAAApa,IAAK;;0BAE3BE,IAAM,OAAoBA,EAAEc,SAAW;;;;;;;iBAOjDsZ,qCAA8Cpa,IACvD,IAAIsC,EACJtC,EAAEqa,sBAC6B,QAA9B/X,EAAKtC,EAAEsa,yBAAsC,IAAPhY,GAAyBA,EAAGkW;;kBAGzD4B;;cAEJD;;;GAId,C,kNCzGO,SAAS3F,EAAqBrO,GACjC,OAAQA,aAAmC,EAASA,EAAKoU,eACrD,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,aACL,IAAK,SACD,MAAO,uBACX,IAAK,OACL,IAAK,WACD,MAAO,qBACX,IAAK,OACD,MAAO,oBACX,QACI,MAAO,qBAEnB,CAQO,SAASC,EAAqChV,GACjD,OAAQA,EAAMW,MACV,KAAK,IAAc8O,QACf,MAAO,CACHwF,QAAS,CAAC,QAAS,SACnBC,cAAc,EACdC,cAAc,EACdC,iBAAkB,EAClBC,cAAe,CACX,WACA,CACIC,WAAY,OACZxQ,YAAa,OACbyQ,UAAW,CAACC,EAAGC,IAA4B,SAAdA,IAAsC,IAAdA,EACrDC,eAAgB,GAEpB,CACIJ,WAAY,QACZxQ,YAAa,QACbyQ,UAAW,CAACC,EAAGC,IAA4B,UAAdA,IAAuC,IAAdA,EACtDC,eAAgB,GAEpB,CACIJ,WAAY,aACZxQ,YAAa,aACbyQ,UAAW,CAACC,EAAGC,IAA4B,SAAdA,IACX,IAAdA,GACc,UAAdA,IACc,IAAdA,EACJC,eAAgB,KAKhC,KAAK,IAAc1F,KACf,OAAO,QAAoBhQ,EAAOgP,EAAqBhP,EAAMW,OAEjE,KAAK,IAAcgP,KACnB,KAAK,IAAcG,SACf,MAAO,CACH6F,WAAY,CAACC,EAA2BH,KACpC,IAAKA,EACD,OAAQ,EACZ,MAAMI,EAAgB,IAAIC,KAAKL,GAAWM,SAAS,EAAG,EAAG,EAAG,GACtDC,EAAkBJ,EAA0BK,UAClD,OAAIJ,IAAkBG,EACX,EAEPH,EAAgBG,GACR,EAERH,EAAgBG,EACT,OADX,GAIJf,QAAS,CAAC,QAAS,SACnBC,cAAc,EACdC,cAAc,EACdC,iBAAkB,EAClBc,mBAAmB,EACnBb,cAAe,CACX,SACA,WACA,cACA,UACA,CACIC,WAAY,UACZxQ,YAAa,WACb4Q,eAAgB,EAChBH,UAAW,KAAM,GAErB,QACA,aAIZ,KAAK,IAAchG,OACf,MAAO,CACH0F,QAAS,CAAC,QAAS,SACnBC,cAAc,EACdC,cAAc,EACdC,iBAAkB,EAClBC,cAAe,CACX,SACA,WACA,cACA,qBACA,WACA,kBACA,UACA,QACA,aAIZ,QACI,MAAO,CACHJ,QAAS,CAAC,QAAS,SACnBC,cAAc,EACdC,cAAc,EACdC,iBAAkB,EAClBC,cAAe,CACX,WACA,SACA,WACA,CACIC,WAAY,iBACZxQ,YAAa,mBACb4Q,eAAgB,EAChBH,UAAW,KAAM,GAErB,QACA,aAKpB,C,2DC3IO,MAAMY,EACT,WAAArS,CAAYY,GACR,IAAI5H,EACJvE,KAAKwV,QAAU,IAAIjE,IAKnBvR,KAAK6d,gBAAkB,EAKvB7d,KAAK8d,gBAAkB,EACvB9d,KAAK+d,UAAW,EAChB/d,KAAKge,oBAAsB,EAC3Bhe,KAAKie,kBAAoB,KACzBje,KAAKke,uBAAyB/R,EAAQ+R,uBACtCle,KAAKme,iBAAmBhS,EAAQgS,iBAChCne,KAAKoe,sBAAwBjS,EAAQiS,sBACrCpe,KAAKmS,aAAehG,EAAQgG,aAC5BnS,KAAKqe,eAAiBlS,EAAQkS,eAC9Bre,KAAKse,sBAAwBte,KAAKue,iBAAiB,kBACnDve,KAAKwe,gBAAkBrS,EAAQqS,gBAC/Bxe,KAAKye,gBAAkBtS,EAAQsS,gBAC/Bze,KAAKwQ,QAAUrE,EAAQqE,QACvBxQ,KAAK0Q,QAAUvE,EAAQuE,QACvB1Q,KAAKyR,MAAQtF,EAAQsF,MACrBzR,KAAKyb,WAAatP,EAAQsP,WAC1Bzb,KAAK0e,oBAAsBvS,EAAQuS,oBACnC1e,KAAK2e,WAAaxS,EAAQwS,WAC1B3e,KAAK4e,oBAA6D,QAAtCra,EAAK4H,EAAQyS,2BAAwC,IAAPra,GAAgBA,CAC9F,CAOA,gBAAAga,CAAiBlZ,GACb,IAAId,EAAIsB,EAER,OAAoC,QAA9BtB,EAAKvE,KAAKqe,sBAAmC,IAAP9Z,OAAgB,EAASA,EAAGsa,UAAmD,iBAAhC7e,KAAKqe,eAAeQ,QACpG7e,KAAKqe,eAAeQ,QAAQxZ,GAGD,QAA9BQ,EAAK7F,KAAKqe,sBAAmC,IAAPxY,OAAgB,EAASA,EAAGR,EAC9E,CAOA,gBAAAyZ,CAAiBzZ,EAAKpF,GAClB,IAAIsE,GAEgC,QAA9BA,EAAKvE,KAAKqe,sBAAmC,IAAP9Z,OAAgB,EAASA,EAAGsa,UAAmD,iBAAhC7e,KAAKqe,eAAeQ,QAC3G7e,KAAKqe,eAAeQ,QAAQxZ,GAAOpF,EAInCD,KAAKqe,eAAehZ,GAAOpF,CAEnC,CACA,OAAA8e,CAAQhf,GACJ,MAAM,IAAI8U,MAAM,0BACpB,CAKA,cAAAmK,CAAejf,GACX,OAAO,QAAUC,UAAM,OAAQ,EAAQ,YACnC,MAAMif,EAA0Blf,EAAOuS,QAAQ4M,YACzCC,EAAyBxX,OAAOoI,KAAKkP,GAAyB5U,OAAS,EACvE+U,EAA2E,IAAhDzX,OAAOoI,KAAKkP,GAAyB5U,OAChEgV,EAA4CC,KAAKC,UAAUN,KAA6BK,KAAKC,UAAUvf,KAAKwf,oBAClH,GAAIH,GAA6CF,EAAwB,CACrE,GAAIC,GAA4Bpf,KAAKwf,mBAIjC,OAHAxf,KAAKwf,mBAAqB,KAC1Bxf,KAAK8e,iBAAiB,iBAAkB9e,KAAKse,kCACvCte,KAAKyf,kBAAkB1f,IAG5B,GAAIsf,GAA6CF,EAIlD,OAHAnf,KAAKwf,mBAAqBP,EAC1Bjf,KAAK8e,iBAAiB,iBAAkB9e,KAAK0f,4CACvC1f,KAAKyf,kBAAkB1f,GAGrC,CACJ,EACJ,CAMA,wBAAA4f,CAAyB5f,GACrB,OAAO,QAAUC,UAAM,OAAQ,EAAQ,kBAC7BA,KAAKgf,eAAejf,SACpBC,KAAK4f,aAAa7f,EAC5B,EACJ,CACA,OAAA+C,GACI9C,KAAKwV,QAAU,IAAIjE,IACnBvR,KAAK8d,gBAAkB,EACvB9d,KAAKge,oBAAsB,EAC3Bhe,KAAK6d,gBAAkB,EACvB7d,KAAKie,kBAAoB,EACzBje,KAAK+d,UAAW,EAChB/d,KAAK6f,eAAY1e,EACjBnB,KAAK8f,wBAAqB3e,CAC9B,CACA,iBAAAse,CAAkB1f,GACd,OAAO,QAAUC,UAAM,OAAQ,EAAQ,YACnCA,KAAK8C,UACL9C,KAAK+f,qBAAqBhgB,SACpBC,KAAKke,uBAAuB,CAC9BlM,SAAUhS,KAAKue,iBAAiB,kBAChCrM,QAASlS,KAAKue,iBAAiB,YAC/B1N,QAAS7Q,KAAKue,iBAAiB,YAEvC,EACJ,CACA,oBAAAwB,CAAqBhgB,QACOoB,IAApBpB,EAAOiS,WACPhS,KAAKse,sBAAwBve,EAAOiS,SACpChS,KAAK8e,iBAAiB,iBAAkB9e,KAAK0f,uCAE1Bve,IAAnBpB,EAAOmS,SACPlS,KAAK8e,iBAAiB,WAAY/e,EAAOmS,cAEtB/Q,IAAnBpB,EAAO8Q,SACP7Q,KAAK8e,iBAAiB,UAAW/e,EAAO8Q,QAEhD,CACA,6BAAAmP,CAA8BpM,EAAKqM,GAC/B,IAAK,MAAO5a,EAAKpF,KAAU2T,EAAIsM,UAAW,CACtC,MAAMC,EAAclgB,EAAMmgB,UAAWne,GAAMA,IAAMge,GACjD,IAAqB,IAAjBE,EAAoB,CAGpB,MAAO,CAAEjO,QAAS7M,EAAKgb,WAFV,IAAIpgB,GACOqgB,OAAOH,EAAa,GAEhD,CACJ,CACJ,CACA,6BAAAT,GACI1f,KAAK8e,iBAAiB,iBAAkB9e,KAAKse,uBAC7C,IAAIiC,EAAgBvgB,KAAKue,iBAAiB,kBACtCgC,GAA0C,iBAAlBA,IACxBA,EAAgBA,EAAc1d,MAAM,KACpC7C,KAAK8e,iBAAiB,iBAAkByB,IAEvCA,IACDA,EAAgB,GAChBvgB,KAAK8e,iBAAiB,iBAAkByB,IAG5C,OADiBA,EAAchO,OAAOvS,KAAKsR,uBAC3BqB,KAAK,OACzB,CACA,mBAAArB,GACI,MAAMkP,EAAU,GAwIhB,OAvIAxgB,KAAKygB,iBAAiB,QAAQzQ,QAAS0Q,IACnC,GAAK1gB,KAAKwf,mBAAmBkB,GAAG3I,QACS,UAApC/X,KAAKwf,mBAAmBkB,GAAGtY,MAAwD,SAApCpI,KAAKwf,mBAAmBkB,GAAGtY,KAI3E,OAAQpI,KAAKwf,mBAAmBkB,GAAGtY,MAC/B,IAAK,QACDoY,EAAQ/H,KAAK,IAAIiI,cAAcA,cAC/B,MACJ,IAAK,WACDF,EAAQ/H,KAAK,2BAA2BiI,OAAO1gB,KAAKwf,mBAAmBkB,GAAG3I,YAC1E,MACJ,IAAK,SACDyI,EAAQ/H,KAAK,GAAGiI,SAAS1gB,KAAKwf,mBAAmBkB,GAAG3I,WACpD,MACJ,IAAK,WACDyI,EAAQ/H,KAAK,IAAIiI,cAAcA,cAC/B,MACJ,IAAK,WACDF,EAAQ/H,KAAK,GAAGiI,SAAS1gB,KAAKwf,mBAAmBkB,GAAG3I,WACpD,MACJ,IAAK,iBACDyI,EAAQ/H,KAAK,4CAA4CiI,OAAO1gB,KAAKwf,mBAAmBkB,GAAG3I,iBApBnGyI,EAAQ/H,KAAK,GAAGiI,QAAQ1gB,KAAKwf,mBAAmBkB,GAAGtY,UA2B3DpI,KAAKygB,iBAAiB,OAAOzQ,QAAS0Q,IAClC,IAAInc,EAAIsB,EAAI8E,EACZ,MAAMgW,EAA2C,QAAlCpc,EAAKvE,KAAKwf,0BAAuC,IAAPjb,OAAgB,EAASA,EAAGmc,GAC/EE,EAAwF,QAArE/a,EAAK8a,aAAqC,EAASA,EAAM/b,cAA2B,IAAPiB,EAAgBA,EAAK,GAC3H,IAAK+a,GAA4C,IAA1BA,EAAevW,OAElC,OAKJ,MAAMwW,EAA0C,QAA/BlW,EAAK3K,KAAKye,uBAAoC,IAAP9T,OAAgB,EAASA,EAAGlC,KAAMqY,GAAMA,EAAEC,OAASL,GAC3G,IAAIM,EACJ,GAAIH,aAAyC,EAASA,EAAQI,aAC1D,IACID,EAAYxO,MAAMmB,QAAQkN,EAAQI,cAC5BJ,EAAQI,aACRJ,EAAQI,aAAape,MAAM,IACrC,CACA,MAAOwW,GACH2H,OAAY7f,CAChB,CAEJ,GAAI6f,GACAA,EAAU3W,SAAWuW,EAAevW,QACpC2W,EAAUE,MAAOC,GAAMP,EAAelT,SAASyT,IAE/C,OAEJ,MAAMC,EAAeR,EAAehN,IAAKyN,IACrC,MAAMC,EAAUtd,OAAOqd,GAAKE,QAAQ,KAAM,OAC1C,MAAO,GAAGb,SAASY,OAEnBF,EAAa/W,OAAS,GACtBmW,EAAQ/H,KAAK,IAAI2I,EAAazO,KAAK,cAG3C3S,KAAKygB,iBAAiB,UAAUzQ,QAAS0Q,IACrC,MAAMzgB,EAAQD,KAAKwf,mBAAmBkB,GAAG3I,OACnCyJ,EAAWxhB,KAAKwf,mBAAmBkB,GAAGe,SAC5C,OAAQzhB,KAAKwf,mBAAmBkB,GAAGtY,MAC/B,IAAK,UACAlH,MAAMjB,IAAUugB,EAAQ/H,KAAK,GAAGiI,QAAQzgB,KACzC,MACJ,IAAK,YACAiB,MAAMjB,IAAUugB,EAAQ/H,KAAK,GAAGiI,QAAQzgB,KACzC,MACJ,IAAK,eACAiB,MAAMjB,IAAUugB,EAAQ/H,KAAK,GAAGiI,OAAOzgB,KACxC,MACJ,IAAK,sBACAiB,MAAMjB,IAAUugB,EAAQ/H,KAAK,GAAGiI,QAAQzgB,KACzC,MACJ,IAAK,YACAiB,MAAMjB,IAAUugB,EAAQ/H,KAAK,GAAGiI,OAAOzgB,KACxC,MACJ,IAAK,mBACAiB,MAAMjB,IAAUugB,EAAQ/H,KAAK,GAAGiI,QAAQzgB,KACzC,MACJ,IAAK,WACAiB,MAAMjB,KACFiB,MAAMsgB,IACPhB,EAAQ/H,KAAK,GAAGiI,QAAQzgB,QAAYygB,QAAQc,KAChD,MACJ,IAAK,QACDhB,EAAQ/H,KAAK,GAAGiI,UAChB,MACJ,IAAK,WACDF,EAAQ/H,KAAK,GAAGiI,aAI5B1gB,KAAKygB,iBAAiB,QAAQzQ,QAAS0Q,IACnC,IAAInc,EAAIsB,EACR,MAAM6b,EAA0D,QAA9Cnd,EAAKvE,KAAKwf,mBAAmBkB,GAAGgB,gBAA6B,IAAPnd,OAAgB,EAASA,EAAGgd,QAAQ,KAAM,IAAIA,QAAQ,IAAK,KAAK1e,MAAM,KAAK,GAC7I8e,EAAsD,QAA5C9b,EAAK7F,KAAKwf,mBAAmBkB,GAAGiB,cAA2B,IAAP9b,OAAgB,EAASA,EAAG0b,QAAQ,KAAM,IAAIA,QAAQ,IAAK,KAAK1e,MAAM,KAAK,GAC/I,OAAQ7C,KAAKwf,mBAAmBkB,GAAGtY,MAC/B,IAAK,SACDoY,EAAQ/H,KAAK,oBAAoBiI,OAAOgB,OACxC,MACJ,IAAK,WACDlB,EAAQ/H,KAAK,qBAAqBiI,OAAOgB,OACzC,MACJ,IAAK,cACDlB,EAAQ/H,KAAK,oBAAoBiI,OAAOgB,OACxC,MACJ,IAAK,UACDlB,EAAQ/H,KAAK,oBAAoBiI,OAAOgB,4BAAmChB,OAAOiB,OAClF,MACJ,IAAK,UACD,MAAMC,EAAM,IAAIrE,KAIVsE,EAAW,GAHJD,EAAIE,kBACFF,EAAIG,WAAa,GAAGC,WAAWC,SAAS,EAAG,QAC9CL,EAAIM,UAAUF,WAAWC,SAAS,EAAG,gBAEjDzB,EAAQ/H,KAAK,oBAAoBiI,OAAOmB,OACxC,MACJ,IAAK,QACDrB,EAAQ/H,KAAK,GAAGiI,aAChB,MACJ,IAAK,WACDF,EAAQ/H,KAAK,GAAGiI,gBAIrBF,CACX,CACA,gBAAAC,CAAiB0B,GACb,IAAI5d,EACJ,OAAOoD,OAAOoI,KAAwC,QAAlCxL,EAAKvE,KAAKwf,0BAAuC,IAAPjb,EAAgBA,EAAK,CAAC,GAC/EwT,OAAQ2I,IAA+D,IAAzD1gB,KAAKye,gBAAgB2B,UAAWU,GAAMA,EAAEC,OAASL,IAC/D3I,OAAQ2I,GAAM1gB,KAAKwf,mBAAmBkB,GAAGyB,aAAeA,EACjE,CACA,aAAAC,CAAcC,EAAOC,EAAgBC,EAAc7D,GAAsB,QAChDvd,IAAjBohB,GAA8BF,EAAQE,IACtCF,EAAQG,KAAKC,OAAOF,EAAe,GAAKD,GAAkBA,EAAiB,GAE/E,MAAMI,EAAmBF,KAAKG,KAAKN,EAAQC,GAC3C,OAAO5D,EAAsBgE,EAAmBA,EAAmB,CACvE,CACA,kBAAAE,CAAmB7iB,GACf,MAAM8iB,EAAuB9iB,EAAOuS,QAAQwQ,OAC5C9iB,KAAKge,oBAAsBhe,KAAK8d,iBAAmB+E,EACnD,MAAME,EAAeP,KAAKQ,IAAIhjB,KAAK6d,gBAAiB7d,KAAK0Q,SACzD,IAAIuS,EACJ,MAAM1C,EAAgBvgB,KAAKue,iBAAiB,kBAC5C,OAAIve,KAAKyb,YACLwH,EAAY1C,OAA+Dpf,EAA/CqhB,KAAKQ,IAAIhjB,KAAK6d,gBAAiB7d,KAAK0Q,SAC5D6P,IACA0C,EAAWF,GAERE,IAEPJ,IAAyB7iB,KAAK6d,gBAC9BoF,EAAWjjB,KAAK6d,gBAEXgF,EAAuB7iB,KAAK0Q,SACjCmS,EAAuB7iB,KAAKge,oBAC5BiF,EAAWT,KAAKQ,IAAID,EAAc/iB,KAAKge,sBAEjChe,KAAK+d,UAAY/d,KAAK6d,gBAAkB7d,KAAKge,sBACnDiF,EAAWjjB,KAAKge,qBAEbiF,EACX,CACA,wBAAIC,GACA,OAAOljB,KAAK0e,oBAAsB1e,KAAKie,kBAAoB,EAAIje,KAAKie,kBAAoB,CAC5F,CAEA,mBAAAkF,CAAoBpjB,GAChBC,KAAKwV,QAAU,IAAIjE,IACnB,MAAM6R,EAAiB,CAAE5N,QAAS,GAAIyN,SAAU,GAChDljB,EAAOsjB,QAAQD,GACfpjB,KAAKsjB,6BAA6BvjB,EAAQqjB,EAC9C,CAEA,4BAAAE,CAA6BvjB,EAAQqjB,GACjC,IAAI7e,EACJ,MAAMgf,IAAmD,QAAjChf,EAAK6e,EAAe5N,eAA4B,IAAPjR,OAAgB,EAASA,EAAG8F,QACjD,IAA5BtK,EAAOuS,QAAQkR,UAChBD,GACXvjB,KAAKyjB,uBAEb,CACA,qBAAAA,GACI,IAAIlf,EACkC,QAArCA,EAAKvE,KAAKoe,6BAA0C,IAAP7Z,GAAyBA,EAAGmf,KAAK1jB,KACnF,CAIA,sBAAA2jB,GAEI,OAAI3jB,KAAK2e,WAEmB,gBAApB3e,KAAK2e,YAAiC3e,KAAK4e,oBAIxC5e,KAAK2e,YAHR,IAAO7G,KAAK,iGACL,aAKR9X,KAAK4e,oBAAsB,cAAgB,WACtD,GAEJ,QAAW,CACP,KACDhB,EAAyBlc,UAAW,YAAQ,IAC/C,QAAW,CACP,MACDkc,EAAyBlc,UAAW,eAAW,IAClD,QAAW,CACP,KACDkc,EAAyBlc,UAAW,YAAQ,GCnYxC,MAAMkiB,UAAuChG,EAChD,WAAArS,CAAYY,GACRX,MAAMW,GACNnM,KAAK6jB,2BAA6B1X,EAAQ0X,0BAC9C,CACA,iBAAApE,CAAkB1f,GACd,MAAM+jB,EAASnc,OAAO5B,OAAO,KAAM,CAC/B0Z,kBAAmB,CAAElH,IAAK,IAAM/M,MAAMiU,qBAE1C,OAAO,QAAUzf,UAAM,OAAQ,EAAQ,YACnC,IAAIuE,EACyC,QAA5CA,EAAKvE,KAAK+jB,oCAAiD,IAAPxf,GAAyBA,EAAGyR,cACjFhW,KAAK+jB,kCAA+B5iB,QAC9B2iB,EAAOrE,kBAAkBiE,KAAK1jB,KAAMD,EAC9C,EACJ,CACA,OAAAgf,CAAQhf,GACJ,OAAO,QAAUC,UAAM,OAAQ,EAAQ,YAInC,SAFMA,KAAKgf,eAAejf,SACpBC,KAAK4f,aAAa7f,GACpBC,KAAKyb,aAAezb,KAAKgkB,eAAiBhkB,KAAKie,kBAAoB,EAEnE,YADAle,EAAOsjB,QAAQrjB,KAAK8f,oBAGnB9f,KAAKikB,mBACNjkB,KAAKikB,uBAAyBjkB,KAAK6jB,2BAA2B7jB,KAAKqe,iBAEnEre,KAAKie,mBAAqB,IACzBje,KAAK+d,UACFhe,EAAOuS,QAAQkR,UAAYU,OAAOlkB,KAAKwQ,UACX,IAA5BzQ,EAAOuS,QAAQkR,YACfxjB,KAAKyb,aACLzb,KAAKqe,eAAe8F,YAAcnkB,KAAKoiB,cAAcriB,EAAOuS,QAAQkR,SAAUxjB,KAAKwQ,QAASxQ,KAAK0Q,QAAS1Q,KAAK0e,sBAMnH1e,KAAKsU,QAAQ8P,YAAYpkB,KAAK6f,UAAW7f,KAAKqe,eAAe8F,cAEjE,IAAIE,GAAc,EAClBrkB,KAAK+jB,6BAA+B/jB,KAAKikB,iBAAiBhO,UAAWqO,IAC7DD,GACA,EAAAE,IAAIC,YAAY,KAAM,QAAUxkB,UAAM,OAAQ,EAAQ,YAElD,GAAIA,KAAKqe,eAAeoG,gBAAkBzkB,KAAKyb,WAAY,CACvD,MAAMiJ,QAAoB1kB,KAAKsU,QAAQqQ,SAAS3kB,KAAKmS,aAAc,CAC/DyS,SAAU5kB,KAAK0Q,QACfmU,SAAU7kB,KAAK0Q,QACf+T,eAAgBzkB,KAAKqe,eAAeoG,iBAEnCC,EAAYI,KAAQJ,EAAYK,WAMjC/kB,KAAK6d,gBAAkB7d,KAAKqe,eAAeoG,eACrCC,EAAYI,IAAIza,OAChBqa,EAAYK,YAPlB,IAAOjN,KAAK,8CACZ9X,KAAK6d,gBAAkB,EACvB7d,KAAK8d,gBAAkB,EAO/B,CACA9d,KAAKglB,oBAAoBjlB,EAAQukB,GACjCD,GAAc,CAClB,KAGZ,EACJ,CACA,mBAAAW,CAAoBjlB,EAAQklB,GACxB,IAAI1gB,EACJ,MAAM2gB,EAAcD,EAAOE,aAC3B,GAAID,IACCA,IAAgB,KAAYE,YAAcF,IAAgB,KAAYG,UAAW,CAElF,GAAIrlB,KAAKme,iBAAkB,CACvB,MAAMxJ,EAAeuQ,IAAgB,KAAYE,WAC3C,sBAAsBplB,KAAKmS,eAC3B,6BAA6BnS,KAAKmS,eACxCnS,KAAKme,iBAAiBxJ,EAAc,aACxC,CAEA,YADA5U,EAAOulB,MAEX,CAEA,GADAtlB,KAAK+d,SAAWkH,EAAOM,WACnBN,EAAOH,IAMP,YADA9kB,KAAKmjB,oBAAoBpjB,GALb,CACZ,MAAMylB,GAAc,EAAAC,EAAAC,GAAuBT,GAC3CjlB,KAAK2lB,wBAAwBH,EACjC,CAKAxlB,KAAKie,kBAAoBgH,EAAOW,YACD,IAA3B5lB,KAAKie,oBACLje,KAAK6f,UAAYoF,EAAOY,WACK,IAAzB7lB,KAAK6d,kBACL7d,KAAK6d,gBAA+C,QAA5BtZ,EAAK0gB,EAAOF,kBAA+B,IAAPxgB,EAAgBA,EAAKvE,KAAKwV,QAAQiE,OAGtG,MAAM2J,EAAiB,CACnB5N,QAAShD,MAAMC,KAAKzS,KAAKwV,QAAQ5Q,WAErCwe,EAAeH,SAAWjjB,KAAK4iB,mBAAmB7iB,GAClDC,KAAK8f,mBAAqBsD,EAC1BrjB,EAAOsjB,QAAQD,GACfpjB,KAAKsjB,6BAA6BvjB,EAAQqjB,EAC9C,CAKA,YAAAxD,CAAa7f,GACT,OAAO,QAAUC,UAAM,OAAQ,EAAQ,YACnC,IAAIuE,EACJ,MAAMuhB,EAAuB/lB,EAAOuS,QAAQyT,UAC5C,IAAsC,QAAhCxhB,EAAKvE,KAAKgmB,wBAAqC,IAAPzhB,OAAgB,EAASA,EAAG8F,UAAYyb,EAAqBzb,QACvGyb,EAAqBzb,OAAS,EAAG,CACjC,GAAoC,IAAhCyb,EAAqBzb,QAAgBrK,KAAKgmB,iBAM1C,OALAhmB,KAAKge,oBAAsB,EAC3Bhe,KAAKgmB,iBAAmB,KACxBhmB,KAAKqe,eAAe4H,SAAW,KAC/BjmB,KAAKqe,eAAe6H,QAAU,gBACxBlmB,KAAKyf,kBAAkB1f,IAG5B,GAAI+lB,EAAqBzb,OAAS,EAAG,CACtC,MAAM8b,EAAoBL,EAAqB,GAAGM,MAC5CC,EAAuBP,EAAqB,GAAGQ,KAC/CC,EAA6BvmB,KAAKggB,8BAA8BhgB,KAAKwe,gBAAiB2H,GAC5F,IAAKI,EAA4B,CAC7BvmB,KAAKge,oBAAsB,EAC3B,MAAMwI,GAAmB,OAAoBxmB,KAAKwe,iBAC5CiI,GAAuB,OAAwBzmB,KAAKwe,iBAK1D,OAJA,IAAO1G,KAAK,qBAAqBqO,4JACjC,IAAOO,MAAM,qBAAsBF,GACnC,IAAOE,MAAM,yDAA0DD,QACvE1mB,EAAOulB,MAEX,CACK,GAAIhG,KAAKC,UAAUuG,KAA0BxG,KAAKC,UAAUvf,KAAKgmB,kBAKlE,OAJAhmB,KAAKgmB,iBAAmBF,EACxB9lB,KAAKqe,eAAe4H,SAAWM,EAA2BrU,QAC1DlS,KAAKqe,eAAe6H,QAAmC,SAAzBG,aACxBrmB,KAAKyf,kBAAkB1f,GAGrC,CACJ,CACJ,EACJ,CACA,OAAA+C,GACI,MAAMghB,EAASnc,OAAO5B,OAAO,KAAM,CAC/BjD,QAAS,CAAEyV,IAAK,IAAM/M,MAAM1I,WAEhC,OAAO,QAAU9C,UAAM,OAAQ,EAAQ,YACnC,IAAIuE,EACJvE,KAAKikB,sBAAmB9iB,EACqB,QAA5CoD,EAAKvE,KAAK+jB,oCAAiD,IAAPxf,GAAyBA,EAAGyR,cACjFhW,KAAK+jB,kCAA+B5iB,QAC9B2iB,EAAOhhB,QAAQ4gB,KAAK1jB,KAC9B,EACJ,CACA,uBAAA2lB,CAAwBV,GACpB,IAAI1gB,EAAIsB,EACR,IAAKof,EACD,OACJ,MAAM0B,EAAO,IAAIpV,IACS,QAAzBhN,EAAK0gB,EAAO2B,eAA4B,IAAPriB,GAAyBA,EAAGyL,QAASoI,IACnEuO,EAAK5T,IAAIqF,EAAWpY,KAAKyR,OAAQ2G,KAErCpY,KAAK8d,iBAAoD,QAAhCjY,EAAKof,EAAO2B,QAAQvc,cAA2B,IAAPxE,EAAgBA,EAAK,EACtF7F,KAAKwV,QAAUmR,CACnB,E,wBC1KG,MAAME,UAAmCjJ,EAC5C,WAAArS,CAAYY,GACR,IAAI5H,EAAIsB,EAAI8E,EAAI0O,EAAIC,EACpB9N,MAAMW,GAENnM,KAAK8mB,wBAA0B,KAC/B9mB,KAAK+mB,kBAAoB,EACzB/mB,KAAKgnB,wBAA0B7a,EAAQ6a,wBACvChnB,KAAKinB,uBAAyB9a,EAAQ8a,uBACtCjnB,KAAKknB,gBAAkB/a,EAAQgb,oBAC/BnnB,KAAKonB,wBAA0Bjb,EAAQkb,4BACvCrnB,KAAKsnB,WAA2C,QAA7B/iB,EAAK4H,EAAQmb,kBAA+B,IAAP/iB,GAAgBA,EAExEvE,KAAKunB,sBAAwB,IAAUxnB,GAAWC,KAAKwnB,oBAAoBznB,GAlBhD,KAqBC,cAFAC,KAAK2jB,0BAGkE,QAAxFhZ,EAAuC,QAAjC9E,EAAKsG,EAAQkS,sBAAmC,IAAPxY,OAAgB,EAASA,EAAGgZ,eAA4B,IAAPlU,OAAgB,EAASA,EAAGwZ,eAC/HnkB,KAAKqe,eAAeQ,QAAQsF,YAAcnkB,KAAK0e,oBAAsB,EAAI,IAKkB,QAAxFpF,EAAuC,QAAjCD,EAAKlN,EAAQkS,sBAAmC,IAAPhF,OAAgB,EAASA,EAAGwF,eAA4B,IAAPvF,OAAgB,EAASA,EAAGmO,UAC/HznB,KAAKqe,eAAeQ,QAAQ4I,OAAS,EAGjD,CACA,OAAA1I,CAAQhf,GACJ,OAAO,QAAUC,UAAM,OAAQ,EAAQ,YAInC,SAFMA,KAAKgf,eAAejf,SACpBC,KAAK4f,aAAa7f,GACpBC,KAAKyb,aAAezb,KAAKgkB,eAAiBhkB,KAAKie,kBAAoB,EAEnE,YADAle,EAAOsjB,QAAQrjB,KAAK8f,oBAGxB,MAAM4H,EAAsB1nB,KAAK2jB,yBAEjC3jB,KAAK2nB,uBAAuB5nB,EAAQ2nB,GACpC,MAAME,EAAgB,CAClB/I,QAAS7e,KAAK6nB,oBAAoBH,IAEhCI,QAAsB9nB,KAAKgnB,wBAAwBY,GAEnDG,QAAmB/nB,KAAKgoB,oBAAoBF,EAAeF,EAAeF,GAEhF1nB,KAAKglB,oBAAoBjlB,EAAQ+nB,EAAeC,GAEhD/nB,KAAKioB,sBAAsBL,EAC/B,EACJ,CAIA,sBAAAD,CAAuB5nB,EAAQ2nB,GACC,cAAxBA,EAC+B,OAA3B1nB,KAAKie,mBAA8Bje,KAAKie,mBAAqB,GAAKje,KAAK+d,WACnE/d,KAAKyb,WACLzb,KAAKqe,eAAeQ,QAAQsF,YAAcnkB,KAAKoiB,cAAcriB,EAAOuS,QAAQkR,SAAUxjB,KAAKwQ,aAASrP,EACpGnB,KAAK0e,qBAGL1e,KAAKqe,eAAeQ,QAAQsF,aAAe,GAOnDnkB,KAAKqe,eAAeQ,QAAQ4I,OAAS1nB,EAAOuS,QAAQkR,QAE5D,CAIA,mBAAAwE,CAAoBF,EAAeF,EAAeF,GAC9C,OAAO,QAAU1nB,UAAM,OAAQ,EAAQ,YACnC,IAAIuE,EACJ,MAAM2jB,EAAsB,cAAeJ,EAC3C,IAAIC,GAAa,EACjB,GAA4B,cAAxBL,GACA,GAAIQ,EACAH,GAAcD,EAAcvC,eAE3B,IAAiC,IAA7BuC,EAAcK,UAAkB,CACrC,MAAMC,EAAwBzgB,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAGggB,GAAgB,CAAE/I,QAASlX,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAGggB,EAAc/I,SAAU,CAAEsF,YAAa2D,EAAcK,cACxKE,QAAyBroB,KAAKgnB,wBAAwBoB,GAC5DL,GAA6C,IAAhCM,EAAiBF,WAAuG,KAAhD,QAAjC5jB,EAAK8jB,EAAiBC,aAA0B,IAAP/jB,OAAgB,EAASA,EAAG8F,OAC7H,OAIA0d,EAAaG,IAAwBJ,EAAcvC,UAC/C,gBAAiBuC,IAAgD,IAA/BA,EAAcS,YAChDvoB,KAAK+mB,kBAAoBe,EAAcS,YAGvCvoB,KAAK+mB,kBAAoB,EAGjC,OAAOgB,CACX,EACJ,CAOA,qBAAAE,CAAsBL,GACd5nB,KAAKsnB,YAActnB,KAAKinB,yBACxBjnB,KAAKwoB,uBACLxoB,KAAKunB,sBAAsBK,GAEnC,CACA,mBAAA5C,CAAoBjlB,EAAQklB,EAAQ8C,GAChC,IAAIxjB,EAAIsB,EAAI8E,EACZ,MAAMua,EAAcD,EAAOE,aAC3B,GAAID,IACCA,IAAgB,KAAYE,YAAcF,IAAgB,KAAYG,UAAW,CAElF,GAAIrlB,KAAKme,iBAAkB,CACvB,MAAMxJ,EAAeuQ,IAAgB,KAAYE,WAC3C,sBAAsBplB,KAAKmS,eAC3B,6BAA6BnS,KAAKmS,eACxCnS,KAAKme,iBAAiBxJ,EAAc,aACxC,CAEA,YADA5U,EAAOulB,MAEX,CACA,MAAMoC,EAAsB1nB,KAAK2jB,yBAqBjC,GAlBI3jB,KAAK+d,SADL,cAAekH,EACCA,EAAOM,UAIK,cAAxBmC,GAEKK,IACyB,IAAtB9C,EAAOkD,WACPlD,EAAOkD,UAAYnoB,KAAKqe,eAAeQ,QAAQsF,aAKlD4D,IAC2B,IAAxB9C,EAAOsD,aACPtD,EAAOsD,YAAcvoB,KAAKqe,eAAeQ,QAAQ4I,SAGrC,QAAvBljB,EAAK0gB,EAAOqD,aAA0B,IAAP/jB,OAAgB,EAASA,EAAG8F,QAK5D,YADArK,KAAKmjB,oBAAoBpjB,GAa7B,GAhBIC,KAAK2lB,wBAAwBV,EAAOqD,OAQpCtoB,KAAKie,kBADmB,cAAxByJ,EACyB1nB,KAAKqe,eAAeQ,QAAQsF,YAI5B3B,KAAKC,MAAMziB,KAAKqe,eAAeQ,QAAQ4I,OAASznB,KAAKwQ,SAElFxQ,KAAK6f,UAAYoF,EAAOY,YAEnB7lB,KAAK+d,SAAU,CAChB,MAAM0K,EAAmBzoB,KAAKwV,QAAQiE,KACtCzZ,KAAK8mB,wBAA0B/mB,EAAOuS,QAAQkR,SAAWiF,CAC7D,CAEIzoB,KAAKyb,WACLzb,KAAK6d,gBAA+C,QAA5BhY,EAAKof,EAAOF,kBAA+B,IAAPlf,EAAgBA,EAAK7F,KAAKwV,QAAQiE,KAG9FzZ,KAAK6d,iBAAgD,QAA5BlT,EAAKsa,EAAOF,kBAA+B,IAAPpa,EAAgBA,EAAK3K,KAAKwV,QAAQiE,KAEnG,MAAM2J,EAAiB,CACnB5N,QAAShD,MAAMC,KAAKzS,KAAKwV,QAAQ5Q,WAErCwe,EAAeH,SAAWjjB,KAAK4iB,mBAAmB7iB,GAClDC,KAAK8f,mBAAqBsD,EAC1BrjB,EAAOsjB,QAAQD,GACfpjB,KAAKsjB,6BAA6BvjB,EAAQqjB,EAC9C,CACA,kBAAAR,CAAmB7iB,GACf,IAAIkjB,EACJ,OAAIjjB,KAAKyb,WAGDwH,EAFAjjB,KAAK+d,UAEO,EAID/d,KAAK8mB,yBAA2B/mB,EAAOuS,QAAQkR,SAAWxjB,KAAKwV,QAAQiE,KAE/EwJ,CAWf,CACA,uBAAA0C,CAAwB+C,GACpB,IAAKA,GAAyB,GAAhBA,EAAMre,OAChB,OACJ,MAAMsc,EAAO,IAAIpV,IACjBmX,EAAM1Y,QAASoI,IACX,MAAMuQ,EAAkBvQ,EAAWpY,KAAKyR,OACxC,GAAIkX,EAEA,YADAhC,EAAK5T,IAAI4V,EAAiBvQ,GAG9B,MAAMwQ,EAAiB,wBAAwB5oB,KAAKyR,0KACpDoX,EAAA,EAAOpjB,MAAMmjB,GACb,MAAME,EAAS9oB,KAAK+oB,KAAKC,WACzB5Q,EAAWpY,KAAKyR,OAASqX,EACzBnC,EAAK5T,IAAI+V,EAAQ1Q,KAErBpY,KAAKwV,QAAUmR,CACnB,CAKA,YAAA/G,CAAa7f,GACT,OAAO,QAAUC,UAAM,OAAQ,EAAQ,YACnC,IAAIuE,EACJ,MAAMuhB,EAAuB/lB,EAAOuS,QAAQyT,UAC5C,IAAsC,QAAhCxhB,EAAKvE,KAAKgmB,wBAAqC,IAAPzhB,OAAgB,EAASA,EAAG8F,UAAYyb,EAAqBzb,QACvGyb,EAAqBzb,OAAS,EAAG,CACjC,GAAoC,IAAhCyb,EAAqBzb,QAAgBrK,KAAKgmB,iBAK1C,OAJAhmB,KAAKge,oBAAsB,EAC3Bhe,KAAKgmB,iBAAmB,KACxBhmB,KAAKqe,eAAeQ,QAAQoH,cAAW9kB,aACjCnB,KAAKyf,kBAAkB1f,IAG5B,GAAI+lB,EAAqBzb,OAAS,EAAG,CACtC,MAAM8b,EAAoBL,EAAqB,GAAGM,MAC5CC,EAAuBP,EAAqB,GAAGQ,KAErD,GAAIhH,KAAKC,UAAUuG,KAA0BxG,KAAKC,UAAUvf,KAAKgmB,kBAK7D,OAJAhmB,KAAKgmB,iBAAmBF,EACxB9lB,KAAKqe,eAAeQ,QAAQoH,SACxBE,GAA8C,SAAzBE,EAAkC,QAAU,mBAC/DrmB,KAAKyf,kBAAkB1f,GAGrC,CACJ,CACJ,EACJ,CACA,iBAAA0f,CAAkB1f,GACd,MAAM+jB,EAASnc,OAAO5B,OAAO,KAAM,CAC/B0Z,kBAAmB,CAAElH,IAAK,IAAM/M,MAAMiU,qBAE1C,OAAO,QAAUzf,UAAM,OAAQ,EAAQ,YACnCA,KAAKwoB,uBACDxoB,KAAKunB,uBACLvnB,KAAKunB,sBAAsB0B,SAE/BjpB,KAAK8mB,wBAA0B,KAC/B9mB,KAAK+mB,kBAAoB,EACzB/mB,KAAKqe,eAAeQ,QAAQsF,YAAcnkB,KAAK0e,oBAAsB,EAAI,EACzE1e,KAAKqe,eAAeQ,QAAQ4I,OAAS,QAC/B3D,EAAOrE,kBAAkBiE,KAAK1jB,KAAMD,EAC9C,EACJ,CACA,OAAA+C,GACI,MAAMghB,EAASnc,OAAO5B,OAAO,KAAM,CAC/BjD,QAAS,CAAEyV,IAAK,IAAM/M,MAAM1I,WAEhC,OAAO,QAAU9C,UAAM,OAAQ,EAAQ,YACnCA,KAAKwoB,uBACDxoB,KAAKunB,uBACLvnB,KAAKunB,sBAAsB0B,eAEzBnF,EAAOhhB,QAAQ4gB,KAAK1jB,KAC9B,EACJ,CAYA,mBAAAwnB,CAAoBI,GAChB,OAAO,QAAU5nB,UAAM,OAAQ,EAAQ,YACnC,IACIA,KAAKwoB,uBACLxoB,KAAKkpB,oBAAsBtB,EAC3B,MAAM,OAAEuB,EAAM,WAAEhW,SAAqBnT,KAAKinB,uBAAuBW,GACjE5nB,KAAKopB,oBAAsBD,EAC3BnpB,KAAKqpB,wBAA0BlW,EAC/BnT,KAAKspB,0BAA4BtpB,KAAKopB,oBAAoBnT,UAAU,CAChEjD,KAAOiS,IACCjlB,KAAKkpB,qBACL5J,KAAKC,UAAUvf,KAAKkpB,uBAAyB5J,KAAKC,UAAUqI,IACxD5nB,KAAKknB,iBACLlnB,KAAKknB,gBAAgBjC,IAIjCxf,MAAQA,IACJ,IAAIlB,EACJskB,EAAA,EAAOpjB,MAAM,wBAAyBA,GAClCzF,KAAKme,kBACLne,KAAKme,kBAAiG,QAA9E5Z,EAAKkB,aAAqC,EAASA,EAAM8jB,uBAAoC,IAAPhlB,OAAgB,EAASA,EAAGilB,SAAW/jB,aAAqC,EAASA,EAAMiO,SAAU,aAI/NmV,EAAA,EAAOnC,MAAM,qCAAsCkB,EACvD,CACA,MAAOniB,GACHojB,EAAA,EAAOpjB,MAAM,mCAAoCA,EACrD,CACJ,EACJ,CAUA,oBAAA+iB,GACQxoB,KAAKspB,4BACLtpB,KAAKspB,0BAA0BtT,cAC/BhW,KAAKspB,+BAA4BnoB,EACjC0nB,EAAA,EAAOnC,MAAM,mCAEb1mB,KAAKqpB,0BACLrpB,KAAKqpB,wBAAwBvmB,UAC7B9C,KAAKqpB,6BAA0BloB,EAC/B0nB,EAAA,EAAOnC,MAAM,iCAEjB1mB,KAAKopB,yBAAsBjoB,EAC3BnB,KAAKkpB,yBAAsB/nB,EACvBnB,KAAKonB,yBACLpnB,KAAKonB,yBAEb,CACA,mBAAAS,CAAoBH,GAChB,MAAM+B,EAAc,CAChBhF,eAAgBzkB,KAAKqe,eAAeQ,QAAQ4F,eAC5CG,SAAU5kB,KAAKqe,eAAeQ,QAAQ+F,SACtCqB,SAAUjmB,KAAKqe,eAAeQ,QAAQoH,UAE1C,MAA4B,cAAxByB,EACO/f,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAG6hB,GAAc,CAAEtF,YAAankB,KAAKqe,eAAeQ,QAAQsF,cAIzFxc,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAG6hB,GAAc,CAAEhC,OAAQznB,KAAKqe,eAAeQ,QAAQ4I,QAEnG,ECzSJ,IAAIiC,EAA8B,eAA0C,OAAe,OACvF,WAAAne,GACIC,SAASC,WAKTzL,KAAK0e,qBAAsB,EAK3B1e,KAAK2pB,aAAc,EACnB3pB,KAAKsS,QAAU,CAAC,EAChBtS,KAAK4pB,wBAA0B,KAQ/B5pB,KAAK6pB,mBAAqB,IAAItY,IAW9BvR,KAAK8pB,4BAA6B,CACtC,CACA,mBAAAC,CAAoB1gB,EAAUC,GACrBD,GAAYA,IAAaC,GAE9B,EAAAib,IAAIC,YAAY,KAAM,QAAUxkB,UAAM,OAAQ,EAAQ,kBAC5CA,KAAKya,SACf,GACJ,CACA,eAAAuP,CAAgBC,EAAaC,GACzB,MAAMC,EAAyBF,KAAgB,EAAAG,EAAA,GAAkBF,EAvH/C,KAwHdlqB,KAAKqqB,gBAAkBF,GACvB,EAAA5F,IAAIC,YAAY,KAAM,QAAUxkB,UAAM,OAAQ,EAAQ,kBAC5CA,KAAKqqB,eAAe5K,kBAAkB,CACxCzN,SAAUkY,GAElB,GAER,CACA,iBAAAjb,GACIzD,MAAMyD,oBACN,MAAMqb,EAAmBtqB,KAAKsqB,iBAC9B,EAAA/F,IAAIC,YAAY,KACP8F,IAELtqB,KAAKF,OACLE,KAAK6V,0BAEb,CACA,oBAAA0U,GACI/e,MAAM+e,uBACN,MAAMC,EAAsBxqB,KAAKwqB,oBACjC,EAAAjG,IAAIC,YAAY,KAAM,QAAUxkB,UAAM,OAAQ,EAAQ,YAC7CwqB,UAECxqB,KAAK8C,UACX9C,KAAKqW,4BACT,GACJ,CACA,SAAAxG,GACI,MAAMC,EAAOtE,MAAMqE,YAGnB,OAFAC,EAAK2a,oBAAsBva,gBAAgBlQ,KAAKyqB,qBAChD3a,EAAK4a,qBAAuBxa,gBAAgBlQ,KAAK0qB,sBAC1C5a,CACX,CAMA,kBAAAsG,CAAmBrW,GACf,OAAO,QAAUC,UAAM,OAAQ,EAAQ,YACnC,IAAIuE,EAUJ,GATAvE,KAAKmT,WAAWrQ,UACkB,QAAjCyB,EAAKvE,KAAK2qB,yBAAsC,IAAPpmB,GAAyBA,EAAGyR,cACtEhW,KAAK2qB,uBAAoBxpB,EAEzBnB,KAAK+T,MAAM,IAAqB6W,mBAChC5qB,KAAK6qB,aAtKS,MAuKd7qB,KAAKmW,iBAAgB,GAErBnW,KAAK+T,MAAM,IAAqB+W,kBAAmB,CAAEC,OAAO,IACxDhrB,EAAQ,CACR,MAAMoM,EAAUxE,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAG5H,KAAKuD,qBAAsBxD,UACtDC,KAAKkU,qBAAqB/H,GAAS,GAAM,MAG1DnM,KAAK+T,MAAM,IAAqBiX,wBAAyB,CAAE7X,WAAY,OACvE0V,EAAA,EAAOpjB,MAAM,2DAErB,MAEQzF,KAAKqqB,uBACCrqB,KAAKqqB,eAAevnB,UAC1B9C,KAAKqqB,oBAAiBlpB,GAG1BnB,KAAK+T,MAAM,IAAqBiX,wBAAyB,CAAE7X,WAAY,OACvEnT,KAAK+T,MAAM,IAAqBkX,sBAC1BjrB,KAAKF,MAEnB,EACJ,CAKA,mCAAAorB,GAEIlrB,KAAKmrB,uCAELnrB,KAAK+T,MAAM,IAAqBqX,gBAAiB,CAAEC,UAAW,yBAE9DrrB,KAAK4pB,yBAA0B,QApMJ,ihDAoMsD,4BACrF,CAKA,oCAAAuB,GAEInrB,KAAK+T,MAAM,IAAqBuX,mBAAoB,CAAED,UAAW,yBAE7DrrB,KAAK4pB,0BACL5pB,KAAK4pB,0BACL5pB,KAAK4pB,wBAA0B,KAEvC,CACA,IAAA9pB,GACI,OAAO,QAAUE,UAAM,OAAQ,EAAQ,YAEnC,MAAMurB,EAAc5jB,OAAOC,OAAO,CAAE4jB,SAAWzrB,GAClCA,EAAOyB,KAGLwC,OAAOjE,EAAOyB,KAAKxB,KAAKyR,QAFpB,KAGZ,WAAAga,CAAY1rB,GACX,IAAIwE,EAAIsB,EACR,GAAkF,QAA7EA,EAA4B,QAAtBtB,EAAKxE,EAAOyB,YAAyB,IAAP+C,OAAgB,EAASA,EAAGmnB,eAA4B,IAAP7lB,OAAgB,EAASA,EAAG6H,SAAS,YAC3H,MAAO,CAAEie,MAAO,OAExB,EAAGC,eAAgB5rB,KAAKwQ,QAASqb,cAAe,CAC5C9T,QAAQ,EACR+T,WAAW,EACXC,UAAU,EACVC,YAAY,GACbC,UAAW,EAAGC,aAAc,aAAcC,kCAAkC,EAAOC,mBAAmB,EAAMC,gBAAkBtsB,MAAgBusB,cAAgBvsB,MAAgBwsB,oBAAsB1rB,GAAUb,KAAKusB,oBAAoB1rB,IAAUb,KAAKyqB,qBAC7PzqB,KAAK+T,MAAM,IAAqByY,WAAY,CACxCrgB,QAASof,EACThW,0BAA2BvV,KAAKuV,4BAGpCvV,KAAKoF,iBAAiB,IAAqBqnB,MAAQ5rB,IAAU,QAAUb,UAAM,OAAQ,EAAQ,YACzF,MAAM,WAAEyb,GAAe5a,EAAMkC,OAC7B/C,KAAKyb,WAAaA,EAElB,WADqBzb,KAAKkU,qBAAqBlU,KAAKuD,qBAAqB,GAAM,IAK3E,OAHAslB,EAAA,EAAOnC,MAAM,sCAAsC1mB,KAAKmS,gBACxDnS,KAAK6qB,oBACL7qB,KAAKmW,iBAAgB,GAGzBnW,KAAK+T,MAAM,IAAmC2Y,UAC9C1sB,KAAKmW,iBAAgB,GACrBnW,KAAK2sB,QAAU3sB,KAAK4sB,mBAAmB5sB,KAAKmT,WAAWqT,iBAAkBxmB,KAAKmT,WAAW0Z,yBACzF,MAAMC,GAAgB,OAAgB9sB,KAAKmT,WAAW4Z,kBAChDC,QAAqBhtB,KAAKitB,gBAAgBH,GAMhD,GAJA9sB,KAAK+T,MAAM,IAAqBmZ,cAAe,CAC3CC,OAAQH,EACRI,SAAUN,IAEV9sB,KAAK2R,gBAAiB,CAEtB,MAAM2V,GAActnB,KAAKuQ,aAAevQ,KAAK8Q,eAC7C9Q,KAAKqqB,eAAiB,IAAIxD,EAA2B,CACjDG,wBAAyBhnB,KAAKqtB,oBAAoBpd,KAAKjQ,MACvDinB,uBAAwBK,EAAatnB,KAAKstB,mBAAmBrd,KAAKjQ,WAAQmB,EAC1EgmB,oBAAqBG,EAAatnB,KAAKutB,yBAAyBtd,KAAKjQ,WAAQmB,EAC7EkmB,4BAA6BC,EACvBtnB,KAAKonB,wBAAwBnX,KAAKjQ,WAClCmB,EACNmmB,WAAYA,EACZpJ,uBAAwBle,KAAKoW,mBAAmBnG,KAAKjQ,MACrDme,iBAAkBne,KAAKwT,aAAavD,KAAKjQ,MACzCoe,sBAAuB,IAAMpe,KAAK+T,MAAM,IAAqB2F,iBAC7DvH,aAAcnS,KAAKmS,aACnBkM,eAAgBre,KAAKmT,WAAWqa,kBAChChP,gBAAiBxe,KAAK2sB,QACtBlO,gBAAiBze,KAAKmT,WAAW4Z,iBACjCvc,SAAUxQ,KAAKwQ,QACfE,SAAU1Q,KAAK0Q,QACfe,MAAOzR,KAAKyR,MACZgK,WAAYzb,KAAKyb,WACjBiD,oBAAqB1e,KAAK0e,oBAC1BC,WAAY3e,KAAK2e,WACjBC,oBAAqB5e,KAAKmT,WAAWyL,qBAE7C,MAEI5e,KAAKqqB,eAAiB,IAAIzG,EAA+B,CACrDC,2BAA4B7jB,KAAKytB,uBAAuBxd,KAAKjQ,MAC7Dke,uBAAwBle,KAAKoW,mBAAmBnG,KAAKjQ,MACrDme,iBAAkBne,KAAKwT,aAAavD,KAAKjQ,MACzCoe,sBAAuB,IAAMpe,KAAK+T,MAAM,IAAqB2F,iBAC7DvH,aAAcnS,KAAKmS,aACnBkM,eAAgBre,KAAKmT,WAAWua,qBAChClP,gBAAiBxe,KAAK2sB,QACtBlO,gBAAiBze,KAAKmT,WAAW4Z,iBACjCvc,SAAUxQ,KAAKwQ,QACfE,SAAU1Q,KAAK0Q,QACfe,MAAOzR,KAAKyR,MACZgK,WAAYzb,KAAKyb,WACjBiD,oBAAqB1e,KAAK0e,sBAIlC1e,KAAK+T,MAAM,IAAqBiX,wBAAyB,CACrD7X,WAAYnT,KAAKqqB,iBAGrBrqB,KAAK+T,MAAM,IAAqB4Z,iBAEhC3tB,KAAKkrB,qCACT,GAAI,CAAE0C,MAAM,IACP5tB,KAAKmS,cACNnS,KAAKwT,aAAa,gFAAiF,UAE3G,EACJ,CACA,mBAAA+Y,CAAoB1rB,GAChB,IAAI0D,EACAvE,KAAKqqB,iBACLrqB,KAAKqqB,eAAerG,cAAyC,QAAxBzf,EAAK1D,EAAMgtB,eAA4B,IAAPtpB,GAAgBA,EAE7F,CACA,OAAAzB,GACI,OAAO,QAAU9C,UAAM,OAAQ,EAAQ,YACnC,IAAIuE,EAAIsB,EACR7F,KAAKmT,WAAWrQ,UACkB,QAAjCyB,EAAKvE,KAAK2qB,yBAAsC,IAAPpmB,GAAyBA,EAAGyR,cACtEhW,KAAK2qB,uBAAoBxpB,EACzBnB,KAAK6qB,eACD7qB,KAAKqqB,uBACCrqB,KAAKqqB,eAAevnB,UACQ,QAAjC+C,EAAK7F,KAAK8tB,yBAAsC,IAAPjoB,GAAyBA,EAAG/C,UACtE9C,KAAKqqB,oBAAiBlpB,GAG1BnB,KAAKmrB,uCAELnrB,KAAK+T,MAAM,IAAqBiX,wBAAyB,CAAE7X,WAAY,OACvEnT,KAAK+T,MAAM,IAAqB+W,kBAAmB,CAAEC,OAAO,GAChE,EACJ,CACA,OAAAtQ,GACI,OAAO,QAAUza,UAAM,OAAQ,EAAQ,kBAC7BA,KAAK8C,gBACL9C,KAAKF,MACf,EACJ,CACA,YAAA+qB,CAAakD,GAAiB,GAC1B/tB,KAAKwV,QAAU,IAAIjE,IACfwc,GAEA/tB,KAAK+T,MAAM,IAAqBia,YAAa,CACzCC,eAAe,IAGvBjuB,KAAKyV,gBAAkB,CAAEE,OAAQ,IAEjC3V,KAAK+T,MAAM,IAAqBma,2BAA4B,CACxDnU,YAAa/Z,KAAKyV,kBAEtBzV,KAAKyV,qBAAkBtU,CAC3B,CACA,kBAAAyrB,CAAmBuB,EAAkBtB,GACjC,MAAMuB,EAAqB,IAAI7c,IACzB8c,EAAoB,IAAIC,IAa9B,GAXAH,SAAoEA,EAAiBne,QAASue,IAC1F,MAAMlc,EAASkc,EAAMC,OAAO3rB,MAAM,KAClCurB,EAAmBrb,IAAIwb,EAAMxN,KAAM1O,GACnCA,EAAOrC,QAASvI,GAAU4mB,EAAkB3Y,IAAIjO,MAGhDolB,GAA2BA,EAAwBxiB,OAAS,GAC5DwiB,EAAwB7c,QAASvI,GAAU4mB,EAAkB3Y,IAAIjO,IAIrC,IAA5B2mB,EAAmB3U,MAAc4U,EAAkB5U,KAAO,EAC1D2U,EAAmBrb,IAAI,kBAAmBP,MAAMC,KAAK4b,SAEpD,GAAIxB,GACLA,EAAwBxiB,OAAS,GACjC+jB,EAAmB3U,KAAO,EAAG,CAG7B,MAAMgV,EAAoB,IAAIH,IAC9BF,EAAmBpe,QAASqC,IACxBA,EAAOrC,QAASvI,GAAUgnB,EAAkB/Y,IAAIjO,MAEpD,MAAMinB,EAAmB7B,EAAwB9U,OAAQtQ,IAAWgnB,EAAkBpW,IAAI5Q,IACtFinB,EAAiBrkB,OAAS,GAE1B+jB,EAAmBrb,IAAI,kBAAmB2b,EAElD,CACA,OAAON,CACX,CACA,mBAAAf,GACI,OAAO,QAAUrtB,KAAMyL,eAAW,EAAQ,UAAWkjB,EAAiB,MAElE,aADqB3uB,KAAKmT,WAAWwR,SAASgK,EAElD,EACJ,CAcA,kBAAArB,GACI,OAAO,QAAUttB,KAAMyL,eAAW,EAAQ,UAAWkjB,EAAiB,MAClE,IAAIpqB,EAAIsB,EAAI8E,EAAI0O,EAAIC,EAAIC,EAAIqV,EAAIC,EAChC,MAAMC,EAAwK,QAAvJjpB,EAAuG,QAAjGtB,EAAKoqB,aAAuD,EAASA,EAAe9P,eAA4B,IAAPta,OAAgB,EAASA,EAAGkjB,cAA2B,IAAP5hB,EAAgBA,EAAK,EACrMkpB,EAAwK,QAAzJ1V,EAAuG,QAAjG1O,EAAKgkB,aAAuD,EAASA,EAAe9P,eAA4B,IAAPlU,OAAgB,EAASA,EAAGia,gBAA6B,IAAPvL,EAAgBA,EAAKrZ,KAAKwQ,QAC1Mwe,EAAmBD,EAAcD,EACjCvrB,EAAoBoE,OAAOC,OAAOD,OAAOC,OAAO,CAAC,EAAG5H,KAAKuD,qBAAsB,CAAEyO,SAA0K,QAA/JuH,EAAuG,QAAjGD,EAAKqV,aAAuD,EAASA,EAAe9P,eAA4B,IAAPvF,OAAgB,EAASA,EAAGmL,sBAAmC,IAAPlL,EAAgBA,EAAKvZ,KAAKgS,SAAUxB,QAASwe,EAAkB9c,QAAmK,QAAzJ2c,EAAuG,QAAjGD,EAAKD,aAAuD,EAASA,EAAe9P,eAA4B,IAAP+P,OAAgB,EAASA,EAAG3I,gBAA6B,IAAP4I,EAAgBA,EAAK7uB,KAAKkS,UAC7gB2W,EAAA,EAAOnC,MAAM,mDAAoD,CAC7DoI,gBACAC,cACAC,qBAIJ,SADqBhvB,KAAK8tB,kBAAkBhuB,KAAKyD,GAAmB,GAAM,GAK1E,MAAO,CAAE4lB,OAAQnpB,KAAK8tB,kBAAkB3E,OAAQhW,WAAYnT,KAAK8tB,mBAH7DjF,EAAA,EAAOpjB,MAAM,iCAIrB,EACJ,CAQA,uBAAA2hB,GACIpnB,KAAK6pB,mBAAmBoF,QACxBjvB,KAAK8pB,4BAA6B,EAClCjB,EAAA,EAAOnC,MAAM,+BACjB,CAaA,wBAAA6G,CAAyBtI,GACrB,IAAI1gB,EACJ,IAAKvE,KAAKqqB,iBAAmBpF,EAAOqD,MAChC,OAEJ,MAAM4G,EAAajK,EAAOqD,MAC1B,IAAK9V,MAAMmB,QAAQub,MAAgD,QAA9B3qB,EAAK0gB,EAAOE,oBAAiC,IAAP5gB,OAAgB,EAASA,EAAG4qB,WAAW,SAE9G,YADAtG,EAAA,EAAOpjB,MAAM,0DAA2Dwf,GAG5E,IAAKjlB,KAAK8pB,2BAQN,OAPAoF,EAAWlf,QAASof,IAChBpvB,KAAK6pB,mBAAmB9W,IAAIqc,EAAIpvB,KAAKyR,OAAQ2d,KAEjDpvB,KAAK8pB,4BAA6B,OAClCjB,EAAA,EAAOnC,MAAM,iDAAkD,CAC3DzD,SAAUjjB,KAAK6pB,mBAAmBpQ,OAI1C,MAAM4V,EAAiB,IAAI9d,IAC3B2d,EAAWlf,QAASof,IAChBC,EAAetc,IAAIqc,EAAIpvB,KAAKyR,OAAQ2d,KAExC,MAAME,EAAe,GACfC,EAAe,GACfC,EAAe,GACrBN,EAAWlf,QAASof,IAChB,MAAM3d,EAAQ2d,EAAIpvB,KAAKyR,OACvB,GAAIzR,KAAK6pB,mBAAmBxR,IAAI5G,GAAQ,CACpC,MAAMge,EAAczvB,KAAK6pB,mBAAmBtR,IAAI9G,GAC5CzR,KAAK0vB,WAAWC,UAAUF,KAAiBzvB,KAAK0vB,WAAWC,UAAUP,IACrEE,EAAa7W,KAAK2W,EAE1B,MAEIG,EAAa9W,KAAK2W,KAG1BpvB,KAAK6pB,mBAAmB7Z,QAAQ,CAACyf,EAAahe,KACrC4d,EAAehX,IAAI5G,IACpB+d,EAAa/W,KAAKgX,MAGtBH,EAAajlB,OAAS,GAAKmlB,EAAanlB,OAAS,GAAKklB,EAAallB,OAAS,KAC5ErK,KAAK6pB,mBAAqBwF,EAC1BxG,EAAA,EAAOnC,MAAM,iEAAkE,CAC3EkJ,MAAOL,EAAallB,OACpBwlB,QAASP,EAAajlB,OACtBylB,QAASN,EAAanlB,OACtB0lB,YAAaV,EAAe5V,OAEhCzZ,KAAK+T,MAAM,IAAqBma,2BAA4B,CACxDnU,YAAa,CACTrE,IAAK6Z,EACL/d,OAAQ8d,EACR3Z,OAAQ6Z,KAIxB,CACA,sBAAA/B,GACI,OAAO,QAAUztB,KAAMyL,eAAW,EAAQ,UAAWkjB,EAAiB,MAClE,GAAI3uB,KAAK2pB,YAAa,CAClB,MAAMqG,EAAmBtc,IAAY,QAAU1T,UAAM,OAAQ,EAAQ,YACjE,IAAIuE,EAAIsB,EAAI8E,EAAI0O,EAAIC,EAAIC,EAAIqV,EAAIC,EAEhC,GADoBnb,EAAQyR,eACR,KAAY8K,cAAgBvc,EAAQoR,IAAK,CACzD,IAAK9kB,KAAKqqB,eACN,OAEJ,MAAM7E,GAAc,EAAAC,EAAAC,GAAuBhS,GAK3C,GAJA1T,KAAKyV,gBAAkB,CAAEC,IAAK,GAAIC,OAAQ,GAAInE,OAAQ,IACtDxR,KAAKgY,oBAAoBwN,EAAYoB,SACrC5mB,KAAKgZ,oBAAoBwM,EAAY0K,SACrClwB,KAAK0Y,oBAAoB8M,EAAY2K,SACjCzc,EAAQkS,YAAc,EAAG,CAEzB,MAAMwK,GAAqG,QAApFvqB,EAAoC,QAA9BtB,EAAKihB,EAAYoB,eAA4B,IAAPriB,OAAgB,EAASA,EAAG8F,cAA2B,IAAPxE,EAAgBA,EAAK,IAA2F,QAApFwT,EAAoC,QAA9B1O,EAAK6a,EAAY2K,eAA4B,IAAPxlB,OAAgB,EAASA,EAAGN,cAA2B,IAAPgP,EAAgBA,EAAK,GAChQrZ,KAAKqqB,eAAexM,iBAAmBuS,EAEvC,MAAMC,GAA2G,QAApF9W,EAAoC,QAA9BD,EAAKkM,EAAYoB,eAA4B,IAAPtN,OAAgB,EAASA,EAAGjP,cAA2B,IAAPkP,EAAgBA,EAAK,IAA2F,QAApFsV,EAAoC,QAA9BD,EAAKpJ,EAAY2K,eAA4B,IAAPvB,OAAgB,EAASA,EAAGvkB,cAA2B,IAAPwkB,EAAgBA,EAAK,GACtQ7uB,KAAKqqB,eAAevM,iBAAmBuS,EACvCrwB,KAAKoZ,sBACT,CACJ,CACJ,GACMkX,EAAW7qB,IACb,IAAIlB,EACJskB,EAAA,EAAOpjB,MAAMA,GACbzF,KAAKwT,cAA+C,QAAhCjP,EAAKkB,EAAM8jB,uBAAoC,IAAPhlB,OAAgB,EAASA,EAAGilB,QAAU/jB,EAAMiO,QAAS,WAErH1T,KAAK2qB,kBAAoB3qB,KAAKsU,QACzB6U,OAAOnpB,KAAKmS,aAAc,OAAWme,EAAS3B,QAAuDA,EAAiB3uB,KAAKmT,WAAWua,sBACtIzX,UAAWvC,GAAYsc,EAAgBtc,GAChD,CAEA,aADM1T,KAAKmT,WAAWkB,cACfrU,KAAKmT,WAAWgW,MAC3B,EACJ,CACA,eAAA8D,CAAgB1W,GACZ,OAAO,QAAUvW,UAAM,OAAQ,EAAQ,YACnC,MAAMuwB,EAAyBvwB,KAAKsW,+BAA+BC,EAAgBkG,EAAsChG,GASzH,OARA8Z,EAAuBvgB,QAASlI,IAC5BA,EAAOikB,SAAW,GAAGxZ,UAAUvS,KAAK2sB,QAAQ/nB,UAAU8I,SAAS5F,EAAOL,OAClEzH,KAAKmT,WAAWyL,sBAChB9W,EAAOiQ,OAAS/X,KAAKmT,WAAWqd,wBAAwB9iB,SAAS5F,EAAOL,OAClEK,EAAOiQ,OACP,QAGPwY,CACX,EACJ,CACA,gBAAAlW,CAAiBN,GACb/Z,KAAK+T,MAAM,IAAqBma,2BAA4B,CAAEnU,eAClE,CACA,QAAAS,GACI,MAAM,IAAI3F,MAAM,gEACpB,IAEJ,QAAW,CACP,MACD6U,EAA4BhoB,UAAW,kBAAc,IACxD,QAAW,CACP,MACDgoB,EAA4BhoB,UAAW,yBAAqB,IAC/D,QAAW,EACP,IAAAqT,MAAK,CAAEC,KAAM,UAAWC,UAAW,4BACpCyU,EAA4BhoB,UAAW,2BAAuB,IACjE,QAAW,EACP,IAAAqT,MAAK,CAAEC,KAAM,UAAWC,UAAW,kBACpCyU,EAA4BhoB,UAAW,mBAAe,IACzD,QAAW,EACP,IAAAqT,MAAK,CAAEE,UAAW,iBACnByU,EAA4BhoB,UAAW,kBAAc,IACxD,QAAW,CACP,EAAAD,YACDioB,EAA4BhoB,UAAW,eAAW,GACrDgoB,GAA8B,QAAW,EACrC,IAAAla,eAAc,CACVpD,KAAM,qCAEXsd,E,gCCpmBI,MAAM+G,E,SAAY7uB,GAAI;;;;;;;;;;;;;;;;;qFCDtB,MAAM8uB,EAAuB,6hMAYvBC,EAAuB,64NAYvBC,EAAyB,ugLAYzBC,EAAqB,CAC9B,CAAC,KAAYC,QAASJ,EACtB,CAAC,KAAYK,YAAaL,EAC1B,CAAC,KAAYM,QAASL,EACtB,CAAC,KAAYM,YAAaN,EAC1B,CAAC,KAAYO,UAAWN,GAOfO,EAAwBT,C,2JC/C9B,MAAMU,EAAY,EAAAxvB,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCDtB,MAAMyvB,EAA0B,EAAAzvB,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECA9B0vB,EAA0B,EAAA1vB,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECA9B2vB,EAA4B,EAAA3vB,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCOtC,MAAM4vB,EAAwB,EAAA5vB,GAAI;IACrCwvB;IACA;IACAC;IACAC;IACAC;iCCbG,MAAME,EAAuB,CAEhCjF,WAAY,wBACZC,MAAO,mBAEPiF,WAAY,yBACZvX,YAAa,0BACb6T,YAAa,0BAEbd,cAAe,4BAEfjC,eAAgB,6BAChBzR,gBAAiB,8BACjBE,gBAAiB,+BACjBiY,kBAAmB,iCAEnBhE,gBAAiB,8BAEjBloB,MAAO,mBAEP3C,QAAS,qBAET8uB,YAAa,0BAEbhH,kBAAmB,sBACnBE,kBAAmB,sBACnBE,wBAAyB,6BACzBI,gBAAiB,qBACjBE,mBAAoB,wBACpB4C,2BAA4B,gC,gCC7BzB,MAAM2D,EAAqC,CAC9CpsB,MAAO,mBACPinB,SAAU,kBACVkF,YAAa,0BACbE,gBAAiB,oB,mNCDd,SAASrb,EAAqBrO,GACjC,OAAQA,aAAmC,EAASA,EAAKoU,eACrD,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,aACL,IAAK,SACD,MAAO,uBACX,IAAK,OACL,IAAK,WACD,MAAO,qBACX,IAAK,SACL,IAAK,OACD,MAAO,sBACX,QACI,MAAO,qBAEnB,CAQO,SAASuV,EAAqCtqB,GACjD,OAAQA,EAAMW,MACV,KAAK,IAAcgP,KACnB,KAAK,IAAcG,SACf,MAAO,CACH6F,WAAY,SAAUC,EAA2BH,GAC7C,IAAKA,EACD,OAAQ,EACZ,MAAMI,EAAgB,IAAIC,KAAKL,GAAWM,SAAS,EAAG,EAAG,EAAG,GACtDC,EAAkBJ,EAA0BK,UAClD,OAAIJ,IAAkBG,EACX,EAEPH,EAAgBG,GACR,EAERH,EAAgBG,EACT,OADX,CAGJ,EACAf,QAAS,CAAC,QAAS,SACnBC,cAAc,EACdC,cAAc,EACdC,iBAAkB,EAClBc,mBAAmB,GAG3B,KAAK,IAAclG,KACf,OAAO,QAAoBhQ,EAAOgP,EAAqBhP,EAAMW,OAGzE,C,oCC1BA,IAAI4pB,EAA2B,eAAuC,OAAe,OACjF,WAAAzmB,GACIC,SAASC,WAETzL,KAAKiyB,eAAiB,GAEtBjyB,KAAKyV,gBAAkB,CACnBC,IAAK,GACLC,OAAQ,GACRnE,OAAQ,GACR0G,SAAU,GAEdlY,KAAKuV,2BAA4B,EACjCvV,KAAKkyB,+BAAgC,EACrClyB,KAAKmyB,eAAgB,EACrBnyB,KAAKoyB,mBAAoB,EACzBpyB,KAAKqyB,YAAc,EACnBryB,KAAKsyB,eAAiB,CAC1B,CAEA,eAAAtI,CAAgBC,EAAaC,GACzB,OAAO,QAAUlqB,UAAM,OAAQ,EAAQ,YACnC,MAAMmqB,EAAyBF,KAAgB,EAAAG,EAAA,GAAkBF,EAAa,MAC1ElqB,KAAKmT,WAAWof,aAAepI,UACzBnqB,KAAKoW,qBAEnB,EACJ,CACA,cAAAoc,CAAeC,EAAYC,GACvB,MAAMC,EAAwBF,IAAeC,EACzC1yB,KAAKmT,WAAWof,aAAeI,GAC/B3yB,KAAKoW,oBAEb,CACA,mBAAA2T,CAAoB1gB,EAAUC,GACrBD,GAAYA,IAAaC,GAE9BtJ,KAAKya,SACT,CACA,iBAAAxL,GACIzD,MAAMyD,oBACN,MAAMqb,EAAmBtqB,KAAKsqB,iBAC9B,EAAA/F,IAAIC,YAAY,KACP8F,IAELtqB,KAAKF,OACLE,KAAK6V,0BAEb,CACA,oBAAA0U,GACI/e,MAAM+e,uBACN,MAAMC,EAAsBxqB,KAAKwqB,oBACjC,EAAAjG,IAAIC,YAAY,KACPgG,IAELxqB,KAAK8C,UACL9C,KAAKqW,8BAEb,CACA,SAAAxG,GACI,MAAMC,EAAOtE,MAAMqE,YAiBnB,OAhBAC,EAAK2a,oBAAsB,CAAC,EACxBzqB,KAAKyqB,qBACL9iB,OAAOoI,KAAK/P,KAAKyqB,qBAAqBza,QAAS3K,IACE,mBAAlCrF,KAAKyqB,oBAAoBplB,GAChCyK,EAAK2a,oBAAoBplB,GAAOrF,KAAKyqB,oBAAoBplB,GAAK4K,KAAKH,GAEtD,eAARzK,GAAwBrF,KAAKyqB,oBAAoBplB,GAAKgF,OAC3DyF,EAAK2a,oBAAoBplB,GAAOrF,KAAK4yB,iBAAiBvtB,EAAKyK,GAG3DA,EAAK2a,oBAAoBplB,GAAO6K,gBAAgBlQ,KAAKyqB,oBAAoBplB,MAIrFyK,EAAK4a,qBAAuBxa,gBAAgBlQ,KAAK0qB,sBACjD5a,EAAKwC,QAAUpC,gBAAgBlQ,KAAKsS,SAC7BxC,CACX,CACA,gBAAA8iB,CAAiBvtB,EAAKyK,GAClB,OAAO9P,KAAKyqB,oBAAoBplB,GAAKuO,IAAKif,IACtC,MAAMC,EAAiB,CAAC,EASxB,OARAnrB,OAAOoI,KAAK8iB,GAAkB7iB,QAAS+iB,IACO,mBAA/BF,EAAiBE,GACxBD,EAAeC,GAAYF,EAAiBE,GAAU9iB,KAAKH,GAG3DgjB,EAAeC,GAAY7iB,gBAAgB2iB,EAAiBE,MAG7DD,GAEf,CASA,IAAAhzB,CAAKyV,GACD,OAAO,QAAUvV,UAAM,OAAQ,EAAQ,YACnCA,KAAK+T,MAAM,IAAqByY,WAAY,CACxCjX,4BACApJ,QAASxE,OAAOC,OAAO,CAAE4jB,SAAWzrB,GAAWA,EAAOyB,KAAKxB,KAAKyR,QAAUzR,KAAKyqB,uBAGnFzqB,KAAKoF,iBAAiB,IAAqBqnB,MAAQ5rB,IAAU,QAAUb,UAAM,OAAQ,EAAQ,YACzF,MAAM,WAAEyb,GAAe5a,EAAMkC,OAC7B/C,KAAKyb,WAAaA,QACZzb,KAAKgzB,kBACf,GAAI,CAAEpF,MAAM,IAEZ5tB,KAAKizB,UAAYjzB,KAAKwR,OACjB0hB,MAAK,EAAAC,EAAA,GAAK,IAAI,EAAAC,EAAA,GAFQ,MAE0B,EAAAC,EAAA,GAAKC,GAAMzK,EAAA,EAAOnC,MAAM,wBAAyB4M,KACjGrd,UAAWgH,IACZjd,KAAKoW,sBAEb,EACJ,CAKA,OAAAtT,GACI,IAAIyB,EACJskB,EAAA,EAAOnC,MAAM,qCAAsC1mB,KAAKmS,cACpDnS,KAAKuzB,UACLvzB,KAAKuzB,QAAQvd,cACbhW,KAAKuzB,aAAUpyB,GAEfnB,KAAKizB,YACLjzB,KAAKizB,UAAUjd,cACfhW,KAAKizB,eAAY9xB,GAEjBnB,KAAK+V,gBACL/V,KAAK+V,cAAcC,cACnBhW,KAAK+V,mBAAgB5U,GAEzBnB,KAAKwzB,gBAAaryB,EAClBnB,KAAK6qB,eACL7qB,KAAKmyB,eAAgB,EACrBnyB,KAAKoyB,mBAAoB,EACzBpyB,KAAKqyB,YAAc,EACnBryB,KAAKsyB,eAAiB,EACtBtyB,KAAK+T,MAAM,IAAqBjR,SAChC9C,KAAKkyB,+BAAgC,EACrClyB,KAAKsV,qBAAsB,EAC3BtV,KAAKsR,oBAAsB,IAAIC,IACR,QAAtBhN,EAAKvE,KAAKwR,cAA2B,IAAPjN,GAAyBA,EAAGyR,cAC3DhW,KAAKwR,OAAS,IAAIiiB,EAAA,EAAgB,IAAIliB,KACtCvR,KAAKmW,iBAAgB,GAErBnW,KAAKmT,WAAWrQ,SACpB,CAMA,MAAA4wB,GACI7K,EAAA,EAAOnC,MAAM,oCAAqC1mB,KAAKmS,cACvDnS,KAAK8C,SACT,CAMA,KAAA6wB,GACI9K,EAAA,EAAOnC,MAAM,mCAAoC1mB,KAAKmS,cACtDnS,KAAK8C,SACT,CAKA,OAAA2X,GACI,OAAO,QAAUza,UAAM,OAAQ,EAAQ,YACnCA,KAAK8C,gBACC9C,KAAKF,KAAKE,KAAKuV,0BACzB,EACJ,CAIA,WAAAqe,GACI5zB,KAAK6zB,uBACL7zB,KAAK8zB,eAAe9zB,KAAKiyB,eAC7B,CAOA,YAAApH,CAAakD,GAAiB,GAC1B/tB,KAAKwV,QAAU,IAAIjE,IACnBvR,KAAKiyB,eAAiB,GACtBjyB,KAAKyV,gBAAkB,CAAEC,IAAK,GAAIC,OAAQ,GAAInE,OAAQ,GAAI0G,SAAU,GAEpElY,KAAK+T,MAAM,IAAqBia,YAAa,CACzCC,cAAeF,IAAmB/tB,KAAKuV,2BAE/C,CAMA,UAAAwe,CAAWve,GACP,OAAO,QAAUxV,UAAM,OAAQ,EAAQ,YACnC,MAAMgtB,QAAqBhtB,KAAKitB,gBAAgBjtB,KAAKmT,WAAW2Z,eAC5DE,GACAhtB,KAAK+T,MAAM,IAAqBmZ,cAAe,CAC3CC,OAAQH,EACRI,SAAUptB,KAAKmT,WAAW2Z,gBAGlC,MAAMtrB,EAAOxB,KAAKua,cAAgBva,KAAKua,cAAc/E,GAAWA,EAChExV,KAAK+T,MAAM,IAAqB4Z,iBAEhC3tB,KAAKyV,gBAAkB,CAAEC,IAAKlU,EAAO,IAAIA,GAAQ,GAAImU,OAAQ,GAAInE,OAAQ,GAAI0G,SAAU,GACvFlY,KAAKg0B,gBAAgBh0B,KAAKyV,iBAE1BzV,KAAK6zB,uBACL7zB,KAAKkyB,+BAAgC,CACzC,EACJ,CAKA,oBAAA2B,GACI7zB,KAAKiyB,eAAiBzf,MAAMC,KAAKzS,KAAKwV,QAAQ5Q,SAClD,CAKA,cAAAkvB,CAAetyB,EAAMyyB,GAAgB,GACjCj0B,KAAK+T,MAAM,IAAqB2d,WAAY,CACxClwB,OACAyyB,iBAER,CAKA,eAAAD,CAAgBja,GACZ/Z,KAAK+T,MAAM,IAAqBoG,YAAa,CACzCC,QAASL,IAEa,IAAtB/Z,KAAKwV,QAAQiE,MACZM,EAAYrE,IAAIrL,QAChB0P,EAAYvI,OAAOnH,QACnB0P,EAAYpE,OAAOtL,OAIpBrK,KAAK+T,MAAM,IAAqByF,iBAHhCxZ,KAAK+T,MAAM,IAAqB2F,gBAKxC,CAQA,kBAAAtD,GACI,OAAO,QAAUpW,UAAM,OAAQ,EAAQ,YACnC6oB,EAAA,EAAOnC,MAAM,gDAAiD1mB,KAAKmS,cAC/DnS,KAAKuzB,UACLvzB,KAAKuzB,QAAQvd,cACbhW,KAAKuzB,aAAUpyB,GAGnBnB,KAAKqyB,YAAc,EACnBryB,KAAKsyB,eAAiB,EACtBtyB,KAAKmT,WAAW+gB,oBAAoB,GACpCl0B,KAAKmT,WAAWgW,YAAShoB,EACzBnB,KAAK6qB,aArTS,MAsTd7qB,KAAK+T,MAAM,IAAqBkX,gBAChCjrB,KAAKmW,iBAAgB,SACfnW,KAAKgzB,iBAzTC,KA0ThB,EACJ,CASA,gBAAAA,GACI,OAAO,QAAUhzB,KAAMyL,eAAW,EAAQ,UAAW0oB,GAAe,GAChE,MAAMC,EAAwBD,IAAiBn0B,KAAKmT,WAAWof,YAC/D,IAGI,WADqBvyB,KAAKkU,qBAAqBlU,KAAKuD,oBAAqB6wB,GAAuB,IAI5F,OAFAvL,EAAA,EAAOnC,MAAM,sCAAsC1mB,KAAKmS,qBACxDnS,KAAK6qB,eAIT,GADA7qB,KAAK+T,MAAM,IAAmC2Y,UAC1C1sB,KAAKuQ,WAAY,CACjB,MAAM0U,QAAejlB,KAAKmT,WAAWwR,WACrC,GAAIM,EAAQ,CACR,MAAMzP,EAAUxV,KAAKq0B,eAAepP,GACpCjlB,KAAK+zB,WAAWve,EACpB,CACA,MACJ,CACAqT,EAAA,EAAOnC,MAAM,uBAAuB1mB,KAAKmS,sBACnCnS,KAAKmT,WAAWkB,cACtBrU,KAAKuzB,QAAUvzB,KAAKmT,WAAWgW,OAC1B+J,MAAK,EAAAoB,EAAA,GAAYC,IAClB,IAAIhwB,EAGJ,OADAvE,KAAKwT,cAAuF,QAAxEjP,EAAKgwB,aAAiC,EAASA,EAAIhL,uBAAoC,IAAPhlB,OAAgB,EAASA,EAAGilB,SAAW+K,aAAiC,EAASA,EAAI7gB,UAAY6gB,EAAK,UACnM,OAENte,UAAWgP,IACZjlB,KAAKwzB,WAAavO,EAAOY,WACzB,MAAMqC,EAAsB,cAAejD,EACrCuP,EAAuB,eAAgBvP,EACvCwP,EAAwBz0B,KAAKmT,WAAWuhB,eAAiB,IAAarhB,gBAAkB,gBAAiB4R,EAC/GjlB,KAAKoyB,kBAAoBlK,IAAwBsM,EAE7CC,IACAz0B,KAAKqyB,YAAcpN,EAAOsD,cAE1BtD,aAAuC,EAASA,EAAOuE,QACvDxpB,KAAKwT,aAAayR,EAAOuE,MAAO,YAEpC,MAAMtE,EAAcD,EAAOE,aAC3B,GAAID,GAAeA,IAAgB,KAAYE,WAG3C,OAFAplB,KAAKwT,aAAa,0BAA0BxT,KAAKmS,6BAA8B,mBAC/EnS,KAAKsV,qBAAsB,GAO/B,GAJAtV,KAAKsV,qBAAsB,EACvB4S,GACAloB,KAAK20B,qBAAqB1P,EAAOM,UAAWN,EAAOY,YAEnDZ,EAAOH,IAAK,CACZ,MAAMU,GAAc,EAAAC,EAAAC,GAAuBT,GAE3C,GADAjlB,KAAK40B,mBAAmBpP,GACpB0C,GAAuBjD,EAAOM,YAAcvlB,KAAKmyB,cAAe,CAChE,MAAM0C,EAAiB,CACnB9W,SAAUkH,EAAOM,UACjB1F,UAAWoF,EAAOY,YAEtB7lB,KAAK+T,MAAM,IAAmC+d,gBAAiB+C,GAC/D70B,KAAKmyB,cAAgBlN,EAAOM,SAChC,CACJ,MAEIvlB,KAAK40B,mBAAmB3P,IAGpC,CACA,MAAOxf,GACH,IAAI,QAAEiO,GAAYjO,EACdA,EAAM8jB,kBACN7V,EAAUjO,EAAM8jB,gBAAgBC,OAEpCX,EAAA,EAAOpjB,MAAMiO,GAEb1T,KAAKwT,aAAaE,EAAS,UAC/B,CACJ,EACJ,CACA,cAAA2gB,CAAepP,GACX,OAAIzS,MAAMmB,QAAQsR,GACPA,EACPA,EAAOqD,MACArD,EAAOqD,MAEdrD,EAAOH,KACA,EAAAW,EAAAC,GAAuBT,GAAQ2B,QAEnC3B,EAAO2B,OAClB,CACA,kBAAAgO,CAAmB3P,GACVA,IAEDjlB,KAAK2R,gBACL3R,KAAK80B,uBAAuB7P,GAG5BjlB,KAAK+0B,oBAAoB9P,GAEjC,CASA,oBAAA0P,CAAqB5W,EAAU8B,GAC3B7f,KAAK+T,MAAM,IAAqB4d,kBAAmB,CAC/CqD,YAAajX,EACb8B,aAER,CACA,sBAAAiV,CAAuBG,GACnB,IAAI1wB,EACJ,MAAM2wB,EAAel1B,KAAKwV,QAAQiE,KAC5B0b,EAAoBF,EAAoB3M,MAC9C,IAAK9V,MAAMmB,QAAQwhB,MAC+B,QAA3C5wB,EAAK0wB,EAAoB9P,oBAAiC,IAAP5gB,OAAgB,EAASA,EAAG4qB,WAAW,SAE7F,YADAtG,EAAA,EAAOpjB,MAAM,uCAAwCwvB,GAGzD,GAAIj1B,KAAKkyB,8BAA+B,CACpC,IAAIkD,GAAe,EACnB,IAAK,MAAMhd,KAAc+c,GAAqB,GAAI,CAC9C,MAAMxM,EAAkBvQ,EAAWpY,KAAKyR,OACxC,IAAKkX,EAAiB,CAClB,IAAKyM,EAAc,CACf,MAAMxM,EAAiB,wBAAwB5oB,KAAKyR,8JACpDoX,EAAA,EAAOpjB,MAAMmjB,GACbwM,GAAe,CACnB,CACA,KACJ,CACAp1B,KAAKwV,QAAQzC,IAAI4V,EAAiBvQ,EACtC,CACA,GAAIgd,EAEA,YADAp1B,KAAK8C,UAIT9C,KAAK6zB,uBACL,MAAMre,EAAUxV,KAAKwV,QAAQiE,KAAO,EAAIzZ,KAAKiyB,eAAiBkD,EAG9D,OAFAn1B,KAAKq1B,kBAAkBH,EAAcl1B,KAAKwV,QAAQiE,WAClDzZ,KAAK+zB,WAAWve,EAEpB,CACA,MAAM8Z,EAAe,GAErBtvB,KAAK6zB,uBACL,MAAMrE,EAAexvB,KAAKiyB,eAAela,OAAQqX,IAC7C,MAAMkG,EAAQH,EAAkB1sB,KAAMjH,GAASA,EAAKxB,KAAKyR,SAAW2d,EAAIpvB,KAAKyR,QAC7E,OAAI6jB,IACAhG,EAAa7W,KAAK6c,IACX,KAIT/F,EAAe4F,EAAkBpd,OAAQvW,IAAUxB,KAAKwV,QAAQ6C,IAAI7W,EAAKxB,KAAKyR,SACpFzR,KAAKyV,gBAAkB,CAAEC,IAAK,GAAIC,OAAQ,GAAInE,OAAQ,IACtDxR,KAAKgY,oBAAoBuX,GACzBvvB,KAAK0Y,oBAAoB8W,GACzBxvB,KAAKgZ,oBAAoBsW,GACzBtvB,KAAKg0B,gBAAgBh0B,KAAKyV,iBAC1BzV,KAAKq1B,kBAAkBH,EAAcl1B,KAAKwV,QAAQiE,KACtD,CACA,mBAAAsb,CAAoBQ,GAChB,IAAIhxB,EACJ,MAAM2wB,EAAel1B,KAAKwV,QAAQiE,KAClC,GAAIzZ,KAAKkyB,8BAQL,OAPoC,QAAnC3tB,EAAKgxB,EAAiB3O,eAA4B,IAAPriB,GAAyBA,EAAGyL,QAASoI,IAC7EpY,KAAKwV,QAAQzC,IAAIqF,EAAWpY,KAAKyR,OAAQ2G,KAG7CpY,KAAK6zB,uBACL7zB,KAAK+zB,WAAW/zB,KAAKiyB,qBACrBjyB,KAAKq1B,kBAAkBH,EAAcl1B,KAAKwV,QAAQiE,MAGtDzZ,KAAKyV,gBAAkB,CAAEC,IAAK,GAAIC,OAAQ,GAAInE,OAAQ,IACtDxR,KAAKgY,oBAAoBud,EAAiB3O,SAC1C5mB,KAAK0Y,oBAAoB6c,EAAiBpF,SAC1CnwB,KAAKgZ,oBAAoBuc,EAAiBrF,SAC1ClwB,KAAKg0B,gBAAgBh0B,KAAKyV,iBAC1BzV,KAAKq1B,kBAAkBH,EAAcl1B,KAAKwV,QAAQiE,KACtD,CAEA,eAAAwT,CAAgB1W,GACZ,OAAO,QAAUvW,UAAM,OAAQ,EAAQ,YAGnC,OAF+BA,KAAKsW,+BAA+BC,EAAgBwb,EAAsCtb,EAG7H,EACJ,CACA,SAAA7D,CAAUC,EAAWC,GACjB9S,KAAKsR,oBAAoByB,IAAIF,EAAWC,GACxC9S,KAAKwR,OAAOwB,KAAKhT,KAAKsR,oBAC1B,CACA,YAAA2B,CAAaJ,GACT7S,KAAKsR,oBAAoB4B,OAAOL,GAChC7S,KAAKwR,OAAOwB,KAAKhT,KAAKsR,oBAC1B,CACA,gBAAA+I,CAAiBN,GACb/Z,KAAKg0B,gBAAgBja,EACzB,CACA,iBAAAsb,CAAkBG,EAASC,GACnBD,IAAYC,GAEhBz1B,KAAK+T,MAAM,IAAmC6d,YAAa,CACvD3xB,MAAOw1B,EACPpsB,SAAUmsB,GAElB,CACA,mBAAAxd,CAAoB4O,EAAU,IAC1Bpb,MAAMwM,oBAAoB4O,EAAS5mB,KAAKoyB,kBAAoBpyB,KAAKiyB,eAAe5nB,OAAS,GACzFrK,KAAK6zB,sBACT,CACA,mBAAA7a,CAAoBkX,EAAU,IAC1B1kB,MAAMwN,oBAAoBkX,GAC1BlwB,KAAK6zB,sBACT,CAKA,mBAAAnb,CAAoByX,EAAU,IAC1B3kB,MAAMkN,oBAAoByX,GAC1BnwB,KAAK6zB,sBACT,CACA,QAAArZ,GACI,OAAQxa,KAAKmT,WAAWuhB,cACpB,KAAK,IAAagB,WACd,IAAItjB,EACApS,KAAKoS,YACLpS,KAAKsyB,gBAAkBtyB,KAAKoS,WAAa,EACzCA,EAAapS,KAAKsyB,gBAGlBtyB,KAAKsyB,gBAAkB,EAE3BtyB,KAAKsU,QAAQ8P,YAAYpkB,KAAKwzB,WAAYphB,GAC1C,MACJ,KAAK,IAAaiB,eACdrT,KAAKsyB,gBAAkB,EAY/BtyB,KAAKmT,WAAW+gB,oBAAoBl0B,KAAKsyB,eAC7C,IAEJ,QAAW,EACP,IAAAvd,MAAK,CAAEC,KAAM,UAAWC,UAAW,qCACpC+c,EAAyBtwB,UAAW,iCAA6B,GACpEswB,GAA2B,QAAW,EAClC,IAAAxiB,eAAc,CACVpD,KAAM,iCAEX4lB,E,mJCplBI,SAAS2D,EAAoBluB,EAAO0a,GACvC,MAAmB,wBAAfA,EACO,CACH3B,QAAS,CACL,CACIzI,OAAQ,sBAEZ,CACIA,OAAQ,oBACRnB,aAAc,CACVhS,OAAQ6C,EAAMiQ,gBAMf,sBAAfyK,EACO,CACHvd,OAAQ6C,EAAMiQ,kBAFtB,CAMJ,CAQO,SAASke,EAAcC,GAC1B,OAAQA,aAAmD,EAASA,EAAarZ,eAC7E,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,aACL,IAAK,SACD,MAAO,gBAEnB,CAOO,SAASsZ,GAAmB,MAAE71B,IACjC,OAAO,QAAoBA,EAC/B,CAOO,SAAS81B,GAAuB,MAAE91B,IACrC,OAAO,QAAwBA,EACnC,CAUO,SAAS+1B,EAAgBC,GAC5B,OAAO,IAAI1Y,KAAK0Y,GACXC,cACAC,MAAM,EAXa,IAYnB5U,QAAQ,KAAM,IACdA,QAAQ,IAAK,IACtB,CAKO,MAAM6U,EAAwB,EAKxBC,EAAoB,CAC7BC,qBAAsB,0BAMbC,EAAoB,CAC7BpjB,WAAY,aACZqjB,QAAS,WAOAC,EAAgB,CACzB,eACA,yBACA,wBACA,kBACA,eACA,WACA,YACA,qBACA,oBACA,eACA,yBACA,iBACA,iBACA,sBACA,sBACA,mBACA,sBACA,mBACA,aACA,sBACA,WACA,UACA,qBACA,aACA,QACA,aACA,uBACA,qBACA,yBACA,WACA,8BACA,qBACA,gBACA,yBACA,2BACA,cACA,gBACA,2BACA,4BACA,gCACA,+BACA,cACA,YACA,UACA,sBACA,oBACA,qBACA,eACA,eACA,aACA,cACA,mBACA,sBACA,cACA,WACA,YACA,kBACA,YACA,eACA,oBACA,wBACA,oBACA,yBACA,uBACA,2BACA,6BACA,kBACA,mBACA,kCACA,mBACA,mBACA,oBACA,qBACA,iBACA,0BACA,4BACA,iBACA,6BACA,0BACA,sBACA,2BACA,iBACA,gBACA,WACA,wCACA,4BACA,wBACA,oBACA,2BACA,6BACA,2BACA,QACA,wBACA,wBACA,uBACA,qBACA,0BACA,2BACA,mBACA,yBACA,aACA,oBACA,kBACA,kBACA,yBACA,wBACA,mBACA,uBACA,4BACA,8BACA,yBACA,2BACA,uBACA,oBACA,mBACA,+BACA,YACA,gBACA,sBACA,iCACA,sBACA,gCACA,wBACA,gCACA,+BACA,6BACA,qCACA,8BACA,yBACA,8BACA,YACA,0BACA,+BACA,yBACA,4BACA,mBACA,oBACA,cACA,uBACA,4BACA,kCACA,YACA,oBACA,mBACA,iBACA,kBACA,8BACA,kBACA,kBACA,qBACA,0BACA,uBACA,uBACA,aACA,yBACA,0BACA,kCACA,sBACA,mBACA,sCACA,iBACA,eACA,0BACA,aACA,yBACA,8BACA,yBACA,sBACA,oBACA,WACA,eACA,8BACA,0BACA,iBACA,6BACA,0BACA,4BACA,uBACA,yBACA,+BACA,eACA,8BACA,gCACA,gCACA,0BACA,gCACA,oCACA,uCACA,oBACA,iBACA,oBACA,8BACA,sBACA,gCACA,gBACA,0BACA,gCACA,4BACA,sBACA,kCACA,gCACA,0BACA,4BACA,yBACA,2BACA,0BACA,kBACA,uBACA,4CACA,gCACA,sBACA,qBACA,uBACA,UACA,kBACA,eACA,4BACA,+BACA,uBACA,4CACA,+BACA,kBACA,mCACA,4BACA,6BACA,yBACA,iBACA,yBACA,mBACA,kBACA,yBACA,8BACA,2BACA,gCACA,wBACA,kBACA,WACA,8BACA,cACA,mBACA,4BACA,wBACA,iCACA,sBACA,+BACA,0BACA,mCACA,yBACA,kCACA,qBACA,8BACA,gBACA,0BACA,eACA,cACA,cACA,sBACA,mBACA,uBACA,0BACA,iBACA,eACA,iBACA,kBACA,uBACA,kBACA,qBACA,gBACA,2BACA,cACA,mBACA,gBACA,cACA,cACA,eACA,4BACA,iCACA,4BACA,2BACA,wBACA,oBACA,uBACA,uBACA,gBACA,+BACA,2BACA,gCACA,iCACA,uBACA,8BACA,8BACA,WACA,qBAOSC,EAAuB,CAChC,YACA,kBACA,YACA,eACA,oBACA,wBACA,oBACA,yBACA,uBACA,2BACA,6BACA,kBACA,mBACA,kCACA,mBACA,mBACA,oBACA,qBACA,iBACA,0BACA,4BACA,iBACA,6BACA,0BACA,sBACA,2BACA,iBACA,gBACA,YAOSC,EAAwB,CACjC,wCACA,4BACA,wBACA,oBACA,2BACA,6BACA,2BACA,QACA,wBACA,wBACA,uBACA,qBACA,0BACA,2BACA,mBACA,yBACA,aACA,oBACA,kBACA,kBACA,yBACA,wBACA,mBACA,uBACA,4BACA,8BACA,yBACA,2BACA,uBACA,oBACA,mBACA,+BACA,YACA,gBACA,sBACA,iCACA,sBACA,gCACA,wBACA,gCACA,+BACA,6BACA,qCACA,8BACA,yBACA,8BACA,YACA,0BACA,+BACA,yBACA,4BACA,mBACA,oBACA,cACA,uBACA,4BACA,kCACA,YACA,oBACA,mBACA,iBACA,kBACA,8BACA,kBACA,kBACA,qBACA,0BACA,uBACA,uBACA,aACA,yBACA,0BACA,kCACA,sBACA,mBACA,sCACA,iBACA,eACA,0BACA,aACA,yBACA,8BACA,yBACA,sBACA,oBACA,WACA,eACA,8BACA,0BACA,iBACA,6BACA,0BACA,4BACA,uBACA,yBACA,+BACA,eACA,8BACA,gCACA,gCACA,0BACA,gCACA,oCACA,uCACA,oBACA,iBACA,oBACA,8BACA,sBACA,gCACA,gBACA,0BACA,gCACA,4BACA,sBACA,kCACA,gCACA,0BACA,4BACA,yBACA,2BACA,0BACA,kBACA,uBACA,4CACA,gCACA,sBACA,qBACA,uBACA,UACA,kBACA,eACA,4BACA,+BACA,uBACA,4CACA,+BACA,kBACA,mCACA,4BACA,6BACA,0BAEEC,EAA2B,IAAItI,IAAIoI,GACnCG,EAA4B,IAAIvI,IAAIqI,GACpCG,EAAoB,IAAIxI,IAAImI,GAClC,SAASM,EAAU92B,GACf,MAAqB,kBAAVA,EACAA,EAEU,iBAAVA,IAGwB,SAAxBA,EAAM+2B,eAAsC,KAAV/2B,EAGjD,CAcO,SAASg3B,EAA4B1L,EAAa2L,GAE1B,iBAAhB3L,IACPA,EAAc,CAAC,GAGnB,MAAM4L,EAAe5L,EA0BrB,OAzBa5jB,OAAOoI,KAAKmnB,GAEpBlnB,QAAS3K,IACV,IAAKyxB,EAAkBze,IAAIhT,GACvB,OAEJ,MAAMpF,EAAQi3B,EAAU7xB,GACxB,QAAqB,IAAVpF,EACP,OAGJ,IAAIm3B,EAAen3B,EACf22B,EAAyBve,IAAIhT,GAC7B+xB,EAjCZ,SAAkBn3B,GACd,MAAqB,iBAAVA,EACAA,EAEU,iBAAVA,EACAikB,OAAOjkB,QADlB,CAGJ,CA0B2Bo3B,CAASp3B,IAEnB42B,EAA0Bxe,IAAIhT,IAGtB,sBAARA,GA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","sources":["webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/date.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/multiselect.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/number.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/select.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/string.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/action.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/actions-menu.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/boolean.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/editable.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/icon.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/select.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/status-pill.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/text-field.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/text.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/utils/accessor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell/cell.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell/cell.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/column/column.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/column/column.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/base.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/base.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/client-side.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/error-handler.dialog.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.grid-definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-base.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-dataserver.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-reqrep.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-head-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/fonts.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-grid-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-alpine-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-balham-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-material-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/index.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/datasource-events.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/grid-pro-genesis-datasource.config.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/client-side.grid-definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/grid-pro-genesis-datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.styles.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/state-persistence/local-state.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/state-persistence/state-persistence.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/label-value.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/load-more.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/pagination.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/reload.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/row-count.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/tooltips/error-tooltip.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/array.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/error.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/logger.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/map.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/string.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/mixins/lifecycle/lifecycle.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/delay.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/dom.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/logger.js"],"sourcesContent":["import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\ndayjs.extend(utc);\n/**\n * The AG Date Editor element.\n * @public\n * @tagname %%prefix%%-date-editor\n */\nexport class DateEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.dateFormat = params.withTime ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD';\n this.inputType = params.withTime ? 'datetime-local' : 'date';\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n changeHandler(event) {\n const dateValue = event.target.control.valueAsNumber;\n this.value = !isNaN(dateValue) ? dateValue : undefined;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], DateEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], DateEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agDateEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param prefix - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getDateEditorTemplate = (prefix = 'foundation') => html `\n <${prefix}-text-field\n ${ref('input')}\n :value=${(x) => x.value === undefined || x.value === null ? '' : dayjs.utc(x.value).format(x.dateFormat)}\n type=${(x) => x.inputType}\n @input=${(x, c) => x.changeHandler(c.event)}\n style=\"width: ${(x) => x.actualWidth}px\"\n ></${prefix}-text-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-editor\\>\n */\nexport const foundationDateEditor = DateEditor.compose({\n baseName: 'date-editor',\n styles: agDateEditorStyles,\n template: getDateEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Multiselect Editor element.\n * @public\n * @tagname %%prefix%%-multiselect-editor\n */\nexport class MultiselectEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.selectedOptions = params.value;\n // DATASERVER does not support array type so selected options could be fetched from another resource\n if (this.params.selectedOptionsCallback) {\n this.params.selectedOptionsCallback(this.params.data).then((selectedOptions) => {\n this.selectedOptions = selectedOptions;\n });\n }\n // if value was provided as string component will assume it's in csv syntax\n if (typeof params.value === 'string') {\n this.selectedOptions = params.value.split(',');\n }\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.selectedOptions;\n }\n isPopup() {\n return true;\n }\n changeHandler(event) {\n this.selectedOptions = event.detail;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], MultiselectEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], MultiselectEditor.prototype, \"selectedOptions\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agMultiselectEditorStyles = css ``;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getMultiselectEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-multiselect\n style=\"width: 100%\"\n ?async=${(x) => x.params.async}\n :selectedOptions=${(x) => x.selectedOptions || []}\n @selectionChange=${(x, c) => x.changeHandler(c.event)}\n >\n <multiselect-datasource\n resourceName=${(x) => x.params.allOptionsResourceName}\n value-field=${(x) => x.params.valueField}\n label-field=${(x) => x.params.labelField}\n :datasourceConfig=${(x) => x.params.datasourceOptions}\n ></multiselect-datasource>\n </${designSystem}-multiselect>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-multiselect-editor\\>\n */\nexport const foundationMultiselectEditor = MultiselectEditor.compose({\n baseName: 'multiselect-editor',\n styles: agMultiselectEditorStyles,\n template: getMultiselectEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Number Editor element.\n * @public\n * @tagname %%prefix%%-number-editor\n */\nexport class NumberEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n changeHandler(event) {\n const value = parseFloat(event.target.value);\n this.value = !isNaN(value) ? value : undefined;\n if (this.params.onChange)\n this.params.onChange(this.value, this.params);\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], NumberEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], NumberEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], NumberEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Number Editor Styles.\n * @public\n */\nexport const agNumberEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getNumberEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-number-field\n ${ref('input')}\n withFormatting=${(x) => x.params.withFormatting}\n :options=${(x) => x.params.formatOptions}\n :value=${(x) => (x.value === undefined ? '' : String(x.value))}\n @input=${(x, c) => {\n x.changeHandler(c.event);\n}}\n placeholder=${(x) => x.params.placeholder}\n ?disabled=${(x) => x.params.disabled}\n hideStep\n style=\"width: ${(x) => x.actualWidth}px\"\n ></${designSystem}-number-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-number-editor\\>\n */\nexport const foundationNumberEditor = NumberEditor.compose({\n baseName: 'number-editor',\n styles: agNumberEditorStyles,\n template: getNumberEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Select Editor element.\n * @public\n * @tagname %%prefix%%-select-editor\n */\nexport class SelectEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.combobox.open = true;\n }\n changeHandler(event) {\n var _a;\n this.value = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.value;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], SelectEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], SelectEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], SelectEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agSelectEditorStyles = css ``;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getSelectEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-combobox\n style=\"width: ${(x) => x.actualWidth}px\"\n ${ref('combobox')}\n position=${(x) => (x.params.position ? x.params.position(x.params.data) : '')}\n ?async=${(x) => x.params.async}\n @value-change=${(x, c) => x.changeHandler(c.event)}\n >\n <options-datasource\n resourceName=${(x) => x.params.allOptionsResourceName}\n value-field=${(x) => x.params.valueField}\n label-field=${(x) => x.params.labelField}\n option-element=\"${designSystem}-option\"\n ?allow-custom-options=${(x) => x.params.allowCustomOptions}\n :datasourceConfig=${(x) => x.params.datasourceOptions}\n :data=${(x) => x.params.values}\n :initialSelectedValue=${(x) => x.params.value}\n ></options-datasource>\n </${designSystem}-combobox>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-editor\\>\n */\nexport const foundationSelectEditor = SelectEditor.compose({\n baseName: 'select-editor',\n styles: agSelectEditorStyles,\n template: getSelectEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG String Editor element.\n * @public\n * @tagname %%prefix%%-string-editor\n */\nexport class StringEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n changeHandler(event) {\n this.value = event.target.value;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], StringEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], StringEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], StringEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG String Renderer Styles.\n * @public\n */\nexport const agStringEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed String template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A String component template prefixed with the correct design system.\n * @public\n */\nexport const getStringEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-text-field\n ${ref('input')}\n :value=${(x) => (x.value === undefined ? '' : x.value)}\n @input=${(x, c) => {\n x.changeHandler(c.event);\n}}\n placeholder=${(x) => x.params.placeholder}\n style=\"width: ${(x) => x.actualWidth}px\"\n >\n </${designSystem}-text-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-string-editor\\>\n */\nexport const foundationStringEditor = StringEditor.compose({\n baseName: 'string-editor',\n styles: agStringEditorStyles,\n template: getStringEditorTemplate(),\n});\n","import { __awaiter, __decorate } from \"tslib\";\nimport { KeyCode } from '@ag-grid-community/core';\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { DesignToken, FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\n/**\n * The AG Action Renderer element.\n * @public\n * @tagname %%prefix%%-grid-pro-action-renderer\n */\nexport class ActionRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n params.eGridCell.addEventListener('keydown', (event) => {\n if (event.key === KeyCode.ENTER) {\n this.clickHandler();\n }\n });\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n clickHandler() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.params.actionClick)\n return;\n this.pendingAction = true;\n yield this.params.actionClick(this.params.data);\n this.pendingAction = false;\n });\n }\n get dataTestId() {\n var _a, _b;\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.dataTestId) {\n return this.params.dataTestId + ((_b = this.params.data[this.params.uniqueFieldName]) !== null && _b !== void 0 ? _b : '');\n }\n return undefined;\n }\n}\n__decorate([\n observable\n], ActionRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], ActionRenderer.prototype, \"pendingAction\", void 0);\nconst { create } = DesignToken;\n/**\n * The base height multiplier for the action renderer.\n * @remarks Results in `--action-height-multiplier`. This is a DesignToken {@link https://www.fast.design/docs/design-systems/design-tokens/#what-is-a-design-token} value. Defaults to `0.6px`. May have other values depending on the design system or can be set to a different value.\n * @public\n */\nexport const actionHeightMultiplier = create('action-height-multiplier').withDefault('0.6px');\n/**\n * The AG Action Renderer Styles.\n * @public\n */\nexport const agActionRendererStyles = css `\n .action-container {\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: center;\n }\n .action-renderer {\n align-self: center;\n display: flex;\n height: calc(\n (var(--base-height-multiplier) + var(--density)) * var(--design-unit) *\n var(--action-height-multiplier)\n );\n }\n`;\n/**\n * A function that returns a Foundation Action Renderer for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-action-renderer\\>\n */\nexport const foundationGridProActionRenderer = ActionRenderer.compose({\n baseName: 'grid-pro-action-renderer',\n styles: css `\n ${agActionRendererStyles}\n `,\n template: html `\n <div class=\"action-container\" part=\"action-container\">\n <foundation-button\n class=\"action-renderer\"\n part=\"action-renderer\"\n style=\"${(x) => x.params.actionButtonStyle || ''}\"\n data-test-id=\"${(x) => x.dataTestId}\"\n ?disabled=${(x) => { var _a; return x.pendingAction || x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n appearance=\"${(x) => x.params.appearance}\"\n @click=${(x) => x.clickHandler()}\">${(x) => x.params.actionName}</foundation-button>\n </div>`,\n});\n","import { __decorate } from \"tslib\";\nimport { html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { GridProRendererTypes } from '../grid-pro.types';\nimport { convertToKebabCase } from '../utils';\n/**\n * The Actions Menu Renderer element.\n * @remarks For multiple actions scenarios.\n * @public\n * @tagname %%prefix%%-grid-pro-actions-menu-renderer\n */\nexport class ActionsMenuRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return false;\n }\n}\n__decorate([\n observable\n], ActionsMenuRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Actions Menu for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-actions-menu-renderer\\>\n */\nexport const foundationGridProActionsMenuRenderer = ActionsMenuRenderer.compose({\n baseName: 'grid-pro-actions-menu-renderer',\n template: html `\n <foundation-actions-menu\n name=\"${(x) => x.params.headerName}\"\n :definition=${(x) => x.params}\n ></foundation-actions-menu>\n `,\n});\n/**\n * Helper function to get ColDef {@link https://www.ag-grid.com/javascript-data-grid/column-properties/} for Actions Menu Renderer.\n * Will take the parameter values for a base ColDef and merge them with the overrideDef (if specified).\n * @param actions - Array of `ActionMenuItem` to be displayed in the menu.\n * @param overrideDef - Optional override for the ColDef. Will override any of the default values. Default is an empty object.\n * @param customActionsOpenerName - Optional custom name for the button that opens the menu. Default is '⋮'.\n * @param isVertical - Optional flag to display the menu vertically. Default is false (displays the menu horizontally, follow the rowHeight).\n * @param buttonAppearance - Optional appearance for the button that opens the menu. Default is 'outline'.\n * @returns Merged ColDef (base ColDef created from the parameters + overrideDef) for Actions Menu Renderer.\n * @example\n * ```ts\n * public exampleActionsMenuDef: ColDef = getActionsMenuDef(\n * [\n * {\n * name: 'View',\n * callback: (rowData) => logger.debug('VIEWW!!!', rowData),\n * },\n * {\n * name: 'Delete',\n * callback: (rowData) => logger.debug('DELETE!!!', rowData),\n * },\n * ],\n * {\n * headerName: 'Instrument Actions',\n * width: 180,\n * },\n * '+',\n * true,\n * 'primary-gradient'\n * );\n * ```\n * @public\n */\nexport const getActionsMenuDef = (actions, overrideDef = {}, customActionsOpenerName = '⋮', isVertical = false, buttonAppearance) => {\n const actionsMenuDef = {\n cellRenderer: GridProRendererTypes.actionsMenu,\n cellRendererParams: {\n actions,\n buttonAppearance,\n isVertical,\n buttonText: customActionsOpenerName,\n },\n cellStyle: { border: 'none', overflow: 'visible' },\n field: `${convertToKebabCase(overrideDef.headerName) || 'actions-menu'}`,\n headerName: 'Actions',\n // valueGetter: (params: ValueGetterParams) => {\n // params.data.actions = actions;\n // params.data.buttonText = customActionsOpenerName;\n // return null;\n // },\n width: 150,\n };\n return Object.assign(Object.assign({}, actionsMenuDef), overrideDef);\n};\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\nimport { logger } from '../utils';\n/**\n * The AG Boolean Renderer element.\n * @public\n * @tagname %%prefix%%-boolean-renderer\n */\nexport class BooleanRenderer extends FoundationElement {\n isDisabled(data) {\n var _a, _b;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return !((_b = this.params) === null || _b === void 0 ? void 0 : _b.colDef.editable);\n }\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.selected = params.value;\n }\n /** @internal */\n userInputHandler(e) {\n // Strictly prevent any event dispatch or value change if not editable\n if (!this.params.colDef ||\n (typeof this.params.colDef.editable === 'function'\n ? !('column' in this.params &&\n this.params.colDef.editable(this.params))\n : this.params.colDef.editable !== true)) {\n return;\n }\n if (e instanceof MouseEvent) {\n if (e.type !== 'click' || e.button !== 0)\n return;\n this.selected = !this.selected;\n }\n if (e instanceof KeyboardEvent) {\n if (e.type !== 'keydown' || (e.key !== ' ' && e.key !== 'Enter'))\n return;\n this.selected = !this.selected;\n }\n const editedCells = this.params.api.getEditingCells();\n const changingCurrentlyEditedCell = !!editedCells.find((cell) => cell.rowIndex === this.params.node.rowIndex &&\n cell.column.getInstanceId() === this.params.column.getInstanceId());\n if (!changingCurrentlyEditedCell) {\n // below section allows grid renderer to act as grid editor so users can edit data without requesting edit\n // heavily inspired by https://github.com/ag-grid/ag-grid/blob/latest/grid-community-modules/core/src/ts/rendering/cellRenderers/checkboxCellRenderer.ts#L104\n const { column, node, value } = this.params;\n const eventStarted = {\n type: 'cellEditingStarted',\n column: column,\n colDef: column.getColDef(),\n data: node.data,\n node,\n rowIndex: node.rowIndex,\n rowPinned: node.rowPinned,\n value,\n };\n this.params.api.dispatchEvent(eventStarted);\n const valueChanged = this.params.node.setDataValue(this.params.column, this.selected, 'edit');\n if (this.params.onChange)\n this.params.onChange(node.data);\n const eventStopped = {\n type: 'cellEditingStopped',\n column: column,\n colDef: column.getColDef(),\n data: node.data,\n node,\n rowIndex: node.rowIndex,\n rowPinned: node.rowPinned,\n value,\n oldValue: value,\n newValue: this.selected,\n valueChanged,\n };\n this.params.api.dispatchEvent(eventStopped);\n }\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n this.selected = params.value;\n return true;\n }\n getValue() {\n return this.selected;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n /** @internal */\n getDataTestId() {\n var _a;\n if (!((_a = this.params) === null || _a === void 0 ? void 0 : _a.dataTestId))\n return undefined;\n if (typeof this.params.dataTestId === 'function')\n return this.params.dataTestId(this.params.node.data);\n return this.params.dataTestId;\n }\n}\n__decorate([\n observable\n], BooleanRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], BooleanRenderer.prototype, \"selected\", void 0);\n/**\n * The AG Boolean Renderer Styles.\n * @public\n */\nexport const agBooleanRendererStyles = css `\n :host {\n align-center: center;\n display: flex;\n height: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Checkbox template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Checkbox component template prefixed with the correct design system.\n * @public\n */\nexport const getAgBooleanRendererTemplate = (designSystem = 'foundation') => {\n const checkboxComponent = `${designSystem}-checkbox`;\n return html `\n <${checkboxComponent}\n @click=${(x, c) => x.userInputHandler(c.event)}\n @keydown=${(x, c) => x.userInputHandler(c.event)}\n :checked=${(x) => x.selected}\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n data-test-id=\"${(x) => x.getDataTestId()}\"\n ></${checkboxComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Boolean Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-boolean-renderer\\>\n */\nexport const foundationAgBooleanRenderer = BooleanRenderer.compose({\n baseName: 'boolean-renderer',\n styles: agBooleanRendererStyles,\n template: getAgBooleanRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\n/**\n * The AG Editable Renderer element.\n * @public\n * @tagname %%prefix%%-editable-renderer\n */\nexport class EditableRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.valueFormatted = params.formatValue(params.value);\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.valueFormatted = params.formatValue(params.value);\n return true;\n }\n}\n__decorate([\n observable\n], EditableRenderer.prototype, \"valueFormatted\", void 0);\n/**\n * The AG Editable Renderer Styles.\n * @public\n */\nexport const agEditableRendererStyles = css `\n :host {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n`;\n/**\n * Get a Design System prefixed Checkbox template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Checkbox component template prefixed with the correct design system.\n * @public\n */\nexport const getAgEditableRendererTemplate = (designSystem = 'foundation') => {\n return html `\n <span>${(x) => x.valueFormatted}</span>\n <${designSystem}-progress-ring style=\"margin: 0; width: 20px; height: 20px\"></${designSystem}-progress-ring>\n `;\n};\n/**\n * A function that returns a Foundation Editable Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-editable-renderer\\>\n */\nexport const foundationAgEditableRenderer = EditableRenderer.compose({\n baseName: 'editable-renderer',\n styles: agEditableRendererStyles,\n template: getAgEditableRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, when } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { classNames } from '@microsoft/fast-web-utilities';\n/**\n * The AG Icon Renderer Styles.\n * @public\n */\nexport const agIconRendererStyles = css `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n position: relative;\n }\n\n .icon-container {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 5px;\n }\n\n .icon-container.with-hover {\n padding: 5px;\n line-height: 1;\n }\n\n .icon-container.with-hover:hover {\n cursor: pointer;\n background-color: var(--neutral-stroke-hover);\n }\n\n .icon-container.disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .secondary-icon {\n position: absolute;\n top: 50%;\n bottom: 0px;\n right: -5px;\n z-index: 2;\n line-height: 1;\n }\n`;\nfunction hasIconSrc(params) {\n return (!!params && typeof params.iconSrc === 'string' && params.iconSrc.length > 0);\n}\nfunction hasIconName(params) {\n return (!!params && typeof params.iconName === 'string' && params.iconName.length > 0);\n}\n/**\n * Get a Design System prefixed Icon template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns An Icon component template prefixed with the correct design system.\n * @public\n */\nexport const getIconRendererTemplate = (designSystem = 'rapid') => {\n const iconComponent = `${designSystem}-icon`;\n return html `\n <div\n class=\"icon-container ${(x) => { var _a, _b; return classNames(['with-hover', (_a = x.params) === null || _a === void 0 ? void 0 : _a.showHover], ['disabled', (_b = x.params) === null || _b === void 0 ? void 0 : _b.disabled]); }}\"\n @click=${(x, c) => {\n var _a, _b, _c;\n return !((_a = x.params) === null || _a === void 0 ? void 0 : _a.disabled) && ((_b = x.params) === null || _b === void 0 ? void 0 : _b.clickHandler)\n ? (_c = x.params) === null || _c === void 0 ? void 0 : _c.clickHandler(c.event, x.params.data)\n : null;\n }}\n >\n ${when((x) => hasIconSrc(x.params), html `\n <img\n class=\"icon-image\"\n src=\"${(x) => (hasIconSrc(x.params) ? x.params.iconSrc : '')}\"\n style=\"${(x) => {\n if (!hasIconSrc(x.params))\n return '';\n let styles = `height: ${x.params.iconHeight || '14px'}; width: auto;`;\n if (x.params.iconColor)\n styles += ` color: ${x.params.iconColor};`;\n return styles;\n }}\"\n />\n `)}\n ${when((x) => hasIconName(x.params), html `\n <${iconComponent}\n class=\"${(x) => {\n var _a;\n let classes = 'icon-element';\n if ((_a = x.params) === null || _a === void 0 ? void 0 : _a.showHover)\n classes += ' with-hover';\n return classes;\n }}\"\n name=\"${(x) => (hasIconName(x.params) ? x.params.iconName : '')}\"\n size=\"${(x) => (hasIconName(x.params) ? x.params.iconSize || 'md' : 'md')}\"\n style=\"${(x) => (x.params.iconColor ? `color: ${x.params.iconColor};` : '')}\"\n variant=\"${(x) => x.params.variant}\"\n ></${iconComponent}>\n `)}\n ${when((x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.secondaryIcon; }, html `\n <${iconComponent}\n class=\"secondary-icon\"\n name=\"${(x) => x.params.secondaryIcon}\"\n size=\"xs\"\n style=\"${(x) => (x.params.secondaryIconColor ? `color: ${x.params.secondaryIconColor};` : '')}\"\n ></${iconComponent}>\n `)}\n </div>\n `;\n};\n/**\n * Plain ag-Grid cell renderer for icons.\n * This renderer creates the FAST custom element using document.createElement.\n *\n * @public\n */\nexport class IconRenderer extends FoundationElement {\n // private element: HTMLElement;\n init(params) {\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n destroy() { }\n}\n__decorate([\n observable\n], IconRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Icon Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-icon-renderer\\>\n */\nexport const foundationIconRenderer = IconRenderer.compose({\n baseName: 'icon-renderer',\n template: getIconRendererTemplate(),\n styles: agIconRendererStyles,\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, repeat } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\nimport { setValueWithAccessor } from './utils';\n/**\n * The AG Select Renderer element.\n * @public\n * @tagname %%prefix%%-select-renderer\n */\nexport class SelectRenderer extends FoundationElement {\n constructor() {\n super(...arguments);\n this.selectionChanged = (e) => {\n this.value = e.target.value;\n this.params.onSelect(e.target.value, this.params);\n };\n }\n init(params) {\n var _a;\n if (!params)\n return;\n this.params = params;\n this.value = setValueWithAccessor((_a = params.node) === null || _a === void 0 ? void 0 : _a.data, params.accessor) || undefined;\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n}\n__decorate([\n observable\n], SelectRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], SelectRenderer.prototype, \"value\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agSelectRendererStyles = css `\n :host,\n .select-renderer,\n zero-option,\n ::part(listbox),\n ::part(control) {\n max-width: var(--select-renderer-max-width);\n min-width: 100%;\n }\n\n .select-renderer {\n --listbox-max-height: 4;\n --select-renderer-max-width: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getSelectRendererTemplate = (designSystem = 'foundation') => {\n const selectComponent = `${designSystem}-select`;\n const optionComponent = `${designSystem}-option`;\n return html `\n <${selectComponent}\n class=\"select-renderer\"\n position=${(x) => (x.params.position ? x.params.position(x.params.node.data) : '')}\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n @change=${(x, c) => x.selectionChanged(c.event)}\n :value=${(x) => x.value}\n >\n <${optionComponent}\n defaultSelected\n style=\"display: none;\"\n >\n ${(x) => x.params.defaultValue || 'Select option'}\n </${optionComponent}>\n ${repeat((x) => x.params.options(x.params.node.data), html `\n <${optionComponent}\n value=${(x) => x.name}\n ?disabled=${(x, c) => { var _a; return typeof x.isDisabled === 'function' ? x.isDisabled((_a = c.parent.params) === null || _a === void 0 ? void 0 : _a.data) : false; }}\n title=\"${(x) => (x.tooltip ? x.tooltip : null)}\"\n >${(x) => x.displayName}</${optionComponent}>\n `)}\n </${selectComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Select Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-renderer\\>\n */\nexport const foundationAgSelectRenderer = SelectRenderer.compose({\n baseName: 'select-renderer', // TODO: others have 'grid-pro' in the name, why not this one?\n styles: agSelectRendererStyles,\n template: getSelectRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\n/**\n * The Status Pill Renderer Styles.\n * @public\n */\nexport const agStatusPillRendererStyles = css `\n :host {\n width: 100%;\n display: flex;\n align-items: center;\n height: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Status Pill template.\n * @param designSystem - The design system prefix to use. Defaults to 'rapid'.\n * @returns A Staus Pill component template prefixed with the correct design system.\n * @public\n */\nexport const getStatusPillRendererTemplate = (designSystem = 'rapid') => {\n return html `\n <${designSystem}-status-pill\n background-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.backgroundColor; }}\"\n icon-name=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconName; }}\"\n icon-src=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconSrc; }}\"\n icon-initial=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconInitial; }}\"\n icon-initial-background-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconInitialBackgroundColor; }}\"\n icon-size=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconSize; }}\"\n text-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.textColor; }}\"\n text=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.text; }}\"\n date-countdown-unit=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownUnit; }}\"\n date-countdown=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdown; }}\"\n date-countdown-completed-message=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownCompletedMessage; }}\"\n ?hide-when-countdown-completed=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.hideWhenCountdownCompleted; }}\"\n date-countdown-visible-after=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownVisibleAfter; }}\"\n >\n </${designSystem}-status-pill>\n `;\n};\n/**\n * The AG Status Pill Renderer element.\n * @public\n * @tagname %%prefix%%-status-pill-renderer\n */\nexport class StatusPillRenderer extends FoundationElement {\n init(params) {\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n destroy() { }\n}\n__decorate([\n observable\n], StatusPillRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Status Pill Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-status-pill-renderer\\>\n */\nexport const foundationStatusPillRenderer = StatusPillRenderer.compose({\n baseName: 'status-pill-renderer',\n template: getStatusPillRendererTemplate(),\n styles: agStatusPillRendererStyles,\n});\n","import { __decorate } from \"tslib\";\nimport { sync } from '@genesislcap/foundation-utils';\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\nimport { setValueWithAccessor } from './utils';\n/**\n * The AG Text Field Renderer element.\n * @public\n * @tagname %%prefix%%-grid-text-field-renderer\n */\nexport class AgTextFieldRenderer extends FoundationElement {\n constructor() {\n super(...arguments);\n // Text field value\n this.textValue = '';\n /**\n * On text change handler\n * @param e - CustomEvent\n */\n this.textChanged = (e) => {\n this.textValue = e.target.value;\n this.params.onChange(e.target.value, this.params);\n };\n }\n init(params) {\n var _a;\n if (!params)\n return;\n this.params = params;\n this.textValue =\n this.textValue === ''\n ? setValueWithAccessor((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.data, params.accessor)\n : this.textValue;\n // Intercept keyboard events on the text field element\n this.addEventListener('keydown', (event) => {\n // Check if the key pressed is an arrow key\n if (['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n // Only stop propagation if cursor isn't at the boundaries\n const input = this.textField.control;\n const caretPos = input.selectionStart;\n if (event.key === 'ArrowLeft' && caretPos > 0) {\n event.stopPropagation();\n }\n else if (event.key === 'ArrowRight' && caretPos < input.value.length) {\n event.stopPropagation();\n }\n }\n });\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n}\n__decorate([\n observable\n], AgTextFieldRenderer.prototype, \"textValue\", void 0);\n__decorate([\n observable\n], AgTextFieldRenderer.prototype, \"params\", void 0);\n/**\n * The AG Text Field Renderer Styles.\n * @public\n */\nexport const textFieldRendererStyles = css `\n :host {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n }\n .text-renderer {\n width: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Text Field template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Text Field component template prefixed with the correct design system.\n * @public\n */\nexport const getTextFieldRendererTemplate = (designSystem = 'foundation') => {\n const textComponent = `${designSystem}-text-field`;\n return html `\n <${textComponent}\n ${ref('textField')}\n type=\"text\"\n class=\"text-renderer\"\n prefix=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.prefix; }}\"\n suffix=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.suffix; }}\"\n ?hide-affix-from-screen-reader=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.hideAffixFromScreenReader; }}\"\n :maxlength=\"${(x) => x.params.maxLength}\"\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n :value=\"${sync((x) => x.textValue)}\"\n @change=\"${(x, c) => x.textChanged(c.event)}\"\n ></${textComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Text Field Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-text-field-renderer\\>\n */\nexport const foundationAgTextFieldRenderer = AgTextFieldRenderer.compose({\n baseName: 'grid-pro-text-renderer',\n styles: textFieldRendererStyles,\n template: getTextFieldRendererTemplate(),\n});\n","// TODO: DEPRECATED due the incorrect \"text\" name\nimport { AgTextFieldRenderer, getTextFieldRendererTemplate, textFieldRendererStyles, } from './text-field.renderer';\n/**\n * @public\n * @deprecated - Use AgTextFieldRenderer instead\n * @tagname %%prefix%%-grid-text-renderer\n */\nexport class AgTextRenderer extends AgTextFieldRenderer {\n}\n/**\n * @public\n * @deprecated - Use textFieldRendererStyles instead\n */\nexport const textRendererStyles = textFieldRendererStyles;\n/**\n * @public\n * @deprecated - Use getTextFieldRendererTemplate instead\n */\nexport const getTextRendererTemplate = getTextFieldRendererTemplate;\n/**\n * A function that returns a Foundation Text Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-text-renderer\\>\n * @deprecated - Use foundationAgTextFieldRenderer instead\n */\nexport const foundationAgTextRenderer = AgTextRenderer.compose({\n baseName: 'grid-text-renderer',\n styles: textRendererStyles,\n template: getTextRendererTemplate(),\n});\n","export const setValueWithAccessor = (data, accessor) => {\n // if no '.', then it's not a deep value\n if (accessor.indexOf('.') < 0) {\n // data[field] = newValue;\n return data[accessor];\n }\n else {\n // otherwise it is a deep value, so need to dig for it\n const accessorPieces = accessor.split('.');\n let currentObject = data;\n while (accessorPieces.length > 0 && currentObject) {\n const fieldPiece = accessorPieces.shift();\n if (accessorPieces.length === 0) {\n return currentObject[fieldPiece];\n }\n else {\n currentObject = currentObject[fieldPiece];\n }\n }\n }\n};\n","import { __decorate } from \"tslib\";\nimport { customElement, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { CellTemplate as template } from './cell.template';\n/**\n * The Grid Pro Cell element.\n * @remarks Used inside the Grid Pro Column element, to define a cell renderer from the template.\n * @public\n */\nlet GridProCell = class GridProCell extends FoundationElement {\n connectedCallback() {\n super.connectedCallback();\n const wrapperGridProColumn = this.parentElement;\n if (this.renderer) {\n wrapperGridProColumn.definition.cellRenderer = this.renderer;\n }\n if (this.rendererParams) {\n wrapperGridProColumn.definition.cellRendererParams = this.rendererParams;\n }\n }\n init(params) {\n this.rendererParams = params;\n }\n getGui() {\n if (typeof this.renderer !== 'string') {\n return this.renderer(this.rendererParams);\n }\n return this;\n }\n destroy() { }\n refresh(params) {\n return false;\n }\n slottedAgRendererChanged() { }\n};\n__decorate([\n observable\n], GridProCell.prototype, \"renderer\", void 0);\n__decorate([\n observable\n], GridProCell.prototype, \"rendererParams\", void 0);\n__decorate([\n observable\n], GridProCell.prototype, \"slottedRenderer\", void 0);\nGridProCell = __decorate([\n customElement({\n name: 'grid-pro-cell',\n template,\n })\n], GridProCell);\nexport { GridProCell };\n","import { html, slotted } from '@microsoft/fast-element';\n/**\n * The Grid Pro Cell Template.\n * @public\n */\nexport const CellTemplate = html `\n <template>\n <slot ${slotted('slottedRenderer')} @slotchange=\"${(x) => x.slottedAgRendererChanged()}\"></slot>\n </template>\n`;\n","import { __decorate } from \"tslib\";\nimport { LifecycleMixin } from '@genesislcap/foundation-utils';\nimport { customElement, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { ColumnTemplate as template } from './column.template';\n/**\n * The Grid Pro Column element.\n * @remarks Used insde the Grid Pro element, to specify the column definitions (ColDef) for a given column.\n * @public\n */\nlet GridProColumn = class GridProColumn extends LifecycleMixin(FoundationElement) {\n constructor() {\n super(...arguments);\n this.definition = {};\n }\n slottedAgCellChanged() { }\n deepClone() {\n const copy = super.deepClone();\n copy.definition = {};\n if (this.definition) {\n Object.keys(this.definition).forEach((key) => {\n if (typeof this.definition[key] === 'function') {\n copy.definition[key] = this.definition[key].bind(copy);\n }\n else {\n copy.definition[key] = structuredClone(this.definition[key]);\n }\n });\n }\n return copy;\n }\n};\n__decorate([\n observable\n], GridProColumn.prototype, \"slottedAgCell\", void 0);\n__decorate([\n observable\n], GridProColumn.prototype, \"definition\", void 0);\nGridProColumn = __decorate([\n customElement({\n name: 'grid-pro-column',\n template,\n })\n], GridProColumn);\nexport { GridProColumn };\n","import { html, slotted } from '@microsoft/fast-element';\n/**\n * The Grid Pro Column Template.\n * @public\n */\nexport const ColumnTemplate = html `\n <template>\n <slot ${slotted('slottedAgCell')} @slotchange=\"${(x) => x.slottedAgCellChanged()}\"></slot>\n </template>\n`;\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Connect, Datasource, DatasourceDefaults, DatasourceEventHandler, FieldTypeEnum, logger, normaliseCriteria, ResourceType, } from '@genesislcap/foundation-comms';\nimport { attr, nullableNumberConverter, observable, volatile } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { BehaviorSubject } from 'rxjs';\nimport { datasourceEventNames, } from '../grid-pro-genesis-datasource/datasource-events.types';\nimport { dateTimeValueFormatter, dateValueFormatter, getColumnType } from '../grid-pro.definitions';\nimport { GridProRendererTypes, GridProStatusBarTypes } from '../grid-pro.types';\nimport { baseDatasourceEventNames } from './base.types';\n/**\n * The delimiter for the criteria string.\n * @public\n */\nexport const criteriaDelimiter = ';';\n/**\n * The join for the criteria string.\n * @public\n */\nexport const criteriaJoin = ' && ';\n/**\n * The base datasource element for the grid-pro element.\n * @public\n *\n * @fires base-datasource-error - Fired when a datasource error is reported\n * @fires datasource-error - Fired when a datasource error occurs (for grid integration)\n * @fires base-datasource-connected - Fired when error state is cleared after connection succeeds\n * @fires datasource-loading-finished - Fired when pending stream transactions are flushed with no row changes\n * @fires datasource-no-data-available - Fired when loading finishes with an empty row set\n * @fires datasource-data-changed - Fired when row data changes from applied stream transactions\n */\nexport class GenesisGridDatasourceElement extends DatasourceEventHandler(FoundationElement) {\n constructor() {\n super(...arguments);\n /**\n * Request a snapshot from the server.\n * @remarks Defaults to false.\n */\n this.isSnapshot = false;\n /**\n * Maximum number of rows to be returned as part of the initial message, and as part of any additional MORE_ROWS messages.\n * @remarks This will not affect the number of rows displayed. Defaults to 250.\n */\n this.maxRows = DatasourceDefaults.MAX_ROWS_250;\n /**\n * Maximum number of rows to track as part of a client \"view\".\n * @remarks DATASERVER only. Defaults to 1000.\n */\n this.maxView = DatasourceDefaults.MAX_VIEW_1000;\n /**\n * If true, when the maximum number of rows defined in max-view is reached, the Data Server will start discarding the oldest rows (in terms of timestamp) and sending newer rows.\n * @remarks DATASERVER only. If false, the updates in the server will be sent to the front end regardless of order. Note that this will only update the UI; no changes will be performed in the database. Defaults to false.\n */\n this.movingView = false;\n /**\n * Option that changes the Data Server index iteration.\n * @remarks DATASERVER only. For example, if you are using the default index, the query will return rows in order from the newest database records to the oldest. Defaults to false.\n */\n this.reverse = false;\n // REQUEST_SERVER only\n /**\n * Disables polling if set to true (data updates for the grid will not be fetched automatically).\n * @remarks REQUEST_SERVER only. Defaults to false.\n */\n this.disablePolling = false;\n /**\n * The offset for pagination in REQUEST_SERVER scenarios.\n * @remarks REQUEST_SERVER only.\n */\n this.offset = DatasourceDefaults.DEFAULT_REQ_REP_OFFSET;\n /**\n * Custom polling frequency (in milliseconds) for a Request Server resource.\n * @remarks REQUEST_SERVER only. Note that this option only works with Request Server resources; if your resource is a Data Server query, your grid is updated in real time. Defaults to 5000ms.\n */\n this.pollingInterval = DatasourceDefaults.REQ_REP_POLLING_INTERVAL_MS;\n /**\n * Array of event names that will trigger a poll when received as commit responses.\n * @remarks REQUEST_SERVER only.\n */\n this.pollTriggerEvents = [];\n /**\n * Attribute to set whether the REQUEST object should be automatically set up.\n * @remarks Defaults to `true`. Only applies to REQUEST_SERVER (REQ-REP) resources.\n * @privateRemarks To avoid breaking changes for now, once V15 is out this will be removed and the default behavior will be the same as `false` here.\n */\n this.requestAutoSetup = true;\n /**\n * Attribute to set whether the datasource should restart when it reconnects.\n * @remarks Defaults to `true`.\n * @privateRemarks This attribute is shared across all datasources to ensure consistent behavior.\n */\n this.restartOnReconnection = true;\n this.criteriaFromFilters = new Map();\n this.update = new BehaviorSubject(new Map());\n }\n /**\n * Returns the `row-id` attribute, depending on the resource type.\n * @remarks Will favour the `row-id` attribute if set.\n * @internal\n */\n get rowId() {\n if (this.rowIdAttr)\n return this.rowIdAttr;\n if (this.isRequestServer)\n return DatasourceDefaults.REQUEST_SERVER_ROW_ID;\n return DatasourceDefaults.DATASERVER_ROW_ID;\n }\n /**\n * Returns whether the `row-id` attribute is the default one, depending on the resource type.\n * @internal\n */\n get hasDefaultRowId() {\n return (!this.rowIdAttr ||\n this.rowIdAttr === DatasourceDefaults.REQUEST_SERVER_ROW_ID ||\n this.rowIdAttr === DatasourceDefaults.DATASERVER_ROW_ID);\n }\n get defaultRowIdByResourceType() {\n return this.isRequestServer\n ? DatasourceDefaults.REQUEST_SERVER_ROW_ID\n : DatasourceDefaults.DATASERVER_ROW_ID;\n }\n datasourceOptions() {\n return {\n // Common between DATASERVER and REQUEST_SERVER (REQ-REP)\n criteria: this.buildCriteria(),\n isSnapshot: this.isSnapshot,\n maxRows: +this.maxRows,\n orderBy: this.orderBy,\n resourceName: this.resourceName,\n viewNumber: +this.viewNumber,\n // DATASERVER only\n fields: this.fields,\n maxView: +this.maxView,\n movingView: this.movingView,\n reverse: this.reverse,\n // REQUEST_SERVER only\n disablePolling: this.disablePolling,\n offset: this.offset,\n pollingInterval: this.pollingInterval,\n pollTriggerEvents: this.pollTriggerEvents,\n request: this.request,\n requestAutoSetup: this.requestAutoSetup,\n };\n }\n buildCriteria() {\n var _a;\n const initialCriteria = ((_a = this.criteria) === null || _a === void 0 ? void 0 : _a.split(criteriaDelimiter)) || [];\n const criteria = initialCriteria.concat(Array.from(this.criteriaFromFilters.values()));\n const normalisedCriteria = normaliseCriteria(criteria.join(criteriaJoin), criteriaDelimiter);\n return normalisedCriteria ? normalisedCriteria : undefined;\n }\n setFilter(fieldName, newFilter) {\n this.criteriaFromFilters.set(fieldName, newFilter);\n this.update.next(this.criteriaFromFilters);\n }\n removeFilter(fieldName) {\n this.criteriaFromFilters.delete(fieldName);\n this.update.next(this.criteriaFromFilters);\n }\n get isRequestServer() {\n var _a;\n return ((_a = this.datasource.status) === null || _a === void 0 ? void 0 : _a.type) === ResourceType.REQUEST_SERVER;\n }\n // protected isRequestServer = false;\n datasourceStatusChanged(prev, next) {\n // this.isRequestServer = next.type === ResourceType.REQUEST_SERVER;\n // TODO: this is not triggered after first init :(\n }\n /**\n * Handles errors and emits appropriate error events.\n * @param errors - The error message or array of error messages\n * @param type - The type of error that occurred\n * @public\n */\n handleErrors(errors, type = 'unknown') {\n let message;\n if (Array.isArray(errors)) {\n const stringArray = errors.map((item) => {\n if (typeof item === 'string') {\n return item;\n }\n else if (typeof item === 'object' && item !== null && 'TEXT' in item) {\n return item.TEXT;\n }\n else {\n return String(item);\n }\n });\n message = stringArray.join(', ');\n }\n else if (typeof errors === 'string') {\n message = errors;\n }\n else {\n message = String(errors);\n }\n if (message) {\n logger.error(`${type}: ${message}`);\n // Emit both the old event for backward compatibility and the new event for grid handling\n this.$emit(baseDatasourceEventNames.error, { message, type });\n this.$emit(datasourceEventNames.error, { message, type });\n }\n }\n /**\n * Clears error state and emits connected event.\n * @public\n */\n clearErrors() {\n this.$emit(baseDatasourceEventNames.connected);\n }\n /**\n * Override datasource initialization to handle errors properly.\n * @internal\n */\n initializeDatasource(options_1) {\n return __awaiter(this, arguments, void 0, function* (options, fetchMeta = true, startStream = true) {\n try {\n const success = yield this.datasource.init(options, fetchMeta, startStream);\n if (success) {\n this.clearErrors();\n return true;\n }\n else {\n // Determine error type based on the initialization failure\n const resourceName = options.resourceName;\n if (!resourceName) {\n this.handleErrors('Resource name is required', 'resource-validation');\n }\n else if (!this.connect.isConnected) {\n this.handleErrors(`Unable to connect to ${this.connect.host}`, 'connection');\n }\n else {\n // Check if it's a resource validation issue\n const isValidResource = yield this.connect.getMetadata(resourceName).catch(() => null);\n if (!isValidResource) {\n this.handleErrors(`Resource '${resourceName}' does not exist on ${this.connect.host}`, 'resource-validation');\n }\n else {\n this.handleErrors(`Failed to initialize datasource for ${resourceName}`, 'unknown');\n }\n }\n return false;\n }\n }\n catch (error) {\n let errorMessage = 'Unknown initialization error';\n let errorType = 'unknown';\n if (error instanceof Error) {\n errorMessage = error.message;\n // Categorize error types based on message content\n if (errorMessage.includes('connect') || errorMessage.includes('connection')) {\n errorType = 'connection';\n }\n else if (errorMessage.includes('resource') || errorMessage.includes('does not exist')) {\n errorType = 'resource-validation';\n }\n else if (errorMessage.includes('metadata')) {\n errorType = 'metadata';\n }\n else if (errorMessage.includes('stream')) {\n errorType = 'stream';\n }\n else if (errorMessage.includes('criteria')) {\n errorType = 'criteria';\n }\n }\n this.handleErrors(errorMessage, errorType);\n return false;\n }\n });\n }\n}\n__decorate([\n Connect\n], GenesisGridDatasourceElement.prototype, \"connect\", void 0);\n__decorate([\n Datasource\n], GenesisGridDatasourceElement.prototype, \"datasource\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"deferredGridOptions\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"deferredColumnStates\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"rowDataMapper\", void 0);\n__decorate([\n attr\n], GenesisGridDatasourceElement.prototype, \"criteria\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'is-snapshot' })\n], GenesisGridDatasourceElement.prototype, \"isSnapshot\", void 0);\n__decorate([\n attr({ attribute: 'max-rows', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"maxRows\", void 0);\n__decorate([\n attr({ attribute: 'order-by' })\n], GenesisGridDatasourceElement.prototype, \"orderBy\", void 0);\n__decorate([\n attr({ attribute: 'resource-name' })\n], GenesisGridDatasourceElement.prototype, \"resourceName\", void 0);\n__decorate([\n attr({ attribute: 'view-number', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"viewNumber\", void 0);\n__decorate([\n attr\n], GenesisGridDatasourceElement.prototype, \"fields\", void 0);\n__decorate([\n attr({ attribute: 'max-view', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"maxView\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'moving-view' })\n], GenesisGridDatasourceElement.prototype, \"movingView\", void 0);\n__decorate([\n attr({ mode: 'boolean' })\n], GenesisGridDatasourceElement.prototype, \"reverse\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'disable-polling' })\n], GenesisGridDatasourceElement.prototype, \"disablePolling\", void 0);\n__decorate([\n attr({ converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"offset\", void 0);\n__decorate([\n attr({ attribute: 'polling-interval' })\n], GenesisGridDatasourceElement.prototype, \"pollingInterval\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"pollTriggerEvents\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"request\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'request-auto-setup' })\n], GenesisGridDatasourceElement.prototype, \"requestAutoSetup\", void 0);\n__decorate([\n attr({ attribute: 'row-id' })\n], GenesisGridDatasourceElement.prototype, \"rowIdAttr\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'restart-on-reconnection' })\n], GenesisGridDatasourceElement.prototype, \"restartOnReconnection\", void 0);\n__decorate([\n volatile\n], GenesisGridDatasourceElement.prototype, \"isRequestServer\", null);\n/**\n * The operation type for the {@link GridProBaseDatasource.mapTransaction} method.\n * @internal\n */\nexport var OperationType;\n(function (OperationType) {\n OperationType[\"Add\"] = \"add\";\n OperationType[\"Update\"] = \"update\";\n OperationType[\"Remove\"] = \"remove\";\n})(OperationType || (OperationType = {}));\nexport class GridProBaseDatasource extends GenesisGridDatasourceElement {\n constructor() {\n super(...arguments);\n this.dataSubWasLoggedOff = false;\n this.keepColDefsOnClearRowData = false;\n this.rowData = new Map();\n this.transactionData = {\n add: [],\n remove: [],\n update: [],\n };\n this._isDisconnected = false;\n }\n subscribeToConnection() {\n var _a;\n if (this.connect && this.connect.isConnected$) {\n (_a = this.connectionSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.connectionSub = this.connect.isConnected$.subscribe((isConnected) => {\n if (isConnected && this.isDisconnected()) {\n this.setDisconnected(false);\n if (this.restartOnReconnection) {\n this.reloadResourceData();\n }\n }\n else if (!isConnected) {\n this.setDisconnected(true);\n }\n });\n }\n }\n unsubscribeFromConnection() {\n var _a;\n (_a = this.connectionSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.connectionSub = undefined;\n }\n generateColumnDefsFromMetadata(fieldsMetadata, getFilterParamsByFieldType, getFilterByFieldType) {\n return fieldsMetadata === null || fieldsMetadata === void 0 ? void 0 : fieldsMetadata.flatMap((field) => {\n const colDefBase = {};\n colDefBase.filterParams = getFilterParamsByFieldType(field);\n switch (field.type) {\n case FieldTypeEnum.STRING:\n colDefBase.cellEditor = GridProRendererTypes.stringEditor;\n break;\n case FieldTypeEnum.NUMBER:\n colDefBase.cellEditor = GridProRendererTypes.numberEditor;\n break;\n case FieldTypeEnum.BOOLEAN:\n colDefBase.cellRenderer = GridProRendererTypes.boolean;\n colDefBase.cellEditor = GridProRendererTypes.boolean;\n break;\n case FieldTypeEnum.DATE:\n colDefBase.valueFormatter = dateValueFormatter;\n colDefBase.cellEditor = GridProRendererTypes.dateEditor;\n break;\n case FieldTypeEnum.DATETIME:\n colDefBase.valueFormatter = dateTimeValueFormatter;\n colDefBase.cellEditor = GridProRendererTypes.dateEditor;\n colDefBase.cellEditorParams = {\n withTime: true,\n };\n break;\n case FieldTypeEnum.ENUM:\n if (field.enumOptions) {\n colDefBase.cellEditor = GridProRendererTypes.selectEditor;\n colDefBase.cellEditorParams = {\n values: field.enumOptions.map((option) => ({ value: option, label: option })),\n valueField: 'value',\n labelField: 'label',\n };\n }\n else {\n logger.warn(`No enumOptions found for field ${field.name}. Default cell editor applied.`);\n }\n break;\n default:\n break;\n }\n if (this.fields && !this.fields.includes(field.name)) {\n return [];\n }\n return Object.assign({ field: field.name, type: getColumnType(field.type), filter: getFilterByFieldType(field.type) }, colDefBase);\n });\n }\n handleStreamInserts(insertedRows, addIndex = 0) {\n // Create a local counter for the insertion index when we need to do sequential inserts\n let currentAddIndex = addIndex;\n insertedRows === null || insertedRows === void 0 ? void 0 : insertedRows.forEach((insertData) => {\n const rowId = insertData[this.rowId];\n if (!rowId) {\n logger.warn('Attempted to insert row without valid rowId', insertData);\n return;\n }\n const existsInInternalState = this.rowData.has(rowId);\n if (existsInInternalState || this.dataSubWasLoggedOff) {\n const existingData = this.rowData.get(rowId);\n const updatedRow = Object.assign(Object.assign({}, existingData), insertData);\n this.transactionData.update.push(updatedRow);\n this.rowData.set(rowId, updatedRow);\n }\n else {\n this.transactionData.add.push(insertData);\n // Use the current add index for this insertion\n this.transactionData.addIndex = currentAddIndex;\n this.rowData.set(rowId, insertData);\n // Only increment the index if we're not inserting at the beginning (addIndex > 0)\n // This ensures rows are inserted in sequence when appending to the end of the grid\n if (addIndex > 0) {\n // Increment for the next insertion\n currentAddIndex += 1;\n }\n }\n });\n }\n handleStreamDeletes(deletedRows) {\n deletedRows === null || deletedRows === void 0 ? void 0 : deletedRows.forEach((deleteData) => {\n if (this.hasDefaultRowId || this.isRequestServer) {\n this.transactionData.remove.push({ [this.rowId]: deleteData[this.rowId] });\n }\n else {\n const rowToBeDeleted = Object.values(Object.fromEntries(this.rowData)).find((obj) => obj[this.defaultRowIdByResourceType] === deleteData[this.defaultRowIdByResourceType]);\n this.transactionData.remove.push({ [this.rowId]: rowToBeDeleted[this.rowId] });\n }\n this.rowData.delete(deleteData[this.rowId]);\n });\n }\n handleStreamUpdates(updatedRows) {\n updatedRows === null || updatedRows === void 0 ? void 0 : updatedRows.forEach((updateData) => {\n let updatedRow;\n if (this.hasDefaultRowId || this.isRequestServer) {\n const rowToBeUpdated = this.rowData.get(updateData[this.rowId]);\n updatedRow = Object.assign(Object.assign({}, rowToBeUpdated), updateData);\n this.transactionData.update.push(updatedRow);\n }\n else {\n const rowToBeUpdated = Object.values(Object.fromEntries(this.rowData)).find((obj) => obj[this.defaultRowIdByResourceType] === updateData[this.defaultRowIdByResourceType]);\n updatedRow = Object.assign(Object.assign({}, rowToBeUpdated), updateData);\n this.transactionData.update.push(updatedRow);\n }\n this.rowData.set(updateData[this.rowId], updatedRow);\n });\n }\n applyAllTransactions() {\n var _a, _b, _c, _d, _e, _f;\n if (!((_a = this.transactionData.add) === null || _a === void 0 ? void 0 : _a.length) &&\n !((_b = this.transactionData.update) === null || _b === void 0 ? void 0 : _b.length) &&\n !((_c = this.transactionData.remove) === null || _c === void 0 ? void 0 : _c.length)) {\n this.$emit(datasourceEventNames.loadingFinished);\n if (this.rowData.size === 0) {\n this.$emit(datasourceEventNames.noDataAvailable);\n }\n return;\n }\n if (((_d = this.transactionData.add) === null || _d === void 0 ? void 0 : _d.length) > 0) {\n this.applyMappedTransaction({\n add: this.transactionData.add,\n addIndex: this.transactionData.addIndex,\n }, OperationType.Add);\n }\n if (((_e = this.transactionData.remove) === null || _e === void 0 ? void 0 : _e.length) > 0) {\n this.applyMappedTransaction({ remove: this.transactionData.remove }, OperationType.Remove);\n }\n if (((_f = this.transactionData.update) === null || _f === void 0 ? void 0 : _f.length) > 0) {\n this.applyMappedTransaction({ update: this.transactionData.update }, OperationType.Update);\n }\n }\n applyMappedTransaction(transaction, operation) {\n const mappedTransaction = this.mapTransaction(transaction, [operation]);\n this.$emit(datasourceEventNames.dataChanged, {\n changes: mappedTransaction,\n });\n }\n applyTransaction(transaction) {\n throw new Error('Method not implemented.');\n }\n /**\n * Maps the transaction data to the row data mapper function, if it exists.\n * @param transaction - The transaction data to be mapped.\n * @param operations - The operations to be mapped. Can be 'add', 'update' or 'remove'.\n * @returns The mapped transaction (if the row data mapper function exists), or the original transaction.\n */\n mapTransaction(transaction, operations = Object.values(OperationType)) {\n if (!this.rowDataMapper) {\n return transaction;\n }\n const mappedTransaction = {};\n if (operations.includes(OperationType.Add)) {\n mappedTransaction.add = this.rowDataMapper(transaction.add, this.rowData);\n }\n if (operations.includes(OperationType.Remove)) {\n mappedTransaction.remove = this.rowDataMapper(transaction.remove, this.rowData);\n }\n if (operations.includes(OperationType.Update)) {\n mappedTransaction.update = this.rowDataMapper(transaction.update, this.rowData);\n }\n if (transaction.addIndex !== undefined) {\n mappedTransaction.addIndex = transaction.addIndex;\n }\n return mappedTransaction;\n }\n loadMore() {\n throw new Error('loadMore() method must be implemented by subclass');\n }\n restart() {\n throw new Error('restart() method must be implemented by subclass');\n }\n reloadResourceData() {\n throw new Error('reloadResourceData() method must be implemented by subclass');\n }\n destroy() {\n throw new Error('destroy() method must be implemented by subclass');\n }\n /**\n * Sets the disconnected state and emits appropriate events.\n * @param disconnected - true to set, false to remove\n */\n setDisconnected(disconnected) {\n this._isDisconnected = disconnected;\n if (disconnected) {\n this.$emit(datasourceEventNames.error, {\n message: 'Datasource disconnected',\n type: 'connection',\n });\n }\n else {\n this.clearErrors();\n }\n }\n /**\n * Returns true if the datasource is disconnected.\n */\n isDisconnected() {\n return this._isDisconnected;\n }\n /**\n * Helper function to extract configuration for status bar actions\n * @internal\n */\n getStatusBarActionConfig(configValue) {\n if (typeof configValue === 'boolean') {\n return { enabled: configValue };\n }\n if (typeof configValue === 'object' && configValue !== null) {\n return {\n enabled: true,\n config: configValue,\n };\n }\n return { enabled: false };\n }\n /**\n * Gets datasource-specific status bar component configurations.\n * This method should be called by the grid to get status bar panels specific to this datasource.\n * @public\n */\n getDatasourceStatusBarPanels(isServerSide, statusBarConfig) {\n var _a, _b, _c, _d, _e, _f;\n const additionalPanels = [];\n // Extract loadMore configuration\n const loadMoreConfig = this.getStatusBarActionConfig(statusBarConfig === null || statusBarConfig === void 0 ? void 0 : statusBarConfig.loadMore);\n // Add load more button if enabled and not server-side\n if (loadMoreConfig.enabled && !isServerSide) {\n const loadMoreParams = {};\n // Use custom callback if provided, otherwise leave undefined for default behavior\n if ((_a = loadMoreConfig.config) === null || _a === void 0 ? void 0 : _a.onLoadMore) {\n loadMoreParams.onLoadMore = loadMoreConfig.config.onLoadMore;\n }\n else {\n loadMoreParams.onLoadMore = this.loadMore.bind(this);\n }\n // Add custom styling parameters\n if ((_b = loadMoreConfig.config) === null || _b === void 0 ? void 0 : _b.appearance) {\n loadMoreParams.appearance = loadMoreConfig.config.appearance;\n }\n // Add tooltip - use custom tooltip if provided, otherwise use default\n loadMoreParams.tooltip = ((_c = loadMoreConfig.config) === null || _c === void 0 ? void 0 : _c.tooltip) || 'Load More';\n additionalPanels.push({\n statusPanel: GridProStatusBarTypes.loadMore,\n statusPanelParams: loadMoreParams,\n align: this.pagination ? 'left' : 'right',\n });\n }\n // Extract reload configuration\n const reloadConfig = this.getStatusBarActionConfig(statusBarConfig === null || statusBarConfig === void 0 ? void 0 : statusBarConfig.reload);\n // Add reload button if enabled\n if (reloadConfig.enabled) {\n const reloadParams = {};\n // Use custom callback if provided, otherwise use default datasource reload\n if ((_d = reloadConfig.config) === null || _d === void 0 ? void 0 : _d.onReload) {\n reloadParams.onReload = reloadConfig.config.onReload;\n }\n else {\n reloadParams.onReload = this.reloadResourceData.bind(this);\n }\n // Add custom styling parameters\n if ((_e = reloadConfig.config) === null || _e === void 0 ? void 0 : _e.icon) {\n reloadParams.icon = reloadConfig.config.icon;\n }\n // Add tooltip - use custom tooltip if provided, otherwise use default\n reloadParams.tooltip = ((_f = reloadConfig.config) === null || _f === void 0 ? void 0 : _f.tooltip) || 'Reload';\n additionalPanels.push({\n statusPanel: GridProStatusBarTypes.reload,\n statusPanelParams: reloadParams,\n align: 'right',\n });\n }\n return additionalPanels;\n }\n}\n","/**\n * Base datasource error event names.\n * @public\n */\nexport const baseDatasourceEventNames = {\n error: 'base-datasource-error',\n connected: 'base-datasource-connected',\n};\n","import { __decorate } from \"tslib\";\nimport { customElement } from '@microsoft/fast-element';\nimport { GridProGenesisDatasource } from '../grid-pro-genesis-datasource';\n/**\n * The Genesis Datasource element, for client-side | CSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Client-Side Row Model.\n * @public\n *\n * @fires base-datasource-error - Fired when a datasource error is reported\n * @fires datasource-error - Fired when a datasource error occurs (for grid integration)\n * @fires base-datasource-connected - Fired when error state is cleared after connection succeeds\n * @fires datasource-loading-finished - Fired when loading completes with no pending row changes\n * @fires datasource-no-data-available - Fired when the grid has no rows after load\n * @fires datasource-data-changed - Fired when row data changes from stream updates\n * @fires datasource-initialize - Fired to hand off grid options and initialization flags\n * @fires datasource-destroy - Fired when the datasource is torn down\n * @fires datasource-data-cleared - Fired when row data is cleared\n * @fires datasource-schema-updated - Fired when column metadata or defs are updated\n * @fires datasource-filters-restored - Fired when persisted filters are reapplied\n * @fires datasource-data-loaded - Fired when a data payload is loaded for the grid\n * @fires datasource-loading-started - Fired when a load or refresh starts\n * @fires datasource-more-data-available - Fired when more server rows can be requested\n * @fires datasource-ready - Fired when the host grid is ready (detail includes pagination state)\n * @fires datasource-init - Fired when initial grid data is ready for the client-side model\n * @fires more-rows-changed - Fired when MORE_ROWS availability changes\n * @fires datasource-size-changed - Fired when layout or viewport sizing affects the datasource\n */\nlet GridProClientSideDatasource = class GridProClientSideDatasource extends GridProGenesisDatasource {\n};\nGridProClientSideDatasource = __decorate([\n customElement({\n name: 'grid-pro-client-side-datasource',\n })\n], GridProClientSideDatasource);\nexport { GridProClientSideDatasource };\n","import { css, html, when, repeat } from '@microsoft/fast-element';\nimport { extractErrorMessage } from '../utils';\nexport const errorHandlerDialogStyles = css `\n .overlay {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n background-color: var(--datasource-error-background-color, var(--neutral-layer-4));\n opacity: var(--datasource-error-background-opacity, 0.5);\n z-index: 1000;\n pointer-events: auto;\n border-radius: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .dialog-container {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n z-index: 1001;\n max-width: 90vw;\n max-height: 90vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n opacity: 1 !important;\n filter: none !important;\n box-sizing: border-box;\n }\n .grid-datasource-error-dialog {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin: 0 auto;\n max-width: 600px;\n width: 100%;\n box-sizing: border-box;\n background: var(--dialog-background, #2d2533);\n box-shadow: 0 4px 32px 0 rgba(0, 0, 0, 0.45);\n overflow: visible;\n min-height: 120px;\n }\n\n .grid-datasource-error-dialog div {\n width: 600px;\n }\n\n .grid-datasource-error-dialog [slot='top'] {\n margin-bottom: 0;\n }\n\n .grid-datasource-error-dialog [slot='bottom'] {\n display: flex;\n justify-content: flex-end;\n width: 100%;\n }\n\n .error-details {\n max-height: 120px;\n overflow: auto;\n width: 100%;\n margin-top: 8px;\n }\n`;\nexport function getErrorHandlerDialogTemplate(prefix, gridErrorItems) {\n const dialogTag = `${prefix}-dialog`;\n const buttonTag = `${prefix}-button`;\n return html `\n ${when(() => gridErrorItems && gridErrorItems.length > 0, html `\n <div class=\"overlay\"></div>\n <div class=\"dialog-container\">\n <${dialogTag}\n class=\"grid-datasource-error-dialog\"\n type=\"error\"\n show-close-icon=\"false\"\n open\n >\n <h2 slot=\"top\" class=\"title\">Grid unavailable</h2>\n <div>\n <p>\n This may be due to a network, server, or configuration issue.\n </p>\n <details class=\"error-details\">\n <summary>Show details</summary>\n <ul>\n ${repeat(() => gridErrorItems, html `\n <li>\n ${(x) => extractErrorMessage(x.detail) || 'Unknown error occurred'}\n </li>\n `)}\n </ul>\n </details>\n </div>\n <div slot=\"bottom\">\n <${buttonTag} appearance=\"lightweight\" @click=${(x) => {\n var _a;\n x.hideDatasourceError();\n (_a = x.gridProDatasource) === null || _a === void 0 ? void 0 : _a.restart();\n }}>\n Reload\n </${buttonTag}>\n </div>\n </${dialogTag}>\n </div>\n `)}\n `;\n}\n","import { FieldTypeEnum } from '@genesislcap/foundation-comms';\nimport { getEnumFilterParams } from '../grid-pro.definitions';\n/**\n * Returns a filter type based on the Grid Pro field/column type.\n * @param type - The type of the field/column\n * @returns The ag-grid filter type\n */\nexport function getFilterByFieldType(type) {\n switch (type === null || type === void 0 ? void 0 : type.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'agNumberColumnFilter';\n case 'date':\n case 'datetime':\n return 'agDateColumnFilter';\n case 'enum':\n return 'agSetColumnFilter';\n default:\n return 'agTextColumnFilter';\n }\n}\n/**\n * Returns the filter params based on the Grid Pro field/column type.\n * @param field - The field metadata\n * @returns the filter params for the specified field type\n * @remarks Currently only returns a default filter params object, for all field types\n * @beta\n */\nexport function getServerSideFilterParamsByFieldType(field) {\n switch (field.type) {\n case FieldTypeEnum.BOOLEAN: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'contains',\n {\n displayKey: 'true',\n displayName: 'True',\n predicate: (_, cellValue) => cellValue === 'true' || cellValue === true,\n numberOfInputs: 0,\n },\n {\n displayKey: 'false',\n displayName: 'False',\n predicate: (_, cellValue) => cellValue === 'false' || cellValue === false,\n numberOfInputs: 0,\n },\n {\n displayKey: 'true-false',\n displayName: 'True/False',\n predicate: (_, cellValue) => cellValue === 'true' ||\n cellValue === true ||\n cellValue === 'false' ||\n cellValue === false,\n numberOfInputs: 0,\n },\n ],\n };\n }\n case FieldTypeEnum.ENUM: {\n return getEnumFilterParams(field, getFilterByFieldType(field.type));\n }\n case FieldTypeEnum.DATE:\n case FieldTypeEnum.DATETIME: {\n return {\n comparator: (filterLocalDateAtMidnight, cellValue) => {\n if (!cellValue)\n return -1;\n const cellValueTime = new Date(cellValue).setHours(0, 0, 0, 0);\n const filterValueTime = filterLocalDateAtMidnight.getTime();\n if (cellValueTime === filterValueTime) {\n return 0;\n }\n if (cellValueTime < filterValueTime) {\n return -1;\n }\n if (cellValueTime > filterValueTime) {\n return 1;\n }\n },\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n browserDatePicker: true,\n filterOptions: [\n 'equals',\n 'lessThan',\n 'greaterThan',\n 'inRange',\n {\n displayKey: 'isToday',\n displayName: 'Is today',\n numberOfInputs: 0,\n predicate: () => true,\n },\n 'blank',\n 'notBlank',\n ],\n };\n }\n case FieldTypeEnum.NUMBER: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'equals',\n 'notEqual',\n 'greaterThan',\n 'greaterThanOrEqual',\n 'lessThan',\n 'lessThanOrEqual',\n 'inRange',\n 'blank',\n 'notBlank',\n ],\n };\n }\n default: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'contains',\n 'equals',\n 'notEqual',\n {\n displayKey: 'wordStartsWith',\n displayName: 'Word starts with',\n numberOfInputs: 1,\n predicate: () => true,\n },\n 'blank',\n 'notBlank',\n ],\n };\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Auth, Connect, logger, } from '@genesislcap/foundation-comms';\nimport { UUID } from '@genesislcap/foundation-utils';\n/**\n * Base class for server-side resource datasources used in Grid Pro SSRM implementations.\n * Provides common logic for filtering, sorting, and pagination.\n *\n * @beta\n */\nexport class BaseServerSideDatasource {\n constructor(options) {\n var _a;\n this.rowData = new Map();\n /**\n * The number of rows in the grid. THIS DO NOT CONSIDER CRITERIA_MATCH scenarios.\n * @internal\n */\n this.serverRowsCount = 0;\n /**\n * The number of rows in the grid. THIS IS A LOCAL COUNT CONSIDERING CONSIDER CRITERIA_MATCH scenarios.\n * @internal\n */\n this.clientRowsCount = 0;\n this.moreRows = false;\n this.calculatedRowsCount = 0;\n this.currentSequenceId = null;\n this.reloadResourceDataFunc = options.reloadResourceDataFunc;\n this.errorHandlerFunc = options.errorHandlerFunc;\n this.onNoDataAvailableFunc = options.onNoDataAvailableFunc;\n this.resourceName = options.resourceName;\n this.resourceParams = options.resourceParams;\n this.originalCriteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n this.resourceIndexes = options.resourceIndexes;\n this.resourceColDefs = options.resourceColDefs;\n this.maxRows = options.maxRows;\n this.maxView = options.maxView;\n this.rowId = options.rowId;\n this.pagination = options.pagination;\n this.zeroBasedViewNumber = options.zeroBasedViewNumber;\n this.pagingMode = options.pagingMode;\n this.criteriaOnlyRequest = (_a = options.criteriaOnlyRequest) !== null && _a !== void 0 ? _a : false;\n }\n /**\n * Gets a resource parameter, handling both REQUEST_SERVER (DETAILS structure) and DATASERVER (flat structure)\n * @param key - The parameter key to retrieve\n * @returns The parameter value, or undefined if not found\n * @internal\n */\n getResourceParam(key) {\n var _a, _b;\n // Check if this is a REQUEST_SERVER structure with DETAILS\n if (((_a = this.resourceParams) === null || _a === void 0 ? void 0 : _a.DETAILS) && typeof this.resourceParams.DETAILS === 'object') {\n return this.resourceParams.DETAILS[key];\n }\n // Otherwise, it's a DATASERVER flat structure\n return (_b = this.resourceParams) === null || _b === void 0 ? void 0 : _b[key];\n }\n /**\n * Sets a resource parameter, handling both REQUEST_SERVER (DETAILS structure) and DATASERVER (flat structure)\n * @param key - The parameter key to set\n * @param value - The value to set\n * @internal\n */\n setResourceParam(key, value) {\n var _a;\n // Check if this is a REQUEST_SERVER structure with DETAILS\n if (((_a = this.resourceParams) === null || _a === void 0 ? void 0 : _a.DETAILS) && typeof this.resourceParams.DETAILS === 'object') {\n this.resourceParams.DETAILS[key] = value;\n }\n else {\n // Otherwise, it's a DATASERVER flat structure\n this.resourceParams[key] = value;\n }\n }\n getRows(params) {\n throw new Error('Method not implemented.');\n }\n /**\n * Handles filtering setup for server-side datasources.\n * Common logic used by both dataserver and req-rep implementations.\n */\n setupFiltering(params) {\n return __awaiter(this, void 0, void 0, function* () {\n const filterModelBeingApplied = params.request.filterModel;\n const filtersAreBeingApplied = Object.keys(filterModelBeingApplied).length > 0;\n const filtersAreGettingCleaned = Object.keys(filterModelBeingApplied).length === 0;\n const filterModelBeingAppliedDiffersFromCurrent = JSON.stringify(filterModelBeingApplied) !== JSON.stringify(this.currentFilterModel);\n if (filterModelBeingAppliedDiffersFromCurrent || filtersAreBeingApplied) {\n if (filtersAreGettingCleaned && this.currentFilterModel) {\n this.currentFilterModel = null;\n this.setResourceParam('CRITERIA_MATCH', this.originalCriteriaMatch);\n yield this.refreshDatasource(params);\n return;\n }\n else if (filterModelBeingAppliedDiffersFromCurrent && filtersAreBeingApplied) {\n this.currentFilterModel = filterModelBeingApplied;\n this.setResourceParam('CRITERIA_MATCH', this.buildCriteriaMatchFromFilters());\n yield this.refreshDatasource(params);\n return;\n }\n }\n });\n }\n /**\n * Legacy method that combines filtering and sorting.\n * Kept for backward compatibility. New implementations should use setupFiltering and setupSorting directly.\n * @deprecated Use setupFiltering() and setupSorting() separately instead\n */\n setupFilteringAndSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n });\n }\n destroy() {\n this.rowData = new Map();\n this.clientRowsCount = 0;\n this.calculatedRowsCount = 0;\n this.serverRowsCount = 0;\n this.currentSequenceId = 0;\n this.moreRows = false;\n this.sourceRef = undefined;\n this.lastSuccessRowData = undefined;\n }\n refreshDatasource(params) {\n return __awaiter(this, void 0, void 0, function* () {\n this.destroy();\n this.updateResourceParams(params);\n yield this.reloadResourceDataFunc({\n criteria: this.getResourceParam('CRITERIA_MATCH'),\n orderBy: this.getResourceParam('ORDER_BY'),\n reverse: this.getResourceParam('REVERSE'),\n });\n });\n }\n updateResourceParams(params) {\n if (params.criteria !== undefined) {\n this.originalCriteriaMatch = params.criteria;\n this.setResourceParam('CRITERIA_MATCH', this.buildCriteriaMatchFromFilters());\n }\n if (params.orderBy !== undefined) {\n this.setResourceParam('ORDER_BY', params.orderBy);\n }\n if (params.reverse !== undefined) {\n this.setResourceParam('REVERSE', params.reverse);\n }\n }\n getOrderByAndToBeSortedColIds(map, searchValue) {\n for (const [key, value] of map.entries()) {\n const searchIndex = value.findIndex((x) => x === searchValue);\n if (searchIndex !== -1) {\n const copy = [...value];\n const toBeSorted = copy.splice(searchIndex, 1);\n return { orderBy: key, toBeSorted };\n }\n }\n }\n buildCriteriaMatchFromFilters() {\n this.setResourceParam('CRITERIA_MATCH', this.originalCriteriaMatch);\n let criteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n if (criteriaMatch && typeof criteriaMatch === 'string') {\n criteriaMatch = criteriaMatch.split(';');\n this.setResourceParam('CRITERIA_MATCH', criteriaMatch);\n }\n if (!criteriaMatch) {\n criteriaMatch = [];\n this.setResourceParam('CRITERIA_MATCH', criteriaMatch);\n }\n const criteria = criteriaMatch.concat(this.criteriaFromFilters());\n return criteria.join(' && ');\n }\n criteriaFromFilters() {\n const filters = [];\n this.getFiltersByType('text').forEach((k) => {\n if (!this.currentFilterModel[k].filter &&\n (this.currentFilterModel[k].type === 'false' || this.currentFilterModel[k].type === 'true')) {\n filters.push(`${k} == ${this.currentFilterModel[k].type}`);\n }\n else {\n switch (this.currentFilterModel[k].type) {\n case 'blank':\n filters.push(`(${k} == '' || ${k} == null)`);\n break;\n case 'contains':\n filters.push(`Expr.containsIgnoreCase(${k}, '${this.currentFilterModel[k].filter}')`);\n break;\n case 'equals':\n filters.push(`${k} == '${this.currentFilterModel[k].filter}'`);\n break;\n case 'notBlank':\n filters.push(`(${k} != '' && ${k} != null)`);\n break;\n case 'notEqual':\n filters.push(`${k} != '${this.currentFilterModel[k].filter}'`);\n break;\n case 'wordStartsWith':\n filters.push(`Expr.containsWordsStartingWithIgnoreCase(${k}, '${this.currentFilterModel[k].filter}')`);\n break;\n }\n }\n });\n // TODO: Handle multi filters if we decide we want to use them in SSRM\n // Handle set filters (typically used for enum fields with ag-set-column-filter)\n this.getFiltersByType('set').forEach((k) => {\n var _a, _b, _c;\n const model = (_a = this.currentFilterModel) === null || _a === void 0 ? void 0 : _a[k];\n const selectedValues = ((_b = model === null || model === void 0 ? void 0 : model.values) !== null && _b !== void 0 ? _b : []);\n if (!selectedValues || selectedValues.length === 0) {\n // Nothing selected means no additional criteria\n return;\n }\n // Try to detect \"all values selected\" using VALID_VALUES from metadata.\n // In that case we don't want to send any criteria, as it would be equivalent\n // to no filter at all.\n const colMeta = (_c = this.resourceColDefs) === null || _c === void 0 ? void 0 : _c.find((o) => o.NAME === k);\n let allValues;\n if (colMeta === null || colMeta === void 0 ? void 0 : colMeta.VALID_VALUES) {\n try {\n allValues = Array.isArray(colMeta.VALID_VALUES)\n ? colMeta.VALID_VALUES\n : colMeta.VALID_VALUES.split('|');\n }\n catch (_d) {\n allValues = undefined;\n }\n }\n if (allValues &&\n allValues.length === selectedValues.length &&\n allValues.every((v) => selectedValues.includes(v))) {\n // All enum options are selected – skip adding criteria for this column\n return;\n }\n const orConditions = selectedValues.map((val) => {\n const safeVal = String(val).replace(/'/g, \"\\\\'\");\n return `${k} == '${safeVal}'`;\n });\n if (orConditions.length > 0) {\n filters.push(`(${orConditions.join(' || ')})`);\n }\n });\n this.getFiltersByType('number').forEach((k) => {\n const value = this.currentFilterModel[k].filter;\n const valueTwo = this.currentFilterModel[k].filterTo;\n switch (this.currentFilterModel[k].type) {\n case 'equals':\n !isNaN(value) && filters.push(`${k} == ${value}`);\n break;\n case 'notEqual':\n !isNaN(value) && filters.push(`${k} != ${value}`);\n break;\n case 'greaterThan':\n !isNaN(value) && filters.push(`${k} > ${value}`);\n break;\n case 'greaterThanOrEqual':\n !isNaN(value) && filters.push(`${k} >= ${value}`);\n break;\n case 'lessThan':\n !isNaN(value) && filters.push(`${k} < ${value}`);\n break;\n case 'lessThanOrEqual':\n !isNaN(value) && filters.push(`${k} <= ${value}`);\n break;\n case 'inRange':\n !isNaN(value) &&\n !isNaN(valueTwo) &&\n filters.push(`${k} >= ${value} && ${k} <= ${valueTwo}`);\n break;\n case 'blank':\n filters.push(`${k} == 0`);\n break;\n case 'notBlank':\n filters.push(`${k} != 0`);\n break;\n }\n });\n this.getFiltersByType('date').forEach((k) => {\n var _a, _b;\n const dateFrom = (_a = this.currentFilterModel[k].dateFrom) === null || _a === void 0 ? void 0 : _a.replace(/-/g, '').replace('T', '-').split(' ')[0];\n const dateTo = (_b = this.currentFilterModel[k].dateTo) === null || _b === void 0 ? void 0 : _b.replace(/-/g, '').replace('T', '-').split(' ')[0];\n switch (this.currentFilterModel[k].type) {\n case 'equals':\n filters.push(`Expr.dateIsEqual(${k}, '${dateFrom}')`);\n break;\n case 'lessThan':\n filters.push(`Expr.dateIsBefore(${k}, '${dateFrom}')`);\n break;\n case 'greaterThan':\n filters.push(`Expr.dateIsAfter(${k}, '${dateFrom}')`);\n break;\n case 'inRange':\n filters.push(`Expr.dateIsAfter(${k}, '${dateFrom}') && Expr.dateIsBefore(${k}, '${dateTo}')`);\n break;\n case 'isToday':\n const now = new Date();\n const year = now.getFullYear();\n const month = (now.getMonth() + 1).toString().padStart(2, '0');\n const day = now.getDate().toString().padStart(2, '0');\n const todayStr = `${year}-${month}-${day} 00:00:00`;\n filters.push(`Expr.dateIsEqual(${k}, '${todayStr}')`);\n break;\n case 'blank':\n filters.push(`${k} == null`);\n break;\n case 'notBlank':\n filters.push(`${k} != null`);\n break;\n }\n });\n return filters;\n }\n getFiltersByType(filterType) {\n var _a;\n return Object.keys((_a = this.currentFilterModel) !== null && _a !== void 0 ? _a : {})\n .filter((k) => this.resourceColDefs.findIndex((o) => o.NAME === k) !== -1)\n .filter((k) => this.currentFilterModel[k].filterType === filterType);\n }\n getPageNumber(start, recordsPerPage, totalRecords, zeroBasedViewNumber = true) {\n if (totalRecords !== undefined && start > totalRecords) {\n start = Math.floor((totalRecords - 1) / recordsPerPage) * recordsPerPage + 1;\n }\n const currentPageIndex = Math.ceil(start / recordsPerPage);\n return zeroBasedViewNumber ? currentPageIndex : currentPageIndex + 1;\n }\n getCorrectRowCount(params) {\n const currentLastRowNumber = params.request.endRow;\n this.calculatedRowsCount = this.clientRowsCount || currentLastRowNumber;\n const defaultCount = Math.min(this.serverRowsCount, this.maxView);\n let rowCount;\n const criteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n if (this.pagination) {\n rowCount = !criteriaMatch ? Math.min(this.serverRowsCount, this.maxView) : undefined;\n if (criteriaMatch) {\n rowCount = defaultCount;\n }\n return rowCount;\n }\n if (currentLastRowNumber === this.serverRowsCount) {\n rowCount = this.serverRowsCount;\n }\n else if (currentLastRowNumber > this.maxView ||\n currentLastRowNumber > this.calculatedRowsCount) {\n rowCount = Math.min(defaultCount, this.calculatedRowsCount);\n }\n else if (!this.moreRows && this.serverRowsCount > this.calculatedRowsCount) {\n rowCount = this.calculatedRowsCount;\n }\n return rowCount;\n }\n get isNotFirstViewNumber() {\n return this.zeroBasedViewNumber ? this.currentSequenceId > 0 : this.currentSequenceId > 1;\n }\n /** Completes an SSRM request with zero rows and invokes `onNoDataAvailableFunc` on the first block only. @internal */\n completeEmptyResult(params) {\n this.rowData = new Map();\n const successRowData = { rowData: [], rowCount: 0 };\n params.success(successRowData);\n this.notifyNoDataAvailableIfEmpty(params, successRowData);\n }\n /** Invokes `onNoDataAvailableFunc` when the first SSRM block has no rows. @internal */\n notifyNoDataAvailableIfEmpty(params, successRowData) {\n var _a;\n const rowDataEmpty = !((_a = successRowData.rowData) === null || _a === void 0 ? void 0 : _a.length);\n const atStart = params.request.startRow === 0;\n if (atStart && rowDataEmpty) {\n this.notifyNoDataAvailable();\n }\n }\n notifyNoDataAvailable() {\n var _a;\n (_a = this.onNoDataAvailableFunc) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n /**\n * Determines the effective paging mode based on criteriaOnlyRequest availability and user settings\n */\n getEffectivePagingMode() {\n // If user explicitly set a paging mode\n if (this.pagingMode) {\n // If criteriaOnlyRequest is not available but user wants offsetBased, warn and use viewBased\n if (this.pagingMode === 'offsetBased' && !this.criteriaOnlyRequest) {\n logger.warn('offsetBased paging mode requires criteriaOnlyRequest support. Falling back to viewBased mode.');\n return 'viewBased';\n }\n return this.pagingMode;\n }\n // Auto-determine based on criteriaOnlyRequest availability\n return this.criteriaOnlyRequest ? 'offsetBased' : 'viewBased';\n }\n}\n__decorate([\n Auth\n], BaseServerSideDatasource.prototype, \"auth\", void 0);\n__decorate([\n Connect\n], BaseServerSideDatasource.prototype, \"connect\", void 0);\n__decorate([\n UUID\n], BaseServerSideDatasource.prototype, \"uuid\", void 0);\n","import { __awaiter } from \"tslib\";\nimport { MessageType, dataServerResultFilter, logger, } from '@genesislcap/foundation-comms';\nimport { DOM } from '@microsoft/fast-element';\nimport { getAvailableIndexes, getAvailableIndexFields } from '../utils';\nimport { BaseServerSideDatasource } from './server-side.resource-base';\n/**\n * The DATASERVER IServerSideDatasource implementation, used for SSRM (Server-Side Row Model) in the grid.\n * @beta\n */\nexport class DataserverServerSideDatasource extends BaseServerSideDatasource {\n constructor(options) {\n super(options);\n this.createDataserverStreamFunc = options.createDataserverStreamFunc;\n }\n refreshDatasource(params) {\n const _super = Object.create(null, {\n refreshDatasource: { get: () => super.refreshDatasource }\n });\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n (_a = this.dataserverStreamSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.dataserverStreamSubscription = undefined;\n yield _super.refreshDatasource.call(this, params);\n });\n }\n getRows(params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Use separated filtering and sorting setup\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {\n params.success(this.lastSuccessRowData);\n return;\n }\n if (!this.dataserverStream) {\n this.dataserverStream = yield this.createDataserverStreamFunc(this.resourceParams);\n }\n if (this.currentSequenceId >= 1 &&\n (this.moreRows ||\n params.request.startRow >= Number(this.maxRows) ||\n params.request.startRow === 0)) {\n if (this.pagination) {\n this.resourceParams.VIEW_NUMBER = this.getPageNumber(params.request.startRow, this.maxRows, this.maxView, this.zeroBasedViewNumber);\n // if (this.resourceParams.VIEW_NUMBER === 1) {\n // await this.refreshDatasource(params);\n // return;\n // }\n }\n this.connect.getMoreRows(this.sourceRef, this.resourceParams.VIEW_NUMBER);\n }\n let applyResult = true;\n this.dataserverStreamSubscription = this.dataserverStream.subscribe((dataserverResult) => {\n if (applyResult) {\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n // TODO: this is a bit of hack, due GSF not returning a different ROWS_COUNT when there is a CRITERIA_MATCH\n if (this.resourceParams.CRITERIA_MATCH && this.pagination) {\n const updatedInfo = yield this.connect.snapshot(this.resourceName, {\n MAX_ROWS: this.maxView,\n MAX_VIEW: this.maxView,\n CRITERIA_MATCH: this.resourceParams.CRITERIA_MATCH,\n });\n if (!updatedInfo.ROW && !updatedInfo.ROWS_COUNT) {\n logger.warn('No data returned when criteria is applied.');\n this.serverRowsCount = 0;\n this.clientRowsCount = 0;\n }\n else {\n this.serverRowsCount = this.resourceParams.CRITERIA_MATCH\n ? updatedInfo.ROW.length\n : updatedInfo.ROWS_COUNT;\n }\n }\n this.applyServerSideData(params, dataserverResult);\n applyResult = false;\n }));\n }\n });\n });\n }\n applyServerSideData(params, result) {\n var _a;\n const messageType = result.MESSAGE_TYPE;\n if (messageType &&\n (messageType === MessageType.LOGOFF_ACK || messageType === MessageType.MSG_NACK)) {\n // Trigger error dialog for connection/authentication errors\n if (this.errorHandlerFunc) {\n const errorMessage = messageType === MessageType.LOGOFF_ACK\n ? `Connection lost to ${this.resourceName}`\n : `Authentication failed for ${this.resourceName}`;\n this.errorHandlerFunc(errorMessage, 'connection');\n }\n params.fail();\n return;\n }\n this.moreRows = result.MORE_ROWS;\n if (result.ROW) {\n const nextMessage = dataServerResultFilter(result);\n this.handleCurrentStreamLoad(nextMessage);\n }\n else {\n this.completeEmptyResult(params);\n return;\n }\n this.currentSequenceId = result.SEQUENCE_ID;\n if (this.currentSequenceId === 1) {\n this.sourceRef = result.SOURCE_REF;\n if (this.serverRowsCount === 0) {\n this.serverRowsCount = (_a = result.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;\n }\n }\n const successRowData = {\n rowData: Array.from(this.rowData.values()),\n };\n successRowData.rowCount = this.getCorrectRowCount(params);\n this.lastSuccessRowData = successRowData;\n params.success(successRowData);\n this.notifyNoDataAvailableIfEmpty(params, successRowData);\n }\n /**\n * Dataserver-specific sorting setup that validates columns are part of an index.\n * This is required because dataserver needs indexed columns for efficient sorting.\n */\n setupSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const toBeAppliedSortModel = params.request.sortModel;\n if (((_a = this.currentSortModel) === null || _a === void 0 ? void 0 : _a.length) !== toBeAppliedSortModel.length ||\n toBeAppliedSortModel.length > 0) {\n if (toBeAppliedSortModel.length === 0 && this.currentSortModel) {\n this.calculatedRowsCount = 0;\n this.currentSortModel = null;\n this.resourceParams.ORDER_BY = null;\n this.resourceParams.REVERSE = null;\n yield this.refreshDatasource(params);\n return;\n }\n else if (toBeAppliedSortModel.length > 0) {\n const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user\n const sortTypeBeingApplied = toBeAppliedSortModel[0].sort;\n const orderByAndToBeSortedColIds = this.getOrderByAndToBeSortedColIds(this.resourceIndexes, coldIdBeingSorted);\n if (!orderByAndToBeSortedColIds) {\n this.calculatedRowsCount = 0;\n const availableIndexes = getAvailableIndexes(this.resourceIndexes);\n const availableIndexFields = getAvailableIndexFields(this.resourceIndexes);\n logger.warn(`The FIELD/column (${coldIdBeingSorted}) being sorted is not part of an INDEX, required for the [orderBy] operation. See https://learn.genesis.global/docs/database/data-types/index-entities/`);\n logger.debug('Available indexes:', availableIndexes);\n logger.debug('Columns that can be sorted with the available indexes:', availableIndexFields);\n params.fail();\n return;\n }\n else if (JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel)) {\n this.currentSortModel = toBeAppliedSortModel;\n this.resourceParams.ORDER_BY = orderByAndToBeSortedColIds.orderBy;\n this.resourceParams.REVERSE = sortTypeBeingApplied === 'desc' ? true : false;\n yield this.refreshDatasource(params);\n return;\n }\n }\n }\n });\n }\n destroy() {\n const _super = Object.create(null, {\n destroy: { get: () => super.destroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.dataserverStream = undefined;\n (_a = this.dataserverStreamSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.dataserverStreamSubscription = undefined;\n yield _super.destroy.call(this);\n });\n }\n handleCurrentStreamLoad(result) {\n var _a, _b;\n if (!result)\n return;\n const rows = new Map();\n (_a = result.inserts) === null || _a === void 0 ? void 0 : _a.forEach((insertData) => {\n rows.set(insertData[this.rowId], insertData);\n });\n this.clientRowsCount += (_b = result.inserts.length) !== null && _b !== void 0 ? _b : 0;\n this.rowData = rows;\n }\n}\n","import { __awaiter } from \"tslib\";\nimport { MessageType, } from '@genesislcap/foundation-comms';\nimport debounce from 'lodash.debounce';\nimport { logger } from '../utils';\nimport { BaseServerSideDatasource } from './server-side.resource-base';\n/**\n * Debounce time for stream creation after user stops scrolling (in ms)\n */\nconst POLLING_STREAM_DEBOUNCE_MS = 300;\n/**\n * The REQUEST_SERVER IServerSideDatasource implementation, used for SSRM (Server-Side Row Model) in the grid.\n * @beta\n */\nexport class ReqRepServerSideDatasource extends BaseServerSideDatasource {\n constructor(options) {\n var _a, _b, _c, _d, _e;\n super(options);\n // Track the total discovered row count when we reach the last page\n this.discoveredTotalRowCount = null;\n this.currentNextOffset = 0;\n this.createReqRepRequestFunc = options.createReqRepRequestFunc;\n this.createReqRepStreamFunc = options.createReqRepStreamFunc;\n this.onPollingUpdate = options.onPollingUpdateFunc;\n this.resetPreviousPollResult = options.resetPreviousPollResultFunc;\n this.usePolling = (_a = options.usePolling) !== null && _a !== void 0 ? _a : false;\n // Initialize debounced stream creation function\n this.debouncedCreateStream = debounce((params) => this.createPollingStream(params), POLLING_STREAM_DEBOUNCE_MS);\n const effectivePagingMode = this.getEffectivePagingMode();\n // Initialize based on paging mode\n if (effectivePagingMode === 'viewBased') {\n if (!((_c = (_b = options.resourceParams) === null || _b === void 0 ? void 0 : _b.DETAILS) === null || _c === void 0 ? void 0 : _c.VIEW_NUMBER)) {\n this.resourceParams.DETAILS.VIEW_NUMBER = this.zeroBasedViewNumber ? 0 : 1;\n }\n }\n else {\n // offsetBased\n if (!((_e = (_d = options.resourceParams) === null || _d === void 0 ? void 0 : _d.DETAILS) === null || _e === void 0 ? void 0 : _e.OFFSET)) {\n this.resourceParams.DETAILS.OFFSET = 0;\n }\n }\n }\n getRows(params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Use custom filtering and sorting setup for req-rep\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {\n params.success(this.lastSuccessRowData);\n return;\n }\n const effectivePagingMode = this.getEffectivePagingMode();\n // Update pagination params based on paging mode\n this.updatePaginationParams(params, effectivePagingMode);\n const requestParams = {\n DETAILS: this.buildRequestDetails(effectivePagingMode),\n };\n const requestResult = yield this.createReqRepRequestFunc(requestParams);\n // Determine if this is the last view/page\n const isLastView = yield this.determineIsLastView(requestResult, requestParams, effectivePagingMode);\n // Apply the result to the grid\n this.applyServerSideData(params, requestResult, isLastView);\n // If polling enabled, schedule stream creation after user stops scrolling\n this.schedulePollingStream(requestParams);\n });\n }\n /**\n * Update pagination params based on paging mode\n */\n updatePaginationParams(params, effectivePagingMode) {\n if (effectivePagingMode === 'viewBased') {\n if (this.currentSequenceId !== null && this.currentSequenceId >= 0 && this.moreRows) {\n if (this.pagination) {\n this.resourceParams.DETAILS.VIEW_NUMBER = this.getPageNumber(params.request.startRow, this.maxRows, undefined, // Don't pass maxView as totalRecords since it's not a valid total count\n this.zeroBasedViewNumber);\n }\n else {\n this.resourceParams.DETAILS.VIEW_NUMBER += 1;\n }\n }\n }\n else {\n // offsetBased: use startRow as the OFFSET to ensure correct block-to-offset mapping,\n // even when blocks are re-requested out of order (e.g. polling refresh of block 0)\n this.resourceParams.DETAILS.OFFSET = params.request.startRow;\n }\n }\n /**\n * Determine if this is the last view/page\n */\n determineIsLastView(requestResult, requestParams, effectivePagingMode) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const hasMoreRowsInResult = 'MORE_ROWS' in requestResult;\n let isLastView = false;\n if (effectivePagingMode === 'viewBased') {\n if (hasMoreRowsInResult) {\n isLastView = !requestResult.MORE_ROWS;\n }\n else if (requestResult.NEXT_VIEW !== -1) {\n const preCheckRequestParams = Object.assign(Object.assign({}, requestParams), { DETAILS: Object.assign(Object.assign({}, requestParams.DETAILS), { VIEW_NUMBER: requestResult.NEXT_VIEW }) });\n const moreRowsPreCheck = yield this.createReqRepRequestFunc(preCheckRequestParams);\n isLastView = moreRowsPreCheck.NEXT_VIEW === -1 && ((_a = moreRowsPreCheck.REPLY) === null || _a === void 0 ? void 0 : _a.length) === 0;\n }\n }\n else {\n // offsetBased\n isLastView = hasMoreRowsInResult && !requestResult.MORE_ROWS;\n if ('NEXT_OFFSET' in requestResult && requestResult.NEXT_OFFSET !== -1) {\n this.currentNextOffset = requestResult.NEXT_OFFSET;\n }\n else {\n this.currentNextOffset = 0;\n }\n }\n return isLastView;\n });\n }\n /**\n * Schedules polling stream creation if enabled.\n * @remarks\n * Destroys any existing stream and schedules a new one after the user stops scrolling (debounced).\n * This prevents excessive stream recreation during rapid scrolling.\n */\n schedulePollingStream(requestParams) {\n if (this.usePolling && this.createReqRepStreamFunc) {\n this.destroyPollingStream();\n this.debouncedCreateStream(requestParams);\n }\n }\n applyServerSideData(params, result, isLastView) {\n var _a, _b, _c;\n const messageType = result.MESSAGE_TYPE;\n if (messageType &&\n (messageType === MessageType.LOGOFF_ACK || messageType === MessageType.MSG_NACK)) {\n // Trigger error dialog for connection/authentication errors\n if (this.errorHandlerFunc) {\n const errorMessage = messageType === MessageType.LOGOFF_ACK\n ? `Connection lost to ${this.resourceName}`\n : `Authentication failed for ${this.resourceName}`;\n this.errorHandlerFunc(errorMessage, 'connection');\n }\n params.fail();\n return;\n }\n const effectivePagingMode = this.getEffectivePagingMode();\n // TODO: the code below will be tweaked/removed when gsf <8.14 is no longer supported\n if ('MORE_ROWS' in result) {\n this.moreRows = result.MORE_ROWS;\n }\n else {\n // Fall back to the existing logic for backwards compatibility\n if (effectivePagingMode === 'viewBased') {\n this.moreRows =\n !isLastView &&\n result.NEXT_VIEW !== -1 &&\n result.NEXT_VIEW > this.resourceParams.DETAILS.VIEW_NUMBER;\n }\n else {\n // offsetBased\n this.moreRows =\n !isLastView &&\n result.NEXT_OFFSET !== -1 &&\n result.NEXT_OFFSET > this.resourceParams.DETAILS.OFFSET;\n }\n }\n if ((_a = result.REPLY) === null || _a === void 0 ? void 0 : _a.length) {\n this.handleCurrentStreamLoad(result.REPLY);\n }\n else {\n this.completeEmptyResult(params);\n return;\n }\n // Update current sequence ID based on paging mode\n if (effectivePagingMode === 'viewBased') {\n this.currentSequenceId = this.resourceParams.DETAILS.VIEW_NUMBER;\n }\n else {\n // For offsetBased, use OFFSET / maxRows to get the sequence\n this.currentSequenceId = Math.floor(this.resourceParams.DETAILS.OFFSET / this.maxRows);\n }\n this.sourceRef = result.SOURCE_REF;\n // For req-rep, store the total row count when we reach the last page\n if (!this.moreRows) {\n const currentBatchSize = this.rowData.size;\n this.discoveredTotalRowCount = params.request.startRow + currentBatchSize;\n }\n // Reset serverRowsCount accumulation for req-rep pagination\n if (this.pagination) {\n this.serverRowsCount = (_b = result.ROWS_COUNT) !== null && _b !== void 0 ? _b : this.rowData.size;\n }\n else {\n this.serverRowsCount += (_c = result.ROWS_COUNT) !== null && _c !== void 0 ? _c : this.rowData.size;\n }\n const successRowData = {\n rowData: Array.from(this.rowData.values()),\n };\n successRowData.rowCount = this.getCorrectRowCount(params);\n this.lastSuccessRowData = successRowData;\n params.success(successRowData);\n this.notifyNoDataAvailableIfEmpty(params, successRowData);\n }\n getCorrectRowCount(params) {\n let rowCount;\n if (this.pagination) {\n if (this.moreRows) {\n // More data available, return -1 to indicate unknown total\n rowCount = -1;\n }\n else {\n // Use discovered total if available, otherwise calculate from current position\n rowCount = this.discoveredTotalRowCount || params.request.startRow + this.rowData.size;\n }\n return rowCount;\n }\n // Non-pagination mode (streaming)\n if (this.moreRows) {\n rowCount = -1; // More data available, unknown total\n }\n else {\n // Use discovered total or calculate from current batch\n rowCount = this.discoveredTotalRowCount || params.request.startRow + this.rowData.size;\n }\n return rowCount;\n }\n handleCurrentStreamLoad(reply) {\n if (!reply || reply.length == 0)\n return;\n const rows = new Map();\n reply.forEach((insertData) => {\n const insertDataRowId = insertData[this.rowId];\n if (insertDataRowId) {\n rows.set(insertDataRowId, insertData);\n return;\n }\n const noRowIdMessage = `The specified rowId (${this.rowId}) is not present in the data. Since this is a snapshot (isSnapshot=true), an auto-generated UUID will be used. For custom identifiers, use the 'row-id' attribute.`;\n logger.error(noRowIdMessage);\n const tempId = this.uuid.createId();\n insertData[this.rowId] = tempId;\n rows.set(tempId, insertData);\n });\n this.rowData = rows;\n }\n /**\n * Req-rep specific sorting setup that allows any column to be sorted\n * (unlike dataserver which requires indexed columns only)\n */\n setupSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const toBeAppliedSortModel = params.request.sortModel;\n if (((_a = this.currentSortModel) === null || _a === void 0 ? void 0 : _a.length) !== toBeAppliedSortModel.length ||\n toBeAppliedSortModel.length > 0) {\n if (toBeAppliedSortModel.length === 0 && this.currentSortModel) {\n this.calculatedRowsCount = 0;\n this.currentSortModel = null;\n this.resourceParams.DETAILS.ORDER_BY = undefined;\n yield this.refreshDatasource(params);\n return;\n }\n else if (toBeAppliedSortModel.length > 0) {\n const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user\n const sortTypeBeingApplied = toBeAppliedSortModel[0].sort;\n // For req-rep, we can sort by any column without requiring it to be part of an index\n if (JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel)) {\n this.currentSortModel = toBeAppliedSortModel;\n this.resourceParams.DETAILS.ORDER_BY =\n coldIdBeingSorted + (sortTypeBeingApplied === 'desc' ? ' DESC' : ' ASC'); // Use the column directly\n yield this.refreshDatasource(params);\n return;\n }\n }\n }\n });\n }\n refreshDatasource(params) {\n const _super = Object.create(null, {\n refreshDatasource: { get: () => super.refreshDatasource }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyPollingStream();\n if (this.debouncedCreateStream) {\n this.debouncedCreateStream.cancel();\n }\n this.discoveredTotalRowCount = null;\n this.currentNextOffset = 0;\n this.resourceParams.DETAILS.VIEW_NUMBER = this.zeroBasedViewNumber ? 0 : 1;\n this.resourceParams.DETAILS.OFFSET = 0;\n yield _super.refreshDatasource.call(this, params);\n });\n }\n destroy() {\n const _super = Object.create(null, {\n destroy: { get: () => super.destroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyPollingStream();\n if (this.debouncedCreateStream) {\n this.debouncedCreateStream.cancel();\n }\n yield _super.destroy.call(this);\n });\n }\n /**\n * Creates a polling stream for the currently loaded data.\n * @remarks\n * This method creates a separate datasource instance that polls all currently loaded rows\n * (from offset 0 to current offset + maxRows). The polling results are sent to the parent\n * datasource via the `onPollingUpdate` callback for change detection and grid updates.\n *\n * The stream will only apply updates if the request params haven't changed (user hasn't\n * scrolled away or changed filters/sorting).\n * @param requestParams - The request parameters for the current view\n */\n createPollingStream(requestParams) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n this.destroyPollingStream();\n this.currentStreamParams = requestParams;\n const { stream, datasource } = yield this.createReqRepStreamFunc(requestParams);\n this.reqRepPollingStream = stream;\n this.reqRepPollingDatasource = datasource;\n this.reqRepPollingSubscription = this.reqRepPollingStream.subscribe({\n next: (result) => {\n if (this.currentStreamParams &&\n JSON.stringify(this.currentStreamParams) === JSON.stringify(requestParams)) {\n if (this.onPollingUpdate) {\n this.onPollingUpdate(result);\n }\n }\n },\n error: (error) => {\n var _a;\n logger.error('Polling stream error:', error);\n if (this.errorHandlerFunc) {\n this.errorHandlerFunc(((_a = error === null || error === void 0 ? void 0 : error.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || (error === null || error === void 0 ? void 0 : error.message), 'stream');\n }\n },\n });\n logger.debug('Polling stream created for params:', requestParams);\n }\n catch (error) {\n logger.error('Failed to create polling stream:', error);\n }\n });\n }\n /**\n * Destroys the current polling stream and associated datasource.\n * @remarks\n * Cleans up the polling subscription, destroys the separate polling datasource instance,\n * and resets the previous poll comparison state. Called when:\n * - User scrolls to a new page\n * - Filters or sorting changes\n * - The datasource is being destroyed\n */\n destroyPollingStream() {\n if (this.reqRepPollingSubscription) {\n this.reqRepPollingSubscription.unsubscribe();\n this.reqRepPollingSubscription = undefined;\n logger.debug('Polling subscription destroyed');\n }\n if (this.reqRepPollingDatasource) {\n this.reqRepPollingDatasource.destroy();\n this.reqRepPollingDatasource = undefined;\n logger.debug('Polling datasource destroyed');\n }\n this.reqRepPollingStream = undefined;\n this.currentStreamParams = undefined;\n if (this.resetPreviousPollResult) {\n this.resetPreviousPollResult();\n }\n }\n buildRequestDetails(effectivePagingMode) {\n const baseDetails = {\n CRITERIA_MATCH: this.resourceParams.DETAILS.CRITERIA_MATCH,\n MAX_ROWS: this.resourceParams.DETAILS.MAX_ROWS,\n ORDER_BY: this.resourceParams.DETAILS.ORDER_BY,\n };\n if (effectivePagingMode === 'viewBased') {\n return Object.assign(Object.assign({}, baseDetails), { VIEW_NUMBER: this.resourceParams.DETAILS.VIEW_NUMBER });\n }\n else {\n // offsetBased\n return Object.assign(Object.assign({}, baseDetails), { OFFSET: this.resourceParams.DETAILS.OFFSET });\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { dataServerResultFilter, Datasource, MessageType, normaliseCriteria, toFieldMetadata, } from '@genesislcap/foundation-comms';\nimport { insertDocumentCSSRule, JSONSerializer, LifecycleMixin, } from '@genesislcap/foundation-utils';\nimport { attr, customElement, DOM, observable } from '@microsoft/fast-element';\nimport { gridProGenesisDatasourceEventNames } from '../grid-pro-genesis-datasource';\nimport { datasourceEventNames, } from '../grid-pro-genesis-datasource/datasource-events.types';\nimport { logger } from '../utils';\nimport { GridProBaseDatasource } from './base.datasource';\nimport { getFilterByFieldType, getServerSideFilterParamsByFieldType, } from './server-side.grid-definitions';\nimport { DataserverServerSideDatasource } from './server-side.resource-dataserver';\nimport { ReqRepServerSideDatasource } from './server-side.resource-reqrep';\nconst criteriaDelimiter = ';';\nconst withoutColumnDefs = null;\n/**\n * Custom CSS for server-side datasource sort indicators\n * Makes sort indicators always visible with custom styling\n */\nconst serverSideSortIndicatorCSS = `\n .grid-pro-server-side .ag-header-cell-sortable .ag-sort-indicator-container {\n opacity: 1 !important;\n visibility: visible !important;\n }\n \n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-container {\n opacity: 0.4 !important;\n }\n \n .grid-pro-server-side .ag-header-cell-sorted .ag-sort-indicator-container {\n opacity: 1 !important;\n }\n \n .grid-pro-server-side .ag-sort-ascending-icon::before,\n .grid-pro-server-side .ag-sort-descending-icon::before,\n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-icon::before {\n font-family: var(--ag-icon-font-family, agGridAlpine) !important;\n font-size: var(--ag-icon-size, 16px) !important;\n color: var(--ag-header-foreground-color, var(--ag-foreground-color)) !important;\n }\n \n .grid-pro-server-side .ag-sort-ascending-icon::before {\n content: \"\\\\e90d\" !important; /* AG Grid sort up icon */\n }\n \n .grid-pro-server-side .ag-sort-descending-icon::before {\n content: \"\\\\e90c\" !important; /* AG Grid sort down icon */\n }\n \n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-icon::before {\n content: \"\\\\e90b\" !important; /* AG Grid sort icon */\n opacity: 0.6 !important;\n }\n \n /* Ensure the sort indicator is always visible for sortable columns in server-side mode */\n .grid-pro-server-side .ag-header-cell-sortable .ag-sort-indicator-icon {\n display: inline-block !important;\n }\n`;\n/**\n * A Genesis Datasource element, for server-side | SSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Server-Side Row Model. Requires `@ag-grid-enterprise/server-side-row-model` setup and valid AG Grid Enterprise license.\n *\n * **Custom Sort Indicators**: This datasource automatically applies custom sort indicators that are always visible (instead of only on hover).\n * Sortable columns will show a subtle sort icon even when not sorted, and active sort indicators will be more prominent.\n * The custom styling uses AG Grid's native icon font for consistency with the grid theme.\n *\n * @beta\n *\n * @fires base-datasource-error - Fired when a datasource error is reported\n * @fires datasource-error - Fired when a datasource error occurs (for grid integration)\n * @fires base-datasource-connected - Fired when error state is cleared after connection succeeds\n * @fires datasource-loading-finished - Fired when pending stream transactions are flushed with no row changes\n * @fires datasource-no-data-available - Fired when loading finishes with an empty row set\n * @fires datasource-data-changed - Fired when row data changes from applied stream transactions\n * @fires cache-filter-config - Fired to persist filter configuration for the grid\n * @fires refresh-server-side - Fired to request a server-side refresh\n * @fires set-server-side-datasource - Fired to attach or clear the server-side row model datasource\n * @fires datasource-loading-started - Fired when a server-side load cycle starts\n * @fires add-grid-css-class - Fired to add a CSS class on the grid host (e.g. server-side styling)\n * @fires remove-grid-css-class - Fired to remove a CSS class from the grid host\n * @fires datasource-initialize - Fired to hand off server-side grid options\n * @fires datasource-init - Fired when the server-side grid model should initialize data\n * @fires datasource-schema-updated - Fired when column metadata or defs are updated\n * @fires datasource-filters-restored - Fired when persisted filters are reapplied\n * @fires datasource-data-cleared - Fired when server-side row data is cleared\n * @fires apply-server-side-transaction - Fired to apply a server-side row transaction\n * @fires datasource-ready - Fired when the host grid is ready (detail includes pagination state)\n */\nlet GridProServerSideDatasource = class GridProServerSideDatasource extends LifecycleMixin(GridProBaseDatasource) {\n constructor() {\n super(...arguments);\n /**\n * The starting VIEW_NUMBER of the data to be fetched.\n * @remarks The VIEW_NUMBER isincremented by the grid as the user scrolls or changes pages.\n */\n this.zeroBasedViewNumber = false;\n /**\n * Enable live updates for the grid.\n * @remarks Only works with DATASERVER resources (StreamDatasource) right now.\n */\n this.liveUpdates = false;\n this.request = {};\n this.sortIndicatorCSSDestroy = null;\n /**\n * Stores the previous poll result for comparison (poll N vs poll N-1).\n * @remarks\n * This enables efficient change detection by comparing consecutive polls instead of\n * maintaining the entire dataset in memory. Only stores the last poll result.\n * @internal\n */\n this.previousPollResult = new Map();\n /**\n * Tracks whether the baseline poll has been captured for the current polling stream.\n * @remarks\n * Used to distinguish \"no baseline yet\" from \"baseline is empty\". Without this flag,\n * an empty initial poll (e.g. resource starts with zero rows) leaves\n * `previousPollResult.size === 0`, so the next poll — which contains newly-inserted\n * rows — is treated as another \"first poll\" and stored as baseline instead of being\n * applied. The first inserted row would then never appear in the grid.\n * @internal\n */\n this.hasCapturedFirstPollResult = false;\n }\n resourceNameChanged(oldValue, newValue) {\n if (!oldValue || oldValue === newValue)\n return;\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n yield this.restart();\n }));\n }\n criteriaChanged(oldCriteria, newCriteria) {\n const criteriaIsNotDuplicate = oldCriteria !== normaliseCriteria(newCriteria, criteriaDelimiter);\n if (this.ssrmDatasource && criteriaIsNotDuplicate) {\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n yield this.ssrmDatasource.refreshDatasource({\n criteria: newCriteria,\n });\n }));\n }\n }\n connectedCallback() {\n super.connectedCallback();\n const shouldRunConnect = this.shouldRunConnect;\n DOM.queueUpdate(() => {\n if (!shouldRunConnect)\n return;\n this.init();\n this.subscribeToConnection();\n });\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n const shouldRunDisconnect = this.shouldRunDisconnect;\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n if (!shouldRunDisconnect)\n return;\n yield this.destroy();\n this.unsubscribeFromConnection();\n }));\n }\n deepClone() {\n const copy = super.deepClone();\n copy.deferredGridOptions = structuredClone(this.deferredGridOptions);\n copy.deferredColumnStates = structuredClone(this.deferredColumnStates);\n return copy;\n }\n /**\n * Resets the grid data while keeping columnDefs and reloads data.\n * @remarks This is used when the grid is already initialized and we want to reload the data due to a criteria/filter change.\n * @beta\n */\n reloadResourceData(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.datasource.destroy();\n (_a = this.liveUpdatesStream) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.liveUpdatesStream = undefined;\n // Emit event to cache current filter model before clearing data\n this.$emit(datasourceEventNames.cacheFilterConfig);\n this.clearRowData(withoutColumnDefs);\n this.setDisconnected(false);\n // Emit event to refresh server side with purge\n this.$emit(datasourceEventNames.refreshServerSide, { purge: true });\n if (params) {\n const options = Object.assign(Object.assign({}, this.datasourceOptions()), params);\n const initOK = yield this.initializeDatasource(options, true, false);\n if (!initOK) {\n // Emit event to set server side datasource to null\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n logger.error('Genesis Datasource re-init failed on filtering/sorting.');\n }\n }\n else {\n if (this.ssrmDatasource) {\n yield this.ssrmDatasource.destroy();\n this.ssrmDatasource = undefined;\n }\n // Emit events instead of direct grid access\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n this.$emit(datasourceEventNames.loadingStarted);\n yield this.init();\n }\n });\n }\n /**\n * Applies custom sort indicator styling for server-side datasource\n * @internal\n */\n applyServerSideSortIndicatorStyling() {\n // Remove existing styling if present\n this.removeServerSideSortIndicatorStyling();\n // Emit event to add CSS class to grid element\n this.$emit(datasourceEventNames.addGridCssClass, { className: 'grid-pro-server-side' });\n // Insert custom CSS rules\n this.sortIndicatorCSSDestroy = insertDocumentCSSRule(serverSideSortIndicatorCSS, 'grid-pro-server-side-sort');\n }\n /**\n * Removes custom sort indicator styling\n * @internal\n */\n removeServerSideSortIndicatorStyling() {\n // Emit event to remove CSS class from grid element\n this.$emit(datasourceEventNames.removeGridCssClass, { className: 'grid-pro-server-side' });\n // Remove custom CSS rules\n if (this.sortIndicatorCSSDestroy) {\n this.sortIndicatorCSSDestroy();\n this.sortIndicatorCSSDestroy = null;\n }\n }\n init() {\n return __awaiter(this, void 0, void 0, function* () {\n // Emit event to initialize grid with server-side options\n const gridOptions = Object.assign({ getRowId: (params) => {\n if (!params.data) {\n return null;\n }\n return String(params.data[this.rowId]);\n }, getRowStyle(params) {\n var _a, _b;\n if ((_b = (_a = params.data) === null || _a === void 0 ? void 0 : _a.ROW_REF) === null || _b === void 0 ? void 0 : _b.includes('_deleted')) {\n return { color: 'grey' };\n }\n }, cacheBlockSize: this.maxRows, defaultColDef: {\n filter: true,\n resizable: true,\n sortable: false,\n unSortIcon: true,\n }, rowBuffer: 0, rowModelType: 'serverSide', suppressServerSideInfiniteScroll: false, suppressMultiSort: true, onFilterChanged: (params) => { }, onSortChanged: (params) => { }, onPaginationChanged: (event) => this.onPaginationChanged(event) }, this.deferredGridOptions);\n this.$emit(datasourceEventNames.initialize, {\n options: gridOptions,\n keepColDefsOnClearRowData: this.keepColDefsOnClearRowData,\n });\n // TODO: refactor this to prevent rendering datasource component until grid is ready\n this.addEventListener(datasourceEventNames.ready, (event) => __awaiter(this, void 0, void 0, function* () {\n const { pagination } = event.detail;\n this.pagination = pagination;\n const initOK = yield this.initializeDatasource(this.datasourceOptions(), true, false);\n if (!initOK) {\n logger.debug(`Genesis Datasource init failed for ${this.resourceName}`);\n this.clearRowData();\n this.setDisconnected(true);\n return;\n }\n this.$emit(gridProGenesisDatasourceEventNames.dataInit);\n this.setDisconnected(false);\n this.indexes = this.getResourceIndexes(this.datasource.availableIndexes, this.datasource.availableSortableFields);\n const fieldMetadata = toFieldMetadata(this.datasource.originalFieldDef);\n const agColumnDefs = yield this.getAgColumnDefs(fieldMetadata);\n // Emit event to set column definitions\n this.$emit(datasourceEventNames.schemaUpdated, {\n schema: agColumnDefs,\n metadata: fieldMetadata,\n });\n if (this.isRequestServer) {\n // Enable polling if not in snapshot mode and polling is not disabled\n const usePolling = !this.isSnapshot && !this.disablePolling;\n this.ssrmDatasource = new ReqRepServerSideDatasource({\n createReqRepRequestFunc: this.createReqRepRequest.bind(this),\n createReqRepStreamFunc: usePolling ? this.createReqRepStream.bind(this) : undefined,\n onPollingUpdateFunc: usePolling ? this.applyReqRepPollingUpdate.bind(this) : undefined,\n resetPreviousPollResultFunc: usePolling\n ? this.resetPreviousPollResult.bind(this)\n : undefined,\n usePolling: usePolling,\n reloadResourceDataFunc: this.reloadResourceData.bind(this),\n errorHandlerFunc: this.handleErrors.bind(this),\n onNoDataAvailableFunc: () => this.$emit(datasourceEventNames.noDataAvailable),\n resourceName: this.resourceName,\n resourceParams: this.datasource.requestOnlyParams,\n resourceIndexes: this.indexes,\n resourceColDefs: this.datasource.originalFieldDef,\n maxRows: +this.maxRows,\n maxView: +this.maxView,\n rowId: this.rowId,\n pagination: this.pagination,\n zeroBasedViewNumber: this.zeroBasedViewNumber,\n pagingMode: this.pagingMode,\n criteriaOnlyRequest: this.datasource.criteriaOnlyRequest,\n });\n }\n else {\n this.ssrmDatasource = new DataserverServerSideDatasource({\n createDataserverStreamFunc: this.createDataserverStream.bind(this),\n reloadResourceDataFunc: this.reloadResourceData.bind(this),\n errorHandlerFunc: this.handleErrors.bind(this),\n onNoDataAvailableFunc: () => this.$emit(datasourceEventNames.noDataAvailable),\n resourceName: this.resourceName,\n resourceParams: this.datasource.dataserverOnlyParams,\n resourceIndexes: this.indexes,\n resourceColDefs: this.datasource.originalFieldDef,\n maxRows: +this.maxRows,\n maxView: +this.maxView,\n rowId: this.rowId,\n pagination: this.pagination,\n zeroBasedViewNumber: this.zeroBasedViewNumber,\n });\n }\n // Emit event to set server side datasource\n this.$emit(datasourceEventNames.setServerSideDatasource, {\n datasource: this.ssrmDatasource,\n });\n // Emit event to restore cached filter config\n this.$emit(datasourceEventNames.filtersRestored);\n // Apply custom sort indicator styling for server-side datasource\n this.applyServerSideSortIndicatorStyling();\n }), { once: true });\n if (!this.resourceName) {\n this.handleErrors('Application not connected or invalid resource name, datasource will not work.', 'unknown');\n }\n });\n }\n onPaginationChanged(event) {\n var _a;\n if (this.ssrmDatasource) {\n this.ssrmDatasource.isNewPageSize = (_a = event.newPage) !== null && _a !== void 0 ? _a : false;\n }\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n this.datasource.destroy();\n (_a = this.liveUpdatesStream) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.liveUpdatesStream = undefined;\n this.clearRowData();\n if (this.ssrmDatasource) {\n yield this.ssrmDatasource.destroy();\n (_b = this.pollingDatasource) === null || _b === void 0 ? void 0 : _b.destroy();\n this.ssrmDatasource = undefined;\n }\n // Remove custom sort indicator styling\n this.removeServerSideSortIndicatorStyling();\n // Emit events instead of direct grid access\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n this.$emit(datasourceEventNames.refreshServerSide, { purge: true });\n });\n }\n restart() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.destroy();\n yield this.init();\n });\n }\n clearRowData(withColumnDefs = true) {\n this.rowData = new Map();\n if (withColumnDefs) {\n // Emit event to clear column definitions\n this.$emit(datasourceEventNames.dataCleared, {\n includeSchema: true,\n });\n }\n this.transactionData = { remove: [] };\n // Emit event to apply server side transaction for removing all data\n this.$emit(datasourceEventNames.applyServerSideTransaction, {\n transaction: this.transactionData,\n });\n this.transactionData = undefined;\n }\n getResourceIndexes(avaialbleIndexes, availableSortableFields) {\n const resourceIndexesMap = new Map();\n const allSortableFields = new Set();\n // Add indexes from INDEXES metadata\n avaialbleIndexes === null || avaialbleIndexes === void 0 ? void 0 : avaialbleIndexes.forEach((index) => {\n const fields = index.FIELDS.split(' ');\n resourceIndexesMap.set(index.NAME, fields);\n fields.forEach((field) => allSortableFields.add(field));\n });\n // Add fields from SORTABLE_FIELDS metadata if available\n if (availableSortableFields && availableSortableFields.length > 0) {\n availableSortableFields.forEach((field) => allSortableFields.add(field));\n }\n // If we have SORTABLE_FIELDS but no indexes, create a synthetic index entry\n // This ensures compatibility with existing code that expects a Map structure\n if (resourceIndexesMap.size === 0 && allSortableFields.size > 0) {\n resourceIndexesMap.set('SORTABLE_FIELDS', Array.from(allSortableFields));\n }\n else if (availableSortableFields &&\n availableSortableFields.length > 0 &&\n resourceIndexesMap.size > 0) {\n // If we have both indexes and SORTABLE_FIELDS, merge them\n // Add any additional fields from SORTABLE_FIELDS that aren't already in any index\n const fieldsFromIndexes = new Set();\n resourceIndexesMap.forEach((fields) => {\n fields.forEach((field) => fieldsFromIndexes.add(field));\n });\n const additionalFields = availableSortableFields.filter((field) => !fieldsFromIndexes.has(field));\n if (additionalFields.length > 0) {\n // Add additional sortable fields as a separate entry\n resourceIndexesMap.set('SORTABLE_FIELDS', additionalFields);\n }\n }\n return resourceIndexesMap;\n }\n createReqRepRequest() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n const reqRep = yield this.datasource.snapshot(existingParams);\n return reqRep;\n });\n }\n /**\n * Creates a polling stream for REQUEST_SERVER resources.\n * @remarks\n * Creates a separate `Datasource` instance configured to poll all currently loaded rows\n * (from offset 0 to current offset + maxRows). This enables change detection across all\n * loaded data, not just the current page.\n *\n * The separate datasource instance has built-in polling logic (pollingInterval, pollTriggerEvents)\n * and manages its own lifecycle independently of the snapshot datasource.\n * @param existingParams - The current request parameters (includes OFFSET, MAX_ROWS, etc.)\n * @returns Object containing the polling stream and the datasource instance\n * @internal\n */\n createReqRepStream() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const currentOffset = (_b = (_a = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _a === void 0 ? void 0 : _a.OFFSET) !== null && _b !== void 0 ? _b : 0;\n const baseMaxRows = (_d = (_c = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _c === void 0 ? void 0 : _c.MAX_ROWS) !== null && _d !== void 0 ? _d : this.maxRows;\n const totalRowsToFetch = baseMaxRows + currentOffset;\n const datasourceOptions = Object.assign(Object.assign({}, this.datasourceOptions()), { criteria: (_f = (_e = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _e === void 0 ? void 0 : _e.CRITERIA_MATCH) !== null && _f !== void 0 ? _f : this.criteria, maxRows: totalRowsToFetch, orderBy: (_h = (_g = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _g === void 0 ? void 0 : _g.ORDER_BY) !== null && _h !== void 0 ? _h : this.orderBy });\n logger.debug('Creating polling datasource for all loaded rows:', {\n currentOffset,\n baseMaxRows,\n totalRowsToFetch,\n });\n // Initialize the polling datasource\n const initOK = yield this.pollingDatasource.init(datasourceOptions, true, true);\n if (!initOK) {\n logger.error('Polling datasource init failed');\n return;\n }\n return { stream: this.pollingDatasource.stream, datasource: this.pollingDatasource };\n });\n }\n /**\n * Resets the previous poll result comparison state.\n * @remarks\n * Called when the polling stream is destroyed or recreated with new parameters\n * (e.g., user scrolls to a different page, or filters/sorting changes).\n * @internal\n */\n resetPreviousPollResult() {\n this.previousPollResult.clear();\n this.hasCapturedFirstPollResult = false;\n logger.debug('Previous poll result cleared');\n }\n /**\n * Applies polling updates for REQUEST_SERVER resources in SSRM.\n * @remarks\n * Compares the current poll result (poll N) with the previous poll result (poll N-1)\n * to detect inserts, updates, and deletes. Changes are applied to the grid using\n * `applyServerSideTransaction` to avoid interfering with SSRM's cache management.\n *\n * The first poll is stored without applying changes (nothing to compare yet).\n * Subsequent polls are compared to detect changes efficiently.\n * @param result - The polling result from the REQUEST_SERVER resource\n * @internal\n */\n applyReqRepPollingUpdate(result) {\n var _a;\n if (!this.ssrmDatasource || !result.REPLY) {\n return;\n }\n const polledData = result.REPLY;\n if (!Array.isArray(polledData) || !((_a = result.MESSAGE_TYPE) === null || _a === void 0 ? void 0 : _a.startsWith('REP_'))) {\n logger.error('received invalid RequestServerResult for polling update', result);\n return;\n }\n if (!this.hasCapturedFirstPollResult) {\n polledData.forEach((row) => {\n this.previousPollResult.set(row[this.rowId], row);\n });\n this.hasCapturedFirstPollResult = true;\n logger.debug('First poll result stored for future comparison', {\n rowCount: this.previousPollResult.size,\n });\n return;\n }\n const currentPollMap = new Map();\n polledData.forEach((row) => {\n currentPollMap.set(row[this.rowId], row);\n });\n const rowsToUpdate = [];\n const rowsToInsert = [];\n const rowsToDelete = [];\n polledData.forEach((row) => {\n const rowId = row[this.rowId];\n if (this.previousPollResult.has(rowId)) {\n const previousRow = this.previousPollResult.get(rowId);\n if (this.serializer.serialize(previousRow) !== this.serializer.serialize(row)) {\n rowsToUpdate.push(row);\n }\n }\n else {\n rowsToInsert.push(row);\n }\n });\n this.previousPollResult.forEach((previousRow, rowId) => {\n if (!currentPollMap.has(rowId)) {\n rowsToDelete.push(previousRow);\n }\n });\n if (rowsToUpdate.length > 0 || rowsToDelete.length > 0 || rowsToInsert.length > 0) {\n this.previousPollResult = currentPollMap;\n logger.debug('Applying reqRep polling update via applyServerSideTransaction:', {\n added: rowsToInsert.length,\n updated: rowsToUpdate.length,\n removed: rowsToDelete.length,\n totalInPoll: currentPollMap.size,\n });\n this.$emit(datasourceEventNames.applyServerSideTransaction, {\n transaction: {\n add: rowsToInsert,\n update: rowsToUpdate,\n remove: rowsToDelete,\n },\n });\n }\n }\n createDataserverStream() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n if (this.liveUpdates) {\n const streamOnMessage = (message) => __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const messageType = message.MESSAGE_TYPE;\n if (messageType === MessageType.QUERY_UPDATE && message.ROW) {\n if (!this.ssrmDatasource) {\n return;\n }\n const nextMessage = dataServerResultFilter(message);\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(nextMessage.inserts);\n this.handleStreamUpdates(nextMessage.updates);\n this.handleStreamDeletes(nextMessage.deletes);\n if (message.SEQUENCE_ID > 1) {\n // Calculate net row count change (inserts - deletes)\n const netRowChange = ((_b = (_a = nextMessage.inserts) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - ((_d = (_c = nextMessage.deletes) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0);\n this.ssrmDatasource.serverRowsCount += netRowChange;\n // Calculate net row count change for client (inserts - loaded deletes)\n const clientNetRowChange = ((_f = (_e = nextMessage.inserts) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0) - ((_h = (_g = nextMessage.deletes) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0);\n this.ssrmDatasource.clientRowsCount += clientNetRowChange;\n this.applyAllTransactions();\n }\n }\n });\n const onError = (error) => {\n var _a;\n logger.error(error);\n this.handleErrors(((_a = error.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || error.message, 'stream');\n };\n this.liveUpdatesStream = this.connect\n .stream(this.resourceName, () => { }, onError, existingParams !== null && existingParams !== void 0 ? existingParams : this.datasource.dataserverOnlyParams)\n .subscribe((message) => streamOnMessage(message));\n }\n yield this.datasource.startStream();\n return this.datasource.stream;\n });\n }\n getAgColumnDefs(fieldsMetadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const colDefsFromGenesisData = this.generateColumnDefsFromMetadata(fieldsMetadata, getServerSideFilterParamsByFieldType, getFilterByFieldType);\n colDefsFromGenesisData.forEach((colDef) => {\n colDef.sortable = [].concat(...this.indexes.values()).includes(colDef.field);\n if (this.datasource.criteriaOnlyRequest) {\n colDef.filter = this.datasource.availableCriteriaFields.includes(colDef.field)\n ? colDef.filter\n : null;\n }\n });\n return colDefsFromGenesisData;\n });\n }\n applyTransaction(transaction) {\n this.$emit(datasourceEventNames.applyServerSideTransaction, { transaction });\n }\n loadMore() {\n throw new Error('loadMore() method is not supported for server-side datasource');\n }\n};\n__decorate([\n JSONSerializer\n], GridProServerSideDatasource.prototype, \"serializer\", void 0);\n__decorate([\n Datasource\n], GridProServerSideDatasource.prototype, \"pollingDatasource\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'zero-based-view-number' })\n], GridProServerSideDatasource.prototype, \"zeroBasedViewNumber\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'live-updates' })\n], GridProServerSideDatasource.prototype, \"liveUpdates\", void 0);\n__decorate([\n attr({ attribute: 'paging-mode' })\n], GridProServerSideDatasource.prototype, \"pagingMode\", void 0);\n__decorate([\n observable\n], GridProServerSideDatasource.prototype, \"request\", void 0);\nGridProServerSideDatasource = __decorate([\n customElement({\n name: 'grid-pro-server-side-datasource',\n })\n], GridProServerSideDatasource);\nexport { GridProServerSideDatasource };\n","import { css } from '@microsoft/fast-element';\n/**\n * Custom Drag n Drop CSS for Grid Pro.\n * @remarks helps with color and background issues when dragging a column.\n * @public\n */\nexport const agHeadCSS = css `\n .ag-dnd-ghost {\n background: var(--ag-header-background-color, var(--ag-background-color, #1f2126));\n border: solid 1px;\n border-color: var(--ag-header-foreground-color, var(--ag-foreground-color, #879ba6));\n border-radius: calc(var(--control-corner-radius) * 1px);\n color: var(--ag-header-foreground-color, var(--ag-foreground-color, #879ba6));\n font-family: var(--ag-font-family, var(--body-font));\n font-size: 12px;\n height: 32px;\n line-height: 28px;\n margin: 0;\n padding: 0 12px;\n position: absolute;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`;\n","import { AgGridTheme } from '../grid-pro.types';\n/**\n * The AG Alpine font face used on ag-theme-alpine/ag-theme-alpine-dark Grid Pro themes.\n * @public\n */\nexport const agGridAlpineFontFace = `\n @font-face {\n font-family: \"agGridAlpine\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * The AG Balham font face used on ag-theme-balham/ag-theme-balham-dark Grid Pro themes.\n * @public\n */\nexport const agGridBalhamFontFace = `\n @font-face {\n font-family: \"agGridBalham\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * The AG Material font face used on ag-theme-material Grid Pro theme.\n * @public\n */\nexport const agGridMaterialFontFace = `\n @font-face {\n font-family: \"agGridMaterial\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * Font Face map with all the font faces for each theme.\n * @public\n */\nexport const agThemeFontFaceMap = {\n [AgGridTheme.alpine]: agGridAlpineFontFace,\n [AgGridTheme.alpineDark]: agGridAlpineFontFace,\n [AgGridTheme.balham]: agGridBalhamFontFace,\n [AgGridTheme.balhamDark]: agGridBalhamFontFace,\n [AgGridTheme.material]: agGridMaterialFontFace,\n};\n/**\n * The default font face for Grid Pro (agGridAlpine).\n * @remarks this will change to Roboto.\n * @public\n */\nexport const defaultAgGridFontFace = agGridAlpineFontFace;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Grid core CSS.\n * @remarks without this grid will not show up.\n * @public\n */\nexport const agGridCSS = css `\n .ag-icon {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n .ag-icon-aggregation::before {\n content: var(--ag-icon-font-code-aggregation, '\\\\f101');\n }\n\n .ag-icon-arrows::before {\n content: var(--ag-icon-font-code-arrows, '\\\\f102');\n }\n\n .ag-icon-asc::before {\n content: var(--ag-icon-font-code-asc, '\\\\f103');\n }\n\n .ag-icon-cancel::before {\n content: var(--ag-icon-font-code-cancel, '\\\\f104');\n }\n\n .ag-icon-chart::before {\n content: var(--ag-icon-font-code-chart, '\\\\f105');\n }\n\n .ag-icon-checkbox-checked::before {\n content: var(--ag-icon-font-code-checkbox-checked, '\\\\f106');\n }\n\n .ag-icon-checkbox-indeterminate::before {\n content: var(--ag-icon-font-code-checkbox-indeterminate, '\\\\f107');\n }\n\n .ag-icon-checkbox-unchecked::before {\n content: var(--ag-icon-font-code-checkbox-unchecked, '\\\\f108');\n }\n\n .ag-icon-color-picker::before {\n content: var(--ag-icon-font-code-color-picker, '\\\\f109');\n }\n\n .ag-icon-columns::before {\n content: var(--ag-icon-font-code-columns, '\\\\f10a');\n }\n\n .ag-icon-contracted::before {\n content: var(--ag-icon-font-code-contracted, '\\\\f10b');\n }\n\n .ag-icon-copy::before {\n content: var(--ag-icon-font-code-copy, '\\\\f10c');\n }\n\n .ag-icon-cross::before {\n content: var(--ag-icon-font-code-cross, '\\\\f10d');\n }\n\n .ag-icon-csv::before {\n content: var(--ag-icon-font-code-csv, '\\\\f10e');\n }\n\n .ag-icon-desc::before {\n content: var(--ag-icon-font-code-desc, '\\\\f10f');\n }\n\n .ag-icon-excel::before {\n content: var(--ag-icon-font-code-excel, '\\\\f110');\n }\n\n .ag-icon-expanded::before {\n content: var(--ag-icon-font-code-expanded, '\\\\f111');\n }\n\n .ag-icon-eye-slash::before {\n content: var(--ag-icon-font-code-eye-slash, '\\\\f112');\n }\n\n .ag-icon-eye::before {\n content: var(--ag-icon-font-code-eye, '\\\\f113');\n }\n\n .ag-icon-filter::before {\n content: var(--ag-icon-font-code-filter, '\\\\f114');\n }\n\n .ag-icon-first::before {\n content: var(--ag-icon-font-code-first, '\\\\f115');\n }\n\n .ag-icon-grip::before {\n content: var(--ag-icon-font-code-grip, '\\\\f116');\n }\n\n .ag-icon-group::before {\n content: var(--ag-icon-font-code-group, '\\\\f117');\n }\n\n .ag-icon-last::before {\n content: var(--ag-icon-font-code-last, '\\\\f118');\n }\n\n .ag-icon-left::before {\n content: var(--ag-icon-font-code-left, '\\\\f119');\n }\n\n .ag-icon-linked::before {\n content: var(--ag-icon-font-code-linked, '\\\\f11a');\n }\n\n .ag-icon-loading::before {\n content: var(--ag-icon-font-code-loading, '\\\\f11b');\n }\n\n .ag-icon-maximize::before {\n content: var(--ag-icon-font-code-maximize, '\\\\f11c');\n }\n\n .ag-icon-menu::before {\n content: var(--ag-icon-font-code-menu, '\\\\f11d');\n }\n\n .ag-icon-minimize::before {\n content: var(--ag-icon-font-code-minimize, '\\\\f11e');\n }\n\n .ag-icon-next::before {\n content: var(--ag-icon-font-code-next, '\\\\f11f');\n }\n\n .ag-icon-none::before {\n content: var(--ag-icon-font-code-none, '\\\\f120');\n }\n\n .ag-icon-not-allowed::before {\n content: var(--ag-icon-font-code-not-allowed, '\\\\f121');\n }\n\n .ag-icon-paste::before {\n content: var(--ag-icon-font-code-paste, '\\\\f122');\n }\n\n .ag-icon-pin::before {\n content: var(--ag-icon-font-code-pin, '\\\\f123');\n }\n\n .ag-icon-pivot::before {\n content: var(--ag-icon-font-code-pivot, '\\\\f124');\n }\n\n .ag-icon-previous::before {\n content: var(--ag-icon-font-code-previous, '\\\\f125');\n }\n\n .ag-icon-radio-button-off::before {\n content: var(--ag-icon-font-code-radio-button-off, '\\\\f126');\n }\n\n .ag-icon-radio-button-on::before {\n content: var(--ag-icon-font-code-radio-button-on, '\\\\f127');\n }\n\n .ag-icon-right::before {\n content: var(--ag-icon-font-code-right, '\\\\f128');\n }\n\n .ag-icon-save::before {\n content: var(--ag-icon-font-code-save, '\\\\f129');\n }\n\n .ag-icon-small-down::before {\n content: var(--ag-icon-font-code-small-down, '\\\\f12a');\n }\n\n .ag-icon-small-left::before {\n content: var(--ag-icon-font-code-small-left, '\\\\f12b');\n }\n\n .ag-icon-small-right::before {\n content: var(--ag-icon-font-code-small-right, '\\\\f12c');\n }\n\n .ag-icon-small-up::before {\n content: var(--ag-icon-font-code-small-up, '\\\\f12d');\n }\n\n .ag-icon-tick::before {\n content: var(--ag-icon-font-code-tick, '\\\\f12e');\n }\n\n .ag-icon-tree-closed::before {\n content: var(--ag-icon-font-code-tree-closed, '\\\\f12f');\n }\n\n .ag-icon-tree-indeterminate::before {\n content: var(--ag-icon-font-code-tree-indeterminate, '\\\\f130');\n }\n\n .ag-icon-tree-open::before {\n content: var(--ag-icon-font-code-tree-open, '\\\\f131');\n }\n\n .ag-icon-unlinked::before {\n content: var(--ag-icon-font-code-unlinked, '\\\\f132');\n }\n\n .ag-icon-row-drag::before {\n content: var(--ag-icon-font-code-grip);\n }\n\n .ag-left-arrow::before {\n content: var(--ag-icon-font-code-left);\n }\n\n .ag-right-arrow::before {\n content: var(--ag-icon-font-code-right);\n }\n\n [class*='ag-theme-'] {\n --ag-foreground-color: #000;\n --ag-data-color: var(--ag-foreground-color);\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-header-foreground-color: var(--ag-secondary-foreground-color);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.5);\n --ag-background-color: #fff;\n --ag-header-background-color: transparent;\n --ag-tooltip-background-color: transparent;\n --ag-subheader-background-color: transparent;\n --ag-subheader-toolbar-background-color: transparent;\n --ag-control-panel-background-color: transparent;\n --ag-side-button-selected-background-color: var(--ag-control-panel-background-color);\n --ag-selected-row-background-color: #bbb;\n --ag-odd-row-background-color: var(--ag-background-color);\n --ag-modal-overlay-background-color: rgba(255, 255, 255, 0.66);\n --ag-row-hover-color: transparent;\n --ag-column-hover-color: transparent;\n --ag-range-selection-border-color: var(--ag-foreground-color);\n --ag-range-selection-border-style: solid;\n --ag-range-selection-background-color: rgba(0, 0, 0, 0.2);\n --ag-range-selection-background-color-2: var(--ag-range-selection-background-color);\n --ag-range-selection-background-color-3: var(--ag-range-selection-background-color);\n --ag-range-selection-background-color-4: var(--ag-range-selection-background-color);\n --ag-range-selection-highlight-color: var(--ag-range-selection-border-color);\n --ag-selected-tab-underline-color: var(--ag-range-selection-border-color);\n --ag-selected-tab-underline-width: 0;\n --ag-selected-tab-underline-transition-speed: 0s;\n --ag-range-selection-chart-category-background-color: rgba(0, 255, 132, 0.1);\n --ag-range-selection-chart-background-color: rgba(0, 88, 255, 0.1);\n --ag-header-cell-hover-background-color: transparent;\n --ag-header-cell-moving-background-color: var(--ag-background-color);\n --ag-value-change-value-highlight-background-color: rgba(22, 160, 133, 0.5);\n --ag-value-change-delta-up-color: #43a047;\n --ag-value-change-delta-down-color: #e53935;\n --ag-chip-background-color: transparent;\n --ag-borders: solid 1px;\n --ag-border-color: rgba(0, 0, 0, 0.25);\n --ag-borders-critical: var(--ag-borders);\n --ag-borders-secondary: var(--ag-borders);\n --ag-secondary-border-color: var(--ag-border-color);\n --ag-row-border-style: solid;\n --ag-row-border-color: var(--ag-secondary-border-color);\n --ag-row-border-width: 1px;\n --ag-cell-horizontal-border: solid transparent;\n --ag-borders-input: var(--ag-borders-secondary);\n --ag-input-border-color: var(--ag-secondary-border-color);\n --ag-borders-input-invalid: solid 2px;\n --ag-input-border-color-invalid: var(--ag-invalid-color);\n --ag-borders-side-button: var(--ag-borders);\n --ag-border-radius: 0px;\n --ag-row-border-color: var(--ag-secondary-border-color);\n --ag-header-column-separator-display: none;\n --ag-header-column-separator-height: 100%;\n --ag-header-column-separator-width: 1px;\n --ag-header-column-separator-color: var(--ag-secondary-border-color);\n --ag-header-column-resize-handle-display: none;\n --ag-header-column-resize-handle-height: 50%;\n --ag-header-column-resize-handle-width: 1px;\n --ag-header-column-resize-handle-color: var(--ag-secondary-border-color);\n --ag-invalid-color: red;\n --ag-input-disabled-border-color: var(--ag-input-border-color);\n --ag-input-disabled-background-color: transparent;\n --ag-checkbox-background-color: transparent;\n --ag-checkbox-border-radius: var(--ag-border-radius);\n --ag-checkbox-checked-color: var(--ag-foreground-color);\n --ag-checkbox-unchecked-color: var(--ag-foreground-color);\n --ag-checkbox-indeterminate-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-off-border-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-off-background-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-on-border-color: var(--ag-checkbox-checked-color);\n --ag-toggle-button-on-background-color: var(--ag-checkbox-checked-color);\n --ag-toggle-button-switch-background-color: var(--ag-background-color);\n --ag-toggle-button-switch-border-color: var(--ag-toggle-button-off-border-color);\n --ag-toggle-button-border-width: 1px;\n --ag-toggle-button-height: var(--ag-icon-size);\n --ag-toggle-button-width: calc(var(--ag-toggle-button-height) * 2);\n --ag-input-focus-box-shadow: none;\n --ag-input-focus-border-color: none;\n --ag-minichart-selected-chart-color: var(--ag-checkbox-checked-color);\n --ag-minichart-selected-page-color: var(--ag-checkbox-checked-color);\n --ag-grid-size: 4px;\n --ag-icon-size: 12px;\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-horizontal-spacing: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: var(--ag-grid-size);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-cell-widget-spacing: var(--ag-cell-horizontal-padding);\n --ag-row-height: calc(var(--ag-grid-size) * 6 + 1px);\n --ag-header-height: var(--ag-row-height);\n --ag-list-item-height: calc(var(--ag-grid-size) * 5);\n --ag-column-select-indent-size: calc(var(--ag-grid-size) + var(--ag-icon-size));\n --ag-set-filter-indent-size: calc(var(--ag-grid-size) + var(--ag-icon-size));\n --ag-row-group-indent-size: calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size));\n --ag-filter-tool-panel-group-indent: 16px;\n --ag-tab-min-width: 220px;\n --ag-menu-min-width: 181px;\n --ag-side-bar-panel-width: 200px;\n --ag-font-family: 'Helvetica Neue', sans-serif;\n --ag-font-size: 14px;\n --ag-card-radius: var(--ag-border-radius);\n --ag-card-shadow: none;\n --ag-popup-shadow: 5px 5px 10px rgba(0, 0, 0, 0.3);\n }\n\n .ag-root-wrapper,\n .ag-sticky-top,\n .ag-dnd-ghost {\n background-color: var(--ag-background-color);\n }\n\n [class*='ag-theme-'] {\n -webkit-font-smoothing: antialiased;\n font-family: var(--ag-font-family);\n font-size: var(--ag-font-size);\n line-height: normal;\n color: var(--ag-foreground-color);\n }\n\n ag-grid,\n ag-grid-angular,\n ag-grid-ng2,\n ag-grid-polymer,\n ag-grid-aurelia {\n display: block;\n }\n\n .ag-hidden {\n display: none !important;\n }\n\n .ag-invisible {\n visibility: hidden !important;\n }\n\n .ag-no-transition {\n transition: none !important;\n }\n\n .ag-drag-handle {\n cursor: grab;\n }\n\n .ag-column-drop-wrapper {\n display: flex;\n }\n\n .ag-column-drop-horizontal-half-width {\n display: inline-block;\n width: 50% !important;\n }\n\n .ag-unselectable {\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n .ag-selectable {\n -moz-user-select: text;\n -webkit-user-select: text;\n -ms-user-select: text;\n user-select: text;\n }\n\n .ag-tab {\n position: relative;\n }\n\n .ag-tab-guard {\n position: absolute;\n width: 0;\n height: 0;\n display: block;\n }\n\n .ag-select-agg-func-popup {\n position: absolute;\n }\n\n .ag-input-wrapper,\n .ag-picker-field-wrapper {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n line-height: normal;\n position: relative;\n }\n\n .ag-shake-left-to-right {\n animation-direction: alternate;\n animation-duration: 0.2s;\n animation-iteration-count: infinite;\n animation-name: ag-shake-left-to-right;\n }\n\n @keyframes ag-shake-left-to-right {\n from {\n padding-left: 6px;\n padding-right: 2px;\n }\n to {\n padding-left: 2px;\n padding-right: 6px;\n }\n }\n .ag-root-wrapper {\n cursor: default;\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .ag-root-wrapper.ag-layout-normal {\n height: 100%;\n }\n\n .ag-watermark {\n position: absolute;\n bottom: 20px;\n right: 25px;\n opacity: 0.5;\n transition: opacity 1s ease-out 3s;\n }\n .ag-watermark::before {\n content: '';\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDIzNSA0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzZXJpZj0iaHR0cDovL3d3dy5zZXJpZi5jb20vIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjI7Ij4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuNjM1NzIzLDAsMCwwLjYzNTcyMywtNDkyLjkyMSwtMzIzLjYwOCkiPgogICAgICAgIDxwYXRoIGQ9Ik0xMDk5LjQsNTQ5LjRMMTA5OS40LDUzNi45TDEwNzguMSw1MzYuOUwxMDY1LjYsNTQ5LjRMMTA5OS40LDU0OS40WiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNMTEyMy40LDUxOC40TDEwOTYuNyw1MTguNEwxMDg0LjEsNTMwLjlMMTEyMy40LDUzMC45TDExMjMuNCw1MTguNFoiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgPHBhdGggZD0iTTEwNTMuMiw1NjEuOUwxMDU5LjYsNTU1LjVMMTA4MS4yLDU1NS41TDEwODEuMiw1NjhMMTA1My4yLDU2OEwxMDUzLjIsNTYxLjlaIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMDU3LjksNTQzLjNMMTA3MS43LDU0My4zTDEwODQuMyw1MzAuOEwxMDU3LjksNTMwLjhMMTA1Ny45LDU0My4zWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNMTA0Mi44LDU2MS45TDEwNTMuMiw1NjEuOUwxMDY1LjYsNTQ5LjRMMTA0Mi44LDU0OS40TDEwNDIuOCw1NjEuOVoiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgPHBhdGggZD0iTTEwOTYuNyw1MTguNEwxMDkwLjMsNTI0LjhMMTA0OS41LDUyNC44TDEwNDkuNSw1MTIuM0wxMDk2LjcsNTEyLjNMMTA5Ni43LDUxOC40WiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNODI4LjYsNTU5LjdMODA5LDU1OS43TDgwNS42LDU2OC4xTDc5Nyw1NjguMUw4MTUuMSw1MjUuN0w4MjIuNiw1MjUuN0w4NDAuNyw1NjguMUw4MzIsNTY4LjFMODI4LjYsNTU5LjdaTTgyNS45LDU1M0w4MTguOCw1MzUuN0w4MTEuNyw1NTNMODI1LjksNTUzWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNOTYwLjEsNTQxLjNDOTYyLjYsNTM3LjYgOTY4LjksNTM3LjIgOTcxLjUsNTM3LjJMOTcxLjUsNTQ0LjRDOTY4LjMsNTQ0LjQgOTY1LjEsNTQ0LjUgOTYzLjIsNTQ1LjlDOTYxLjMsNTQ3LjMgOTYwLjMsNTQ5LjIgOTYwLjMsNTUxLjVMOTYwLjMsNTY4LjFMOTUyLjUsNTY4LjFMOTUyLjUsNTM3LjJMOTYwLDUzNy4yTDk2MC4xLDU0MS4zWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cmVjdCB4PSI5NzUuOCIgeT0iNTM3LjIiIHdpZHRoPSI3LjgiIGhlaWdodD0iMzAuOSIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTsiLz4KICAgICAgICA8cmVjdCB4PSI5NzUuOCIgeT0iNTIzLjQiIHdpZHRoPSI3LjgiIGhlaWdodD0iOS4yIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpOyIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMDIyLjMsNTIzLjRMMTAyMi4zLDU2OC4xTDEwMTQuOCw1NjguMUwxMDE0LjYsNTYzLjRDMTAxMy41LDU2NSAxMDEyLjEsNTY2LjMgMTAxMC40LDU2Ny4zQzEwMDguNyw1NjguMiAxMDA2LjYsNTY4LjcgMTAwNC4yLDU2OC43QzEwMDIuMSw1NjguNyAxMDAwLjEsNTY4LjMgOTk4LjQsNTY3LjZDOTk2LjYsNTY2LjggOTk1LDU2NS44IDk5My43LDU2NC40Qzk5Mi40LDU2MyA5OTEuMyw1NjEuMyA5OTAuNiw1NTkuNEM5ODkuOCw1NTcuNSA5ODkuNSw1NTUuMyA5ODkuNSw1NTIuOUM5ODkuNSw1NTAuNSA5ODkuOSw1NDguMyA5OTAuNiw1NDYuM0M5OTEuNCw1NDQuMyA5OTIuNCw1NDIuNiA5OTMuNyw1NDEuMkM5OTUsNTM5LjggOTk2LjYsNTM4LjcgOTk4LjQsNTM3LjlDMTAwMC4yLDUzNy4xIDEwMDIuMSw1MzYuNyAxMDA0LjIsNTM2LjdDMTAwNi42LDUzNi43IDEwMDguNiw1MzcuMSAxMDEwLjMsNTM4QzEwMTIsNTM4LjkgMTAxMy40LDU0MC4xIDEwMTQuNSw1NDEuOEwxMDE0LjUsNTIzLjVMMTAyMi4zLDUyMy41TDEwMjIuMyw1MjMuNFpNMTAwNS45LDU2MkMxMDA4LjUsNTYyIDEwMTAuNSw1NjEuMSAxMDEyLjEsNTU5LjRDMTAxMy43LDU1Ny43IDEwMTQuNSw1NTUuNCAxMDE0LjUsNTUyLjZDMTAxNC41LDU0OS44IDEwMTMuNyw1NDcuNiAxMDEyLjEsNTQ1LjhDMTAxMC41LDU0NC4xIDEwMDguNSw1NDMuMiAxMDA1LjksNTQzLjJDMTAwMy40LDU0My4yIDEwMDEuMyw1NDQuMSA5OTkuOCw1NDUuOEM5OTguMiw1NDcuNSA5OTcuNCw1NDkuOCA5OTcuNCw1NTIuNkM5OTcuNCw1NTUuNCA5OTguMiw1NTcuNiA5OTkuOCw1NTkuM0MxMDAxLjQsNTYxLjEgMTAwMy40LDU2MiAxMDA1LjksNTYyIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgIDxwYXRoIGQ9Ik04ODUuOCw1NDQuMkw4NjYuNSw1NDQuMkw4NjYuNSw1NTAuOUw4NzcuNSw1NTAuOUM4NzcuMiw1NTQuMyA4NzUuOSw1NTYuOSA4NzMuNyw1NTlDODcxLjUsNTYxIDg2OC43LDU2MiA4NjUuMSw1NjJDODYzLjEsNTYyIDg2MS4yLDU2MS42IDg1OS42LDU2MC45Qzg1Ny45LDU2MC4yIDg1Ni41LDU1OS4yIDg1NS4zLDU1Ny44Qzg1NC4xLDU1Ni41IDg1My4yLDU1NC45IDg1Mi41LDU1M0M4NTEuOCw1NTEuMSA4NTEuNSw1NDkuMSA4NTEuNSw1NDYuOEM4NTEuNSw1NDQuNSA4NTEuOCw1NDIuNSA4NTIuNSw1NDAuNkM4NTMuMSw1MzguNyA4NTQuMSw1MzcuMiA4NTUuMyw1MzUuOEM4NTYuNSw1MzQuNSA4NTcuOSw1MzMuNSA4NTkuNiw1MzIuN0M4NjEuMyw1MzIgODYzLjEsNTMxLjYgODY1LjIsNTMxLjZDODY5LjQsNTMxLjYgODcyLjYsNTMyLjYgODc0LjgsNTM0LjZMODgwLDUyOS40Qzg3Ni4xLDUyNi40IDg3MS4xLDUyNC44IDg2NS4yLDUyNC44Qzg2MS45LDUyNC44IDg1OC45LDUyNS4zIDg1Ni4yLDUyNi40Qzg1My41LDUyNy41IDg1MS4yLDUyOC45IDg0OS4zLDUzMC44Qzg0Ny40LDUzMi43IDg0NS45LDUzNSA4NDQuOSw1MzcuN0M4NDMuOSw1NDAuNCA4NDMuNCw1NDMuNCA4NDMuNCw1NDYuNkM4NDMuNCw1NDkuOCA4NDMuOSw1NTIuOCA4NDUsNTU1LjVDODQ2LjEsNTU4LjIgODQ3LjUsNTYwLjUgODQ5LjQsNTYyLjRDODUxLjMsNTY0LjMgODUzLjYsNTY1LjggODU2LjMsNTY2LjhDODU5LDU2Ny45IDg2Miw1NjguNCA4NjUuMiw1NjguNEM4NjguNCw1NjguNCA4NzEuMyw1NjcuOSA4NzMuOSw1NjYuOEM4NzYuNSw1NjUuNyA4NzguNyw1NjQuMyA4ODAuNSw1NjIuNEM4ODIuMyw1NjAuNSA4ODMuNyw1NTguMiA4ODQuNyw1NTUuNUM4ODUuNyw1NTIuOCA4ODYuMiw1NDkuOCA4ODYuMiw1NDYuNkw4ODYuMiw1NDUuM0M4ODUuOSw1NDUuMSA4ODUuOCw1NDQuNiA4ODUuOCw1NDQuMiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNOTQ2LjgsNTQ0LjJMOTI3LjUsNTQ0LjJMOTI3LjUsNTUwLjlMOTM4LjUsNTUwLjlDOTM4LjIsNTU0LjMgOTM2LjksNTU2LjkgOTM0LjcsNTU5QzkzMi41LDU2MSA5MjkuNyw1NjIgOTI2LjEsNTYyQzkyNC4xLDU2MiA5MjIuMiw1NjEuNiA5MjAuNiw1NjAuOUM5MTguOSw1NjAuMiA5MTcuNSw1NTkuMiA5MTYuMyw1NTcuOEM5MTUuMSw1NTYuNSA5MTQuMiw1NTQuOSA5MTMuNSw1NTNDOTEyLjgsNTUxLjEgOTEyLjUsNTQ5LjEgOTEyLjUsNTQ2LjhDOTEyLjUsNTQ0LjUgOTEyLjgsNTQyLjUgOTEzLjUsNTQwLjZDOTE0LjEsNTM4LjcgOTE1LjEsNTM3LjIgOTE2LjMsNTM1LjhDOTE3LjUsNTM0LjUgOTE4LjksNTMzLjUgOTIwLjYsNTMyLjdDOTIyLjMsNTMyIDkyNC4xLDUzMS42IDkyNi4yLDUzMS42QzkzMC40LDUzMS42IDkzMy42LDUzMi42IDkzNS44LDUzNC42TDk0MSw1MjkuNEM5MzcuMSw1MjYuNCA5MzIuMSw1MjQuOCA5MjYuMiw1MjQuOEM5MjIuOSw1MjQuOCA5MTkuOSw1MjUuMyA5MTcuMiw1MjYuNEM5MTQuNSw1MjcuNSA5MTIuMiw1MjguOSA5MTAuMyw1MzAuOEM5MDguNCw1MzIuNyA5MDYuOSw1MzUgOTA1LjksNTM3LjdDOTA0LjksNTQwLjQgOTA0LjQsNTQzLjQgOTA0LjQsNTQ2LjZDOTA0LjQsNTQ5LjggOTA0LjksNTUyLjggOTA2LDU1NS41QzkwNy4xLDU1OC4yIDkwOC41LDU2MC41IDkxMC40LDU2Mi40QzkxMi4zLDU2NC4zIDkxNC42LDU2NS44IDkxNy4zLDU2Ni44QzkyMCw1NjcuOSA5MjMsNTY4LjQgOTI2LjIsNTY4LjRDOTI5LjQsNTY4LjQgOTMyLjMsNTY3LjkgOTM0LjksNTY2LjhDOTM3LjUsNTY1LjcgOTM5LjcsNTY0LjMgOTQxLjUsNTYyLjRDOTQzLjMsNTYwLjUgOTQ0LjcsNTU4LjIgOTQ1LjcsNTU1LjVDOTQ2LjcsNTUyLjggOTQ3LjIsNTQ5LjggOTQ3LjIsNTQ2LjZMOTQ3LjIsNTQ1LjNDOTQ2LjksNTQ1LjEgOTQ2LjgsNTQ0LjYgOTQ2LjgsNTQ0LjIiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);\n background-repeat: no-repeat;\n background-size: 170px 40px;\n display: block;\n height: 40px;\n width: 170px;\n opacity: 0.5;\n }\n\n .ag-watermark-text {\n opacity: 0.5;\n font-weight: bold;\n font-family: Impact, sans-serif;\n font-size: 19px;\n padding-left: 0.7rem;\n }\n\n .ag-root-wrapper-body {\n display: flex;\n flex-direction: row;\n }\n .ag-root-wrapper-body.ag-layout-normal {\n flex: 1 1 auto;\n height: 0;\n min-height: 0;\n }\n\n .ag-root {\n position: relative;\n display: flex;\n flex-direction: column;\n }\n .ag-root.ag-layout-normal,\n .ag-root.ag-layout-auto-height {\n overflow: hidden;\n flex: 1 1 auto;\n width: 0;\n }\n .ag-root.ag-layout-normal {\n height: 100%;\n }\n\n .ag-header-viewport,\n .ag-floating-top-viewport,\n .ag-body-viewport,\n .ag-center-cols-viewport,\n .ag-floating-bottom-viewport,\n .ag-body-horizontal-scroll-viewport,\n .ag-body-vertical-scroll-viewport,\n .ag-virtual-list-viewport,\n .ag-sticky-top-viewport {\n position: relative;\n height: 100%;\n min-width: 0px;\n overflow: hidden;\n flex: 1 1 auto;\n }\n\n .ag-body-viewport {\n display: flex;\n }\n .ag-body-viewport.ag-layout-normal {\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n }\n\n .ag-center-cols-viewport {\n width: 100%;\n overflow-x: auto;\n }\n\n .ag-body-horizontal-scroll-viewport {\n overflow-x: scroll;\n }\n\n .ag-body-vertical-scroll-viewport {\n overflow-y: scroll;\n }\n\n .ag-virtual-list-viewport {\n overflow: auto;\n width: 100%;\n }\n\n .ag-header-container,\n .ag-floating-top-container,\n .ag-body-container,\n .ag-pinned-right-cols-container,\n .ag-center-cols-container,\n .ag-pinned-left-cols-container,\n .ag-floating-bottom-container,\n .ag-body-horizontal-scroll-container,\n .ag-body-vertical-scroll-container,\n .ag-full-width-container,\n .ag-floating-bottom-full-width-container,\n .ag-virtual-list-container,\n .ag-sticky-top-container {\n position: relative;\n }\n\n .ag-header-container,\n .ag-floating-top-container,\n .ag-floating-bottom-container,\n .ag-sticky-top-container {\n height: 100%;\n white-space: nowrap;\n }\n\n .ag-center-cols-container {\n display: block;\n }\n\n .ag-pinned-right-cols-container {\n display: block;\n }\n\n .ag-body-horizontal-scroll-container {\n height: 100%;\n }\n\n .ag-body-vertical-scroll-container {\n width: 100%;\n }\n\n .ag-full-width-container,\n .ag-floating-top-full-width-container,\n .ag-floating-bottom-full-width-container,\n .ag-sticky-top-full-width-container {\n position: absolute;\n top: 0px;\n left: 0px;\n pointer-events: none;\n }\n\n .ag-full-width-container {\n width: 100%;\n }\n\n .ag-floating-bottom-full-width-container,\n .ag-floating-top-full-width-container {\n display: inline-block;\n overflow: hidden;\n height: 100%;\n width: 100%;\n }\n\n .ag-virtual-list-container {\n overflow: hidden;\n }\n\n .ag-center-cols-clipper {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n min-height: 100%;\n transform: translate3d(0, 0, 0);\n }\n\n .ag-body {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n flex-direction: row !important;\n min-height: 0;\n }\n\n .ag-body-clipper {\n overflow: hidden;\n min-width: 0px;\n flex: 1 1 auto;\n height: 100%;\n transform: translate3d(0, 0, 0);\n }\n\n .ag-body-horizontal-scroll,\n .ag-body-vertical-scroll {\n min-height: 0;\n min-width: 0;\n display: flex;\n position: relative;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible,\n .ag-body-vertical-scroll.ag-scrollbar-invisible {\n position: absolute;\n bottom: 0;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar {\n opacity: 0;\n transition: opacity 400ms;\n visibility: hidden;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-scrolling,\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-active,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-scrolling,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-active {\n visibility: visible;\n opacity: 1;\n }\n\n .ag-body-horizontal-scroll {\n width: 100%;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible {\n left: 0;\n right: 0;\n }\n\n .ag-body-vertical-scroll {\n height: 100%;\n }\n .ag-body-vertical-scroll.ag-scrollbar-invisible {\n top: 0;\n z-index: 10;\n }\n .ag-ltr .ag-body-vertical-scroll.ag-scrollbar-invisible {\n right: 0;\n }\n .ag-rtl .ag-body-vertical-scroll.ag-scrollbar-invisible {\n left: 0;\n }\n\n .ag-force-vertical-scroll {\n overflow-y: scroll !important;\n }\n\n .ag-horizontal-left-spacer,\n .ag-horizontal-right-spacer {\n height: 100%;\n min-width: 0;\n overflow-x: scroll;\n }\n .ag-horizontal-left-spacer.ag-scroller-corner,\n .ag-horizontal-right-spacer.ag-scroller-corner {\n overflow-x: hidden;\n }\n\n .ag-header,\n .ag-pinned-left-header,\n .ag-pinned-right-header {\n display: inline-block;\n overflow: hidden;\n position: relative;\n }\n\n .ag-header-cell-sortable {\n cursor: pointer;\n }\n\n .ag-header {\n display: flex;\n width: 100%;\n white-space: nowrap;\n }\n\n .ag-pinned-left-header {\n height: 100%;\n }\n\n .ag-pinned-right-header {\n height: 100%;\n }\n\n .ag-header-row {\n position: absolute;\n overflow: hidden;\n }\n\n .ag-header-cell {\n display: inline-flex;\n align-items: center;\n position: absolute;\n height: 100%;\n overflow: hidden;\n }\n\n .ag-header-cell.ag-header-active .ag-header-cell-menu-button {\n opacity: 1;\n }\n\n .ag-header-cell-menu-button:not(.ag-header-menu-always-show) {\n transition: opacity 0.2s;\n opacity: 0;\n }\n\n .ag-header-group-cell-label,\n .ag-header-cell-label {\n display: flex;\n flex: 1 1 auto;\n overflow: hidden;\n align-items: center;\n text-overflow: ellipsis;\n align-self: stretch;\n }\n\n .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ag-header-cell:not(.ag-header-cell-auto-height) .ag-header-cell-comp-wrapper {\n height: 100%;\n display: flex;\n align-items: center;\n }\n\n .ag-header-cell-comp-wrapper {\n width: 100%;\n overflow: hidden;\n }\n\n .ag-header-cell-wrap-text .ag-header-cell-comp-wrapper {\n white-space: normal;\n }\n\n .ag-right-aligned-header .ag-header-cell-label {\n flex-direction: row-reverse;\n }\n\n .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ag-header-cell-resize {\n position: absolute;\n z-index: 2;\n height: 100%;\n width: 8px;\n top: 0;\n cursor: ew-resize;\n }\n .ag-ltr .ag-header-cell-resize {\n right: -4px;\n }\n .ag-rtl .ag-header-cell-resize {\n left: -4px;\n }\n\n .ag-pinned-left-header .ag-header-cell-resize {\n right: -4px;\n }\n\n .ag-pinned-right-header .ag-header-cell-resize {\n left: -4px;\n }\n\n .ag-header-select-all {\n display: flex;\n }\n\n .ag-column-moving .ag-cell {\n transition: left 0.2s;\n }\n .ag-column-moving .ag-header-cell {\n transition: left 0.2s;\n }\n .ag-column-moving .ag-header-group-cell {\n transition:\n left 0.2s,\n width 0.2s;\n }\n\n .ag-column-panel {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n flex: 1 1 auto;\n }\n\n .ag-column-select {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n flex: 3 1 0px;\n }\n\n .ag-column-select-header {\n position: relative;\n display: flex;\n flex: none;\n }\n\n .ag-column-select-header-icon {\n position: relative;\n }\n\n .ag-column-select-header-filter-wrapper {\n flex: 1 1 auto;\n }\n\n .ag-column-select-header-filter {\n width: 100%;\n }\n\n .ag-column-select-list {\n flex: 1 1 0px;\n overflow: hidden;\n }\n\n .ag-column-drop {\n position: relative;\n display: inline-flex;\n align-items: center;\n overflow: auto;\n width: 100%;\n }\n\n .ag-column-drop-list {\n display: flex;\n align-items: center;\n }\n\n .ag-column-drop-cell {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .ag-column-drop-cell-text {\n overflow: hidden;\n flex: 1 1 auto;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ag-column-drop-vertical {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n align-items: stretch;\n flex: 1 1 0px;\n }\n\n .ag-column-drop-vertical-title-bar {\n display: flex;\n align-items: center;\n flex: none;\n }\n\n .ag-column-drop-vertical-list {\n position: relative;\n align-items: stretch;\n flex-grow: 1;\n flex-direction: column;\n overflow-x: auto;\n }\n .ag-column-drop-vertical-list > * {\n flex: none;\n }\n\n .ag-column-drop-empty .ag-column-drop-vertical-list {\n overflow: hidden;\n }\n\n .ag-column-drop-vertical-empty-message {\n display: block;\n }\n\n .ag-column-drop.ag-column-drop-horizontal {\n white-space: nowrap;\n overflow: hidden;\n }\n\n .ag-column-drop-cell-button {\n cursor: pointer;\n }\n\n .ag-filter-toolpanel {\n flex: 1 1 0px;\n min-width: 0;\n }\n\n .ag-filter-toolpanel-header {\n position: relative;\n }\n\n .ag-filter-toolpanel-header,\n .ag-filter-toolpanel-search {\n display: flex;\n align-items: center;\n }\n .ag-filter-toolpanel-header > *,\n .ag-filter-toolpanel-search > * {\n display: flex;\n align-items: center;\n }\n\n .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n overflow: hidden;\n }\n\n .ag-row-animation .ag-row {\n transition:\n transform 0.4s,\n top 0.4s,\n background-color 0.1s,\n opacity 0.2s;\n }\n\n .ag-row-animation .ag-row.ag-after-created {\n transition:\n transform 0.4s,\n top 0.4s,\n height 0.4s,\n background-color 0.1s,\n opacity 0.2s;\n }\n\n .ag-row-no-animation .ag-row {\n transition: background-color 0.1s;\n }\n\n .ag-row {\n white-space: nowrap;\n width: 100%;\n }\n\n .ag-row-loading {\n display: flex;\n align-items: center;\n }\n\n .ag-row-position-absolute {\n position: absolute;\n }\n\n .ag-row-position-relative {\n position: relative;\n }\n\n .ag-full-width-row {\n overflow: hidden;\n pointer-events: all;\n }\n\n .ag-row-inline-editing {\n z-index: 1;\n }\n\n .ag-row-dragging {\n z-index: 2;\n }\n\n .ag-stub-cell {\n display: flex;\n align-items: center;\n }\n\n .ag-cell {\n display: inline-block;\n position: absolute;\n white-space: nowrap;\n height: 100%;\n }\n\n .ag-cell-value {\n flex: 1 1 auto;\n }\n\n .ag-cell-value,\n .ag-group-value {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ag-cell-wrap-text {\n white-space: normal;\n word-break: break-all;\n }\n\n .ag-cell-wrapper {\n display: flex;\n align-items: center;\n }\n .ag-cell-wrapper.ag-row-group {\n align-items: flex-start;\n }\n\n .ag-sparkline-wrapper {\n position: absolute;\n height: 100%;\n width: 100%;\n left: 0;\n top: 0;\n }\n\n .ag-full-width-row .ag-cell-wrapper.ag-row-group {\n height: 100%;\n align-items: center;\n }\n\n .ag-cell-inline-editing {\n z-index: 1;\n }\n .ag-cell-inline-editing .ag-cell-wrapper,\n .ag-cell-inline-editing .ag-cell-edit-wrapper,\n .ag-cell-inline-editing .ag-cell-editor,\n .ag-cell-inline-editing .ag-cell-editor .ag-wrapper,\n .ag-cell-inline-editing .ag-cell-editor input {\n height: 100%;\n width: 100%;\n line-height: normal;\n }\n\n .ag-cell .ag-icon {\n display: inline-block;\n vertical-align: middle;\n }\n\n .ag-set-filter-item {\n display: flex;\n align-items: center;\n height: 100%;\n }\n\n .ag-set-filter-item-checkbox {\n display: flex;\n overflow: hidden;\n }\n\n .ag-set-filter-group-icons {\n display: block;\n }\n .ag-set-filter-group-icons > * {\n cursor: pointer;\n }\n\n .ag-filter-body-wrapper {\n display: flex;\n flex-direction: column;\n }\n\n .ag-filter-filter {\n flex: 1 1 0px;\n }\n\n .ag-filter-condition {\n display: flex;\n justify-content: center;\n }\n\n .ag-floating-filter-body {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n height: 100%;\n }\n\n .ag-floating-filter-full-body {\n display: flex;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n align-items: center;\n overflow: hidden;\n }\n\n .ag-floating-filter-full-body > div {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-input {\n align-items: center;\n display: flex;\n width: 100%;\n }\n .ag-floating-filter-input > * {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-button {\n display: flex;\n flex: none;\n }\n\n .ag-dnd-ghost {\n position: absolute;\n display: inline-flex;\n align-items: center;\n cursor: move;\n white-space: nowrap;\n z-index: 9999;\n }\n\n .ag-overlay {\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n .ag-overlay-panel {\n display: flex;\n height: 100%;\n width: 100%;\n }\n\n .ag-overlay-wrapper {\n display: flex;\n flex: none;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n text-align: center;\n }\n\n .ag-overlay-loading-wrapper {\n pointer-events: all;\n }\n\n .ag-popup-child {\n z-index: 5;\n top: 0;\n }\n\n .ag-popup-editor {\n position: absolute;\n user-select: none;\n z-index: 1;\n }\n\n .ag-large-text-input {\n display: block;\n }\n\n .ag-virtual-list-item {\n position: absolute;\n width: 100%;\n }\n\n .ag-floating-top {\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n position: relative;\n display: flex;\n }\n\n .ag-pinned-left-floating-top {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-pinned-right-floating-top {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-floating-bottom {\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n position: relative;\n display: flex;\n }\n\n .ag-pinned-left-floating-bottom {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-pinned-right-floating-bottom {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-sticky-top {\n position: absolute;\n display: flex;\n width: 100%;\n }\n\n .ag-pinned-left-sticky-top,\n .ag-pinned-right-sticky-top {\n position: relative;\n height: 100%;\n overflow: hidden;\n }\n\n .ag-sticky-top-full-width-container {\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .ag-dialog,\n .ag-panel {\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n }\n\n .ag-panel-title-bar {\n display: flex;\n flex: none;\n align-items: center;\n cursor: default;\n }\n\n .ag-panel-title-bar-title {\n flex: 1 1 auto;\n }\n\n .ag-panel-title-bar-buttons {\n display: flex;\n }\n\n .ag-panel-title-bar-button {\n cursor: pointer;\n }\n\n .ag-panel-content-wrapper {\n display: flex;\n flex: 1 1 auto;\n position: relative;\n overflow: hidden;\n }\n\n .ag-dialog {\n position: absolute;\n }\n\n .ag-resizer {\n position: absolute;\n pointer-events: none;\n user-select: none;\n z-index: 1;\n }\n .ag-resizer.ag-resizer-topLeft {\n top: 0;\n left: 0;\n height: 5px;\n width: 5px;\n cursor: nwse-resize;\n }\n .ag-resizer.ag-resizer-top {\n top: 0;\n left: 5px;\n right: 5px;\n height: 5px;\n cursor: ns-resize;\n }\n .ag-resizer.ag-resizer-topRight {\n top: 0;\n right: 0;\n height: 5px;\n width: 5px;\n cursor: nesw-resize;\n }\n .ag-resizer.ag-resizer-right {\n top: 5px;\n right: 0;\n bottom: 5px;\n width: 5px;\n cursor: ew-resize;\n }\n .ag-resizer.ag-resizer-bottomRight {\n bottom: 0;\n right: 0;\n height: 5px;\n width: 5px;\n cursor: nwse-resize;\n }\n .ag-resizer.ag-resizer-bottom {\n bottom: 0;\n left: 5px;\n right: 5px;\n height: 5px;\n cursor: ns-resize;\n }\n .ag-resizer.ag-resizer-bottomLeft {\n bottom: 0;\n left: 0;\n height: 5px;\n width: 5px;\n cursor: nesw-resize;\n }\n .ag-resizer.ag-resizer-left {\n left: 0;\n top: 5px;\n bottom: 5px;\n width: 5px;\n cursor: ew-resize;\n }\n\n .ag-tooltip {\n position: absolute;\n pointer-events: none;\n z-index: 99999;\n }\n\n .ag-tooltip-custom {\n position: absolute;\n pointer-events: none;\n z-index: 99999;\n }\n\n .ag-value-slide-out {\n margin-right: 5px;\n opacity: 1;\n transition:\n opacity 3s,\n margin-right 3s;\n transition-timing-function: linear;\n }\n\n .ag-value-slide-out-end {\n margin-right: 10px;\n opacity: 0;\n }\n\n .ag-opacity-zero {\n opacity: 0 !important;\n }\n\n .ag-menu {\n max-height: 100%;\n overflow-y: auto;\n position: absolute;\n user-select: none;\n }\n\n .ag-menu-column-select-wrapper {\n height: 265px;\n overflow: auto;\n }\n .ag-menu-column-select-wrapper .ag-column-select {\n height: 100%;\n }\n\n .ag-menu-list {\n display: table;\n width: 100%;\n }\n\n .ag-menu-option,\n .ag-menu-separator {\n display: table-row;\n }\n\n .ag-menu-option-part,\n .ag-menu-separator-part {\n display: table-cell;\n vertical-align: middle;\n }\n\n .ag-menu-option-text {\n white-space: nowrap;\n }\n\n .ag-compact-menu-option {\n width: 100%;\n display: flex;\n flex-wrap: nowrap;\n }\n\n .ag-compact-menu-option-text {\n white-space: nowrap;\n flex: 1 1 auto;\n }\n\n .ag-rich-select {\n cursor: default;\n outline: none;\n }\n\n .ag-rich-select-value {\n display: flex;\n align-items: center;\n }\n\n .ag-rich-select-value-icon {\n flex: 1 1 auto;\n order: 1;\n }\n .ag-ltr .ag-rich-select-value-icon {\n text-align: right;\n }\n .ag-rtl .ag-rich-select-value-icon {\n text-align: left;\n }\n\n .ag-rich-select-list {\n position: relative;\n }\n\n .ag-rich-select-virtual-list-item {\n display: flex;\n }\n\n .ag-rich-select-row {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n white-space: nowrap;\n }\n\n .ag-paging-panel {\n align-items: center;\n display: flex;\n justify-content: flex-end;\n }\n\n .ag-paging-page-summary-panel {\n display: flex;\n align-items: center;\n }\n\n .ag-paging-button {\n position: relative;\n }\n\n .ag-disabled .ag-paging-page-summary-panel {\n pointer-events: none;\n }\n\n .ag-tool-panel-wrapper {\n display: flex;\n overflow-y: auto;\n overflow-x: hidden;\n cursor: default;\n user-select: none;\n }\n\n .ag-column-select-column,\n .ag-column-select-column-group,\n .ag-select-agg-func-item {\n position: relative;\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n text-overflow: ellipsis;\n white-space: nowrap;\n height: 100%;\n }\n .ag-column-select-column > *,\n .ag-column-select-column-group > *,\n .ag-select-agg-func-item > * {\n flex: none;\n }\n\n .ag-column-select-checkbox {\n display: flex;\n }\n\n .ag-tool-panel-horizontal-resize {\n cursor: ew-resize;\n height: 100%;\n position: absolute;\n top: 0;\n width: 5px;\n z-index: 1;\n }\n\n .ag-ltr .ag-side-bar-left .ag-tool-panel-horizontal-resize {\n right: -3px;\n }\n .ag-rtl .ag-side-bar-left .ag-tool-panel-horizontal-resize {\n left: -3px;\n }\n\n .ag-ltr .ag-side-bar-right .ag-tool-panel-horizontal-resize {\n left: -3px;\n }\n .ag-rtl .ag-side-bar-right .ag-tool-panel-horizontal-resize {\n right: -3px;\n }\n\n .ag-details-row {\n width: 100%;\n }\n\n .ag-details-row-fixed-height {\n height: 100%;\n }\n\n .ag-details-grid {\n width: 100%;\n }\n\n .ag-details-grid-fixed-height {\n height: 100%;\n }\n\n .ag-header-group-cell {\n display: flex;\n align-items: center;\n height: 100%;\n position: absolute;\n }\n\n .ag-cell-label-container {\n display: flex;\n justify-content: space-between;\n flex-direction: row-reverse;\n align-items: center;\n height: 100%;\n width: 100%;\n overflow: hidden;\n padding: 5px 0px;\n }\n\n .ag-right-aligned-header .ag-cell-label-container {\n flex-direction: row;\n }\n\n .ag-side-bar {\n display: flex;\n flex-direction: row-reverse;\n }\n\n .ag-side-bar-left {\n order: -1;\n flex-direction: row;\n }\n\n .ag-side-button-button {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex-wrap: nowrap;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n }\n\n .ag-side-button-label {\n writing-mode: vertical-lr;\n }\n\n .ag-status-bar {\n display: flex;\n justify-content: space-between;\n overflow: hidden;\n }\n\n .ag-status-panel {\n display: inline-flex;\n }\n\n .ag-status-name-value {\n white-space: nowrap;\n }\n\n .ag-status-bar-left {\n display: inline-flex;\n }\n\n .ag-status-bar-center {\n display: inline-flex;\n }\n\n .ag-status-bar-right {\n display: inline-flex;\n }\n\n .ag-icon {\n display: block;\n speak: none;\n }\n\n .ag-group {\n position: relative;\n width: 100%;\n }\n\n .ag-group-title-bar {\n display: flex;\n align-items: center;\n }\n\n .ag-group-title {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .ag-group-title-bar .ag-group-title {\n cursor: default;\n }\n\n .ag-group-toolbar {\n display: flex;\n align-items: center;\n }\n\n .ag-group-container {\n display: flex;\n }\n\n .ag-disabled .ag-group-container {\n pointer-events: none;\n }\n\n .ag-group-container-horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n }\n\n .ag-group-container-vertical {\n flex-direction: column;\n }\n\n .ag-column-group-icons {\n display: block;\n }\n .ag-column-group-icons > * {\n cursor: pointer;\n }\n\n .ag-group-item-alignment-stretch .ag-group-item {\n align-items: stretch;\n }\n\n .ag-group-item-alignment-start .ag-group-item {\n align-items: flex-start;\n }\n\n .ag-group-item-alignment-end .ag-group-item {\n align-items: flex-end;\n }\n\n .ag-toggle-button-icon {\n transition: right 0.3s;\n position: absolute;\n top: -1px;\n }\n\n .ag-input-field,\n .ag-select {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n\n .ag-input-field-input {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-input .ag-input-field-input[type='date'] {\n width: 1px;\n }\n\n .ag-range-field {\n display: flex;\n align-items: center;\n }\n\n .ag-angle-select {\n display: flex;\n align-items: center;\n }\n\n .ag-angle-select-wrapper {\n display: flex;\n }\n\n .ag-angle-select-parent-circle {\n display: block;\n position: relative;\n }\n\n .ag-angle-select-child-circle {\n position: absolute;\n }\n\n .ag-slider-wrapper {\n display: flex;\n }\n .ag-slider-wrapper .ag-input-field {\n flex: 1 1 auto;\n }\n\n .ag-picker-field-display {\n flex: 1 1 auto;\n }\n\n .ag-picker-field {\n display: flex;\n align-items: center;\n }\n\n .ag-picker-field-icon {\n display: flex;\n border: 0;\n padding: 0;\n margin: 0;\n cursor: pointer;\n }\n\n .ag-picker-field-wrapper {\n overflow: hidden;\n }\n\n .ag-label-align-right .ag-label {\n order: 1;\n }\n .ag-label-align-right > * {\n flex: none;\n }\n\n .ag-label-align-top {\n flex-direction: column;\n align-items: flex-start;\n }\n .ag-label-align-top > * {\n align-self: stretch;\n }\n\n .ag-label-ellipsis {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n }\n\n .ag-color-panel {\n width: 100%;\n display: flex;\n flex-direction: column;\n text-align: center;\n }\n\n .ag-spectrum-color {\n flex: 1 1 auto;\n position: relative;\n overflow: hidden;\n cursor: default;\n }\n\n .ag-spectrum-fill {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .ag-spectrum-val {\n cursor: pointer;\n }\n\n .ag-spectrum-dragger {\n position: absolute;\n pointer-events: none;\n cursor: pointer;\n }\n\n .ag-spectrum-hue {\n cursor: default;\n background: linear-gradient(\n to left,\n #ff0000 3%,\n #ffff00 17%,\n #00ff00 33%,\n #00ffff 50%,\n #0000ff 67%,\n #ff00ff 83%,\n #ff0000 100%\n );\n }\n\n .ag-spectrum-alpha {\n cursor: default;\n }\n\n .ag-spectrum-hue-background {\n width: 100%;\n height: 100%;\n }\n\n .ag-spectrum-alpha-background {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgb(0, 0, 0));\n width: 100%;\n height: 100%;\n }\n\n .ag-spectrum-tool {\n cursor: pointer;\n }\n\n .ag-spectrum-slider {\n position: absolute;\n pointer-events: none;\n }\n\n .ag-recent-colors {\n display: flex;\n }\n\n .ag-recent-color {\n cursor: pointer;\n }\n\n .ag-ltr .ag-column-select-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-column-select-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-set-filter-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-set-filter-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-row-group-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-row-group-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-column-select-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-column-select-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-set-filter-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-set-filter-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-row-group-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-row-group-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-column-select-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-column-select-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-set-filter-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-set-filter-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-row-group-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-row-group-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-column-select-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-column-select-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-set-filter-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-set-filter-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-row-group-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-row-group-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-column-select-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-column-select-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-set-filter-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-set-filter-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-row-group-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-row-group-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-column-select-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-column-select-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-set-filter-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-set-filter-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-row-group-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-row-group-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-column-select-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-column-select-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-set-filter-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-set-filter-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-row-group-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-row-group-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-column-select-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-column-select-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-set-filter-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-set-filter-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-row-group-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-row-group-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-column-select-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-column-select-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr .ag-set-filter-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-set-filter-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr .ag-row-group-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-row-group-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr {\n direction: ltr;\n }\n .ag-ltr .ag-body,\n .ag-ltr .ag-floating-top,\n .ag-ltr .ag-floating-bottom,\n .ag-ltr .ag-header,\n .ag-ltr .ag-body-viewport,\n .ag-ltr .ag-body-horizontal-scroll {\n flex-direction: row;\n }\n\n .ag-rtl {\n direction: rtl;\n }\n .ag-rtl .ag-body,\n .ag-rtl .ag-floating-top,\n .ag-rtl .ag-floating-bottom,\n .ag-rtl .ag-header,\n .ag-rtl .ag-body-viewport,\n .ag-rtl .ag-body-horizontal-scroll {\n flex-direction: row-reverse;\n }\n .ag-rtl .ag-icon-contracted,\n .ag-rtl .ag-icon-expanded,\n .ag-rtl .ag-icon-tree-closed {\n display: block;\n transform: rotate(180deg);\n }\n\n .ag-body .ag-body-viewport {\n -webkit-overflow-scrolling: touch;\n }\n\n .ag-layout-print.ag-body {\n display: block;\n height: unset;\n }\n .ag-layout-print.ag-body-clipper {\n height: unset;\n }\n .ag-layout-print.ag-root-wrapper {\n display: inline-flex;\n }\n .ag-layout-print .ag-center-cols-clipper {\n min-width: 100%;\n }\n .ag-layout-print .ag-body-vertical-scroll {\n display: none;\n }\n .ag-layout-print .ag-body-horizontal-scroll {\n display: none;\n }\n .ag-layout-print.ag-force-vertical-scroll {\n overflow-y: visible !important;\n }\n\n @media print {\n .ag-root-wrapper.ag-layout-print {\n display: table;\n }\n .ag-root-wrapper.ag-layout-print .ag-root-wrapper-body,\n .ag-root-wrapper.ag-layout-print .ag-root,\n .ag-root-wrapper.ag-layout-print .ag-body-viewport,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-container,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-viewport,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-clipper,\n .ag-root-wrapper.ag-layout-print .ag-body-horizontal-scroll-viewport,\n .ag-root-wrapper.ag-layout-print .ag-virtual-list-viewport {\n height: auto !important;\n overflow: hidden !important;\n display: block !important;\n }\n .ag-root-wrapper.ag-layout-print .ag-row,\n .ag-root-wrapper.ag-layout-print .ag-cell {\n break-inside: avoid;\n }\n }\n [class^='ag-'],\n [class^='ag-']:focus,\n [class^='ag-']:after,\n [class^='ag-']:before {\n box-sizing: border-box;\n outline: none;\n }\n\n [class^='ag-']::-ms-clear {\n display: none;\n }\n\n .ag-checkbox .ag-input-wrapper,\n .ag-radio-button .ag-input-wrapper {\n overflow: visible;\n }\n\n .ag-range-field .ag-input-wrapper {\n height: 100%;\n }\n\n .ag-toggle-button {\n flex: none;\n width: unset;\n min-width: unset;\n }\n\n .ag-ltr .ag-label-align-right .ag-label {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-label-align-right .ag-label {\n margin-right: var(--ag-grid-size);\n }\n\n input[class^='ag-'] {\n margin: 0;\n background-color: var(--ag-background-color);\n }\n\n textarea[class^='ag-'],\n select[class^='ag-'] {\n background-color: var(--ag-background-color);\n }\n\n input[class^='ag-']:not([type]),\n input[class^='ag-'][type='text'],\n input[class^='ag-'][type='number'],\n input[class^='ag-'][type='tel'],\n input[class^='ag-'][type='date'],\n input[class^='ag-'][type='datetime-local'],\n textarea[class^='ag-'] {\n font-size: inherit;\n line-height: inherit;\n color: inherit;\n border: var(--ag-borders-input) var(--ag-input-border-color);\n }\n input[class^='ag-']:not([type]):disabled,\n input[class^='ag-'][type='text']:disabled,\n input[class^='ag-'][type='number']:disabled,\n input[class^='ag-'][type='tel']:disabled,\n input[class^='ag-'][type='date']:disabled,\n input[class^='ag-'][type='datetime-local']:disabled,\n textarea[class^='ag-']:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n input[class^='ag-']:not([type]):focus,\n input[class^='ag-'][type='text']:focus,\n input[class^='ag-'][type='number']:focus,\n input[class^='ag-'][type='tel']:focus,\n input[class^='ag-'][type='date']:focus,\n input[class^='ag-'][type='datetime-local']:focus,\n textarea[class^='ag-']:focus {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-']:not([type]):invalid,\n input[class^='ag-'][type='text']:invalid,\n input[class^='ag-'][type='number']:invalid,\n input[class^='ag-'][type='tel']:invalid,\n input[class^='ag-'][type='date']:invalid,\n input[class^='ag-'][type='datetime-local']:invalid,\n textarea[class^='ag-']:invalid {\n border: var(--ag-borders-input-invalid) var(--ag-input-border-color-invalid);\n }\n\n input[class^='ag-'][type='number'] {\n -moz-appearance: textfield;\n }\n input[class^='ag-'][type='number']::-webkit-outer-spin-button,\n input[class^='ag-'][type='number']::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n input[class^='ag-'][type='range'] {\n padding: 0;\n }\n\n input[class^='ag-'][type='button']:focus,\n button[class^='ag-']:focus {\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n\n .ag-drag-handle {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-list-item,\n .ag-virtual-list-item {\n height: var(--ag-list-item-height);\n }\n\n .ag-keyboard-focus .ag-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-select-list {\n background-color: var(--ag-background-color);\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n .ag-list-item {\n display: flex;\n align-items: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .ag-list-item.ag-active-item {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-select-list-item {\n padding-left: 4px;\n padding-right: 4px;\n cursor: default;\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n .ag-select-list-item span {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .ag-select .ag-picker-field-wrapper {\n background-color: var(--ag-background-color);\n min-height: var(--ag-list-item-height);\n cursor: default;\n }\n .ag-select.ag-disabled .ag-picker-field-wrapper:focus {\n box-shadow: none;\n }\n .ag-select:not(.ag-cell-editor) {\n height: var(--ag-list-item-height);\n }\n .ag-select .ag-picker-field-display {\n margin: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .ag-select .ag-picker-field-icon {\n display: flex;\n align-items: center;\n }\n .ag-select.ag-disabled {\n opacity: 0.5;\n }\n\n .ag-rich-select {\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-rich-select-list {\n width: 100%;\n min-width: 200px;\n height: calc(var(--ag-row-height) * 6.5);\n }\n\n .ag-rich-select-value {\n height: var(--ag-row-height);\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n padding-top: 0;\n padding-bottom: 0;\n }\n .ag-ltr .ag-rich-select-value {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-rich-select-value {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n .ag-ltr .ag-rich-select-value {\n padding-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-rich-select-value {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-rich-select-virtual-list-item {\n cursor: default;\n height: var(--ag-list-item-height);\n }\n .ag-keyboard-focus .ag-rich-select-virtual-list-item:focus::after {\n content: none;\n }\n .ag-rich-select-virtual-list-item:hover {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-ltr .ag-rich-select-row {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-rich-select-row {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-rich-select-row-selected {\n background-color: var(--ag-selected-row-background-color);\n }\n\n .ag-row-drag,\n .ag-selection-checkbox,\n .ag-group-expanded,\n .ag-group-contracted {\n color: var(--ag-secondary-foreground-color);\n }\n .ag-ltr .ag-row-drag,\n .ag-ltr .ag-selection-checkbox,\n .ag-ltr .ag-group-expanded,\n .ag-ltr .ag-group-contracted {\n margin-right: var(--ag-cell-widget-spacing);\n }\n .ag-rtl .ag-row-drag,\n .ag-rtl .ag-selection-checkbox,\n .ag-rtl .ag-group-expanded,\n .ag-rtl .ag-group-contracted {\n margin-left: var(--ag-cell-widget-spacing);\n }\n\n .ag-cell-wrapper > *:not(.ag-cell-value):not(.ag-group-value) {\n --ag-internal-calculated-line-height: var(\n --ag-line-height,\n calc(var(--ag-row-height) - var(--ag-row-border-width))\n );\n --ag-internal-padded-row-height: calc(var(--ag-row-height) - var(--ag-row-border-width));\n height: min(var(--ag-internal-calculated-line-height), var(--ag-internal-padded-row-height));\n display: flex;\n align-items: center;\n flex: none;\n }\n\n .ag-group-expanded,\n .ag-group-contracted {\n cursor: pointer;\n }\n\n .ag-group-title-bar-icon {\n cursor: pointer;\n flex: none;\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-ltr .ag-group-child-count {\n margin-left: 2px;\n }\n .ag-rtl .ag-group-child-count {\n margin-right: 2px;\n }\n\n .ag-group-title-bar {\n background-color: var(--ag-subheader-background-color);\n padding: var(--ag-grid-size);\n }\n\n .ag-group-toolbar {\n padding: var(--ag-grid-size);\n background-color: var(--ag-subheader-toolbar-background-color);\n }\n\n .ag-disabled-group-title-bar,\n .ag-disabled-group-container {\n opacity: 0.5;\n }\n\n .group-item {\n margin: calc(var(--ag-grid-size) * 0.5) 0;\n }\n\n .ag-label {\n white-space: nowrap;\n }\n .ag-ltr .ag-label {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-label {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-label-align-top .ag-label {\n margin-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n\n .ag-angle-select[disabled] {\n color: var(--ag-disabled-foreground-color);\n pointer-events: none;\n }\n .ag-angle-select[disabled] .ag-angle-select-field {\n opacity: 0.4;\n }\n\n .ag-ltr .ag-slider-field,\n .ag-ltr .ag-angle-select-field {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-slider-field,\n .ag-rtl .ag-angle-select-field {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-angle-select-parent-circle {\n width: 24px;\n height: 24px;\n border-radius: 12px;\n border: solid 1px;\n border-color: var(--ag-border-color);\n background-color: var(--ag-background-color);\n }\n\n .ag-angle-select-child-circle {\n top: 4px;\n left: 12px;\n width: 6px;\n height: 6px;\n margin-left: -3px;\n margin-top: -4px;\n border-radius: 3px;\n background-color: var(--ag-secondary-foreground-color);\n }\n\n .ag-picker-field-wrapper {\n border: 1px solid;\n border-color: var(--ag-border-color);\n border-radius: 5px;\n }\n .ag-picker-field-wrapper:focus {\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n\n .ag-picker-field-button {\n background-color: var(--ag-background-color);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-dialog.ag-color-dialog {\n border-radius: 5px;\n }\n\n .ag-color-picker .ag-picker-field-display {\n height: var(--ag-icon-size);\n }\n\n .ag-color-panel {\n padding: var(--ag-grid-size);\n }\n\n .ag-spectrum-color {\n background-color: rgb(255, 0, 0);\n border-radius: 2px;\n }\n\n .ag-spectrum-tools {\n padding: 10px;\n }\n\n .ag-spectrum-sat {\n background-image: linear-gradient(to right, white, rgba(204, 154, 129, 0));\n }\n\n .ag-spectrum-val {\n background-image: linear-gradient(to top, black, rgba(204, 154, 129, 0));\n }\n\n .ag-spectrum-dragger {\n border-radius: 12px;\n height: 12px;\n width: 12px;\n border: 1px solid white;\n background: black;\n box-shadow: 0 0 2px 0px rgba(0, 0, 0, 0.24);\n }\n\n .ag-spectrum-hue-background {\n border-radius: 2px;\n }\n\n .ag-spectrum-alpha-background {\n border-radius: 2px;\n }\n\n .ag-spectrum-tool {\n margin-bottom: 10px;\n height: 11px;\n border-radius: 2px;\n }\n\n .ag-spectrum-slider {\n margin-top: -12px;\n width: 13px;\n height: 13px;\n border-radius: 13px;\n background-color: rgb(248, 248, 248);\n box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);\n }\n\n .ag-recent-color {\n margin: 0 3px;\n }\n .ag-recent-color:first-child {\n margin-left: 0;\n }\n .ag-recent-color:last-child {\n margin-right: 0;\n }\n\n .ag-dnd-ghost {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n overflow: hidden;\n text-overflow: ellipsis;\n border: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-header-height) !important;\n line-height: var(--ag-header-height);\n margin: 0;\n padding: 0 calc(var(--ag-grid-size) * 2);\n transform: translateY(calc(var(--ag-grid-size) * 2));\n }\n\n .ag-dnd-ghost-icon {\n margin-right: var(--ag-grid-size);\n color: var(--ag-foreground-color);\n }\n\n .ag-popup-child:not(.ag-tooltip-custom) {\n box-shadow: var(--ag-popup-shadow);\n }\n\n .ag-dragging-range-handle .ag-dialog,\n .ag-dragging-fill-handle .ag-dialog {\n opacity: 0.7;\n pointer-events: none;\n }\n\n .ag-dialog {\n border-radius: var(--ag-border-radius);\n border: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-panel {\n background-color: var(--ag-background-color);\n }\n\n .ag-panel-title-bar {\n background-color: var(--ag-header-background-color);\n color: var(--ag-header-foreground-color);\n height: var(--ag-header-height);\n padding: var(--ag-grid-size) var(--ag-cell-horizontal-padding);\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-ltr .ag-panel-title-bar-button {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-panel-title-bar-button {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-tooltip {\n background-color: var(--ag-tooltip-background-color);\n color: var(--ag-foreground-color);\n padding: var(--ag-grid-size);\n border: var(--ag-borders) var(--ag-border-color);\n border-radius: var(--ag-card-radius);\n transition: opacity 1s;\n white-space: normal;\n }\n .ag-tooltip.ag-tooltip-hiding {\n opacity: 0;\n }\n\n .ag-tooltip-custom {\n transition: opacity 1s;\n }\n .ag-tooltip-custom.ag-tooltip-hiding {\n opacity: 0;\n }\n\n .ag-ltr .ag-column-select-indent-1 {\n padding-left: calc(1 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-1 {\n padding-right: calc(1 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-2 {\n padding-left: calc(2 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-2 {\n padding-right: calc(2 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-3 {\n padding-left: calc(3 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-3 {\n padding-right: calc(3 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-4 {\n padding-left: calc(4 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-4 {\n padding-right: calc(4 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-5 {\n padding-left: calc(5 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-5 {\n padding-right: calc(5 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-6 {\n padding-left: calc(6 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-6 {\n padding-right: calc(6 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-7 {\n padding-left: calc(7 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-7 {\n padding-right: calc(7 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-8 {\n padding-left: calc(8 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-8 {\n padding-right: calc(8 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-9 {\n padding-left: calc(9 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-9 {\n padding-right: calc(9 * var(--ag-column-select-indent-size));\n }\n\n .ag-column-select-header-icon {\n cursor: pointer;\n }\n\n .ag-keyboard-focus .ag-column-select-header-icon:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-header-icon:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 0px;\n left: 0px;\n display: block;\n width: calc(100% - 0px);\n height: calc(100% - 0px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-ltr .ag-column-group-icons:not(:last-child),\n .ag-ltr .ag-column-select-header-icon:not(:last-child),\n .ag-ltr .ag-column-select-header-checkbox:not(:last-child),\n .ag-ltr .ag-column-select-header-filter-wrapper:not(:last-child),\n .ag-ltr .ag-column-select-checkbox:not(:last-child),\n .ag-ltr .ag-column-select-column-drag-handle:not(:last-child),\n .ag-ltr .ag-column-select-column-group-drag-handle:not(:last-child),\n .ag-ltr .ag-column-select-column-label:not(:last-child) {\n margin-right: var(--ag-widget-horizontal-spacing);\n }\n .ag-rtl .ag-column-group-icons:not(:last-child),\n .ag-rtl .ag-column-select-header-icon:not(:last-child),\n .ag-rtl .ag-column-select-header-checkbox:not(:last-child),\n .ag-rtl .ag-column-select-header-filter-wrapper:not(:last-child),\n .ag-rtl .ag-column-select-checkbox:not(:last-child),\n .ag-rtl .ag-column-select-column-drag-handle:not(:last-child),\n .ag-rtl .ag-column-select-column-group-drag-handle:not(:last-child),\n .ag-rtl .ag-column-select-column-label:not(:last-child) {\n margin-left: var(--ag-widget-horizontal-spacing);\n }\n\n .ag-keyboard-focus .ag-column-select-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 1px;\n left: 1px;\n display: block;\n width: calc(100% - 2px);\n height: calc(100% - 2px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-select-column-group:not(:last-child),\n .ag-column-select-column:not(:last-child) {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-column-select-column-readonly,\n .ag-column-select-column-group-readonly {\n color: var(--ag-disabled-foreground-color);\n pointer-events: none;\n }\n\n .ag-ltr .ag-column-select-add-group-indent {\n margin-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-column-select-add-group-indent {\n margin-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n }\n\n .ag-column-select-virtual-list-viewport {\n padding: calc(var(--ag-widget-container-vertical-padding) * 0.5) 0px;\n }\n\n .ag-column-select-virtual-list-item {\n padding: 0 var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-rtl {\n text-align: right;\n }\n\n .ag-root-wrapper {\n border: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-1 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 1);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-1 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 1);\n }\n\n .ag-ltr .ag-row-group-indent-1 {\n padding-left: calc(1 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-1 {\n padding-right: calc(1 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-1 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-1 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-2 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 2);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-2 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 2);\n }\n\n .ag-ltr .ag-row-group-indent-2 {\n padding-left: calc(2 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-2 {\n padding-right: calc(2 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-2 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-2 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-3 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 3);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-3 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 3);\n }\n\n .ag-ltr .ag-row-group-indent-3 {\n padding-left: calc(3 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-3 {\n padding-right: calc(3 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-3 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-3 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-4 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 4);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-4 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 4);\n }\n\n .ag-ltr .ag-row-group-indent-4 {\n padding-left: calc(4 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-4 {\n padding-right: calc(4 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-4 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-4 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-5 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 5);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-5 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 5);\n }\n\n .ag-ltr .ag-row-group-indent-5 {\n padding-left: calc(5 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-5 {\n padding-right: calc(5 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-5 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-5 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-6 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 6);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-6 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 6);\n }\n\n .ag-ltr .ag-row-group-indent-6 {\n padding-left: calc(6 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-6 {\n padding-right: calc(6 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-6 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-6 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-7 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 7);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-7 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 7);\n }\n\n .ag-ltr .ag-row-group-indent-7 {\n padding-left: calc(7 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-7 {\n padding-right: calc(7 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-7 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-7 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-8 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 8);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-8 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 8);\n }\n\n .ag-ltr .ag-row-group-indent-8 {\n padding-left: calc(8 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-8 {\n padding-right: calc(8 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-8 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-8 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-9 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 9);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-9 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 9);\n }\n\n .ag-ltr .ag-row-group-indent-9 {\n padding-left: calc(9 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-9 {\n padding-right: calc(9 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-9 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-9 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-10 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 10);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-10 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 10);\n }\n\n .ag-ltr .ag-row-group-indent-10 {\n padding-left: calc(10 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-10 {\n padding-right: calc(10 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-10 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-10 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-11 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 11);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-11 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 11);\n }\n\n .ag-ltr .ag-row-group-indent-11 {\n padding-left: calc(11 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-11 {\n padding-right: calc(11 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-11 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-11 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-12 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 12);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-12 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 12);\n }\n\n .ag-ltr .ag-row-group-indent-12 {\n padding-left: calc(12 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-12 {\n padding-right: calc(12 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-12 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-12 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-13 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 13);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-13 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 13);\n }\n\n .ag-ltr .ag-row-group-indent-13 {\n padding-left: calc(13 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-13 {\n padding-right: calc(13 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-13 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-13 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-14 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 14);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-14 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 14);\n }\n\n .ag-ltr .ag-row-group-indent-14 {\n padding-left: calc(14 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-14 {\n padding-right: calc(14 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-14 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-14 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-15 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 15);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-15 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 15);\n }\n\n .ag-ltr .ag-row-group-indent-15 {\n padding-left: calc(15 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-15 {\n padding-right: calc(15 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-15 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-15 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-16 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 16);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-16 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 16);\n }\n\n .ag-ltr .ag-row-group-indent-16 {\n padding-left: calc(16 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-16 {\n padding-right: calc(16 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-16 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-16 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-17 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 17);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-17 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 17);\n }\n\n .ag-ltr .ag-row-group-indent-17 {\n padding-left: calc(17 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-17 {\n padding-right: calc(17 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-17 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-17 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-18 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 18);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-18 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 18);\n }\n\n .ag-ltr .ag-row-group-indent-18 {\n padding-left: calc(18 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-18 {\n padding-right: calc(18 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-18 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-18 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-19 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 19);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-19 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 19);\n }\n\n .ag-ltr .ag-row-group-indent-19 {\n padding-left: calc(19 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-19 {\n padding-right: calc(19 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-19 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-19 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-20 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 20);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-20 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 20);\n }\n\n .ag-ltr .ag-row-group-indent-20 {\n padding-left: calc(20 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-20 {\n padding-right: calc(20 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-20 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-20 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-21 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 21);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-21 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 21);\n }\n\n .ag-ltr .ag-row-group-indent-21 {\n padding-left: calc(21 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-21 {\n padding-right: calc(21 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-21 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-21 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-22 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 22);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-22 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 22);\n }\n\n .ag-ltr .ag-row-group-indent-22 {\n padding-left: calc(22 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-22 {\n padding-right: calc(22 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-22 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-22 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-23 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 23);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-23 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 23);\n }\n\n .ag-ltr .ag-row-group-indent-23 {\n padding-left: calc(23 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-23 {\n padding-right: calc(23 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-23 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-23 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-24 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 24);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-24 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 24);\n }\n\n .ag-ltr .ag-row-group-indent-24 {\n padding-left: calc(24 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-24 {\n padding-right: calc(24 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-24 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-24 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-25 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 25);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-25 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 25);\n }\n\n .ag-ltr .ag-row-group-indent-25 {\n padding-left: calc(25 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-25 {\n padding-right: calc(25 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-25 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-25 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-26 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 26);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-26 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 26);\n }\n\n .ag-ltr .ag-row-group-indent-26 {\n padding-left: calc(26 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-26 {\n padding-right: calc(26 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-26 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-26 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-27 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 27);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-27 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 27);\n }\n\n .ag-ltr .ag-row-group-indent-27 {\n padding-left: calc(27 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-27 {\n padding-right: calc(27 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-27 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-27 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-28 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 28);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-28 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 28);\n }\n\n .ag-ltr .ag-row-group-indent-28 {\n padding-left: calc(28 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-28 {\n padding-right: calc(28 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-28 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-28 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-29 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 29);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-29 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 29);\n }\n\n .ag-ltr .ag-row-group-indent-29 {\n padding-left: calc(29 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-29 {\n padding-right: calc(29 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-29 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-29 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-30 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 30);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-30 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 30);\n }\n\n .ag-ltr .ag-row-group-indent-30 {\n padding-left: calc(30 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-30 {\n padding-right: calc(30 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-30 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-30 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-31 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 31);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-31 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 31);\n }\n\n .ag-ltr .ag-row-group-indent-31 {\n padding-left: calc(31 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-31 {\n padding-right: calc(31 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-31 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-31 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-32 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 32);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-32 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 32);\n }\n\n .ag-ltr .ag-row-group-indent-32 {\n padding-left: calc(32 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-32 {\n padding-right: calc(32 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-32 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-32 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-33 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 33);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-33 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 33);\n }\n\n .ag-ltr .ag-row-group-indent-33 {\n padding-left: calc(33 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-33 {\n padding-right: calc(33 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-33 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-33 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-34 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 34);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-34 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 34);\n }\n\n .ag-ltr .ag-row-group-indent-34 {\n padding-left: calc(34 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-34 {\n padding-right: calc(34 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-34 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-34 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-35 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 35);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-35 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 35);\n }\n\n .ag-ltr .ag-row-group-indent-35 {\n padding-left: calc(35 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-35 {\n padding-right: calc(35 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-35 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-35 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-36 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 36);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-36 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 36);\n }\n\n .ag-ltr .ag-row-group-indent-36 {\n padding-left: calc(36 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-36 {\n padding-right: calc(36 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-36 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-36 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-37 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 37);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-37 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 37);\n }\n\n .ag-ltr .ag-row-group-indent-37 {\n padding-left: calc(37 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-37 {\n padding-right: calc(37 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-37 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-37 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-38 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 38);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-38 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 38);\n }\n\n .ag-ltr .ag-row-group-indent-38 {\n padding-left: calc(38 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-38 {\n padding-right: calc(38 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-38 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-38 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-39 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 39);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-39 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 39);\n }\n\n .ag-ltr .ag-row-group-indent-39 {\n padding-left: calc(39 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-39 {\n padding-right: calc(39 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-39 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-39 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-40 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 40);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-40 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 40);\n }\n\n .ag-ltr .ag-row-group-indent-40 {\n padding-left: calc(40 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-40 {\n padding-right: calc(40 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-40 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-40 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-41 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 41);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-41 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 41);\n }\n\n .ag-ltr .ag-row-group-indent-41 {\n padding-left: calc(41 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-41 {\n padding-right: calc(41 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-41 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-41 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-42 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 42);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-42 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 42);\n }\n\n .ag-ltr .ag-row-group-indent-42 {\n padding-left: calc(42 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-42 {\n padding-right: calc(42 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-42 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-42 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-43 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 43);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-43 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 43);\n }\n\n .ag-ltr .ag-row-group-indent-43 {\n padding-left: calc(43 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-43 {\n padding-right: calc(43 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-43 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-43 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-44 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 44);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-44 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 44);\n }\n\n .ag-ltr .ag-row-group-indent-44 {\n padding-left: calc(44 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-44 {\n padding-right: calc(44 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-44 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-44 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-45 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 45);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-45 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 45);\n }\n\n .ag-ltr .ag-row-group-indent-45 {\n padding-left: calc(45 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-45 {\n padding-right: calc(45 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-45 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-45 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-46 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 46);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-46 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 46);\n }\n\n .ag-ltr .ag-row-group-indent-46 {\n padding-left: calc(46 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-46 {\n padding-right: calc(46 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-46 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-46 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-47 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 47);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-47 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 47);\n }\n\n .ag-ltr .ag-row-group-indent-47 {\n padding-left: calc(47 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-47 {\n padding-right: calc(47 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-47 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-47 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-48 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 48);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-48 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 48);\n }\n\n .ag-ltr .ag-row-group-indent-48 {\n padding-left: calc(48 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-48 {\n padding-right: calc(48 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-48 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-48 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-49 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 49);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-49 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 49);\n }\n\n .ag-ltr .ag-row-group-indent-49 {\n padding-left: calc(49 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-49 {\n padding-right: calc(49 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-49 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-49 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-50 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 50);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-50 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 50);\n }\n\n .ag-ltr .ag-row-group-indent-50 {\n padding-left: calc(50 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-50 {\n padding-right: calc(50 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-50 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-50 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-51 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 51);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-51 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 51);\n }\n\n .ag-ltr .ag-row-group-indent-51 {\n padding-left: calc(51 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-51 {\n padding-right: calc(51 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-51 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-51 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-52 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 52);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-52 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 52);\n }\n\n .ag-ltr .ag-row-group-indent-52 {\n padding-left: calc(52 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-52 {\n padding-right: calc(52 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-52 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-52 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-53 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 53);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-53 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 53);\n }\n\n .ag-ltr .ag-row-group-indent-53 {\n padding-left: calc(53 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-53 {\n padding-right: calc(53 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-53 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-53 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-54 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 54);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-54 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 54);\n }\n\n .ag-ltr .ag-row-group-indent-54 {\n padding-left: calc(54 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-54 {\n padding-right: calc(54 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-54 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-54 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-55 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 55);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-55 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 55);\n }\n\n .ag-ltr .ag-row-group-indent-55 {\n padding-left: calc(55 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-55 {\n padding-right: calc(55 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-55 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-55 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-56 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 56);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-56 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 56);\n }\n\n .ag-ltr .ag-row-group-indent-56 {\n padding-left: calc(56 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-56 {\n padding-right: calc(56 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-56 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-56 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-57 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 57);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-57 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 57);\n }\n\n .ag-ltr .ag-row-group-indent-57 {\n padding-left: calc(57 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-57 {\n padding-right: calc(57 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-57 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-57 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-58 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 58);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-58 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 58);\n }\n\n .ag-ltr .ag-row-group-indent-58 {\n padding-left: calc(58 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-58 {\n padding-right: calc(58 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-58 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-58 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-59 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 59);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-59 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 59);\n }\n\n .ag-ltr .ag-row-group-indent-59 {\n padding-left: calc(59 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-59 {\n padding-right: calc(59 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-59 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-59 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-60 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 60);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-60 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 60);\n }\n\n .ag-ltr .ag-row-group-indent-60 {\n padding-left: calc(60 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-60 {\n padding-right: calc(60 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-60 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-60 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-61 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 61);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-61 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 61);\n }\n\n .ag-ltr .ag-row-group-indent-61 {\n padding-left: calc(61 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-61 {\n padding-right: calc(61 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-61 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-61 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-62 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 62);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-62 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 62);\n }\n\n .ag-ltr .ag-row-group-indent-62 {\n padding-left: calc(62 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-62 {\n padding-right: calc(62 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-62 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-62 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-63 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 63);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-63 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 63);\n }\n\n .ag-ltr .ag-row-group-indent-63 {\n padding-left: calc(63 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-63 {\n padding-right: calc(63 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-63 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-63 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-64 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 64);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-64 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 64);\n }\n\n .ag-ltr .ag-row-group-indent-64 {\n padding-left: calc(64 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-64 {\n padding-right: calc(64 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-64 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-64 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-65 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 65);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-65 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 65);\n }\n\n .ag-ltr .ag-row-group-indent-65 {\n padding-left: calc(65 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-65 {\n padding-right: calc(65 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-65 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-65 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-66 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 66);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-66 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 66);\n }\n\n .ag-ltr .ag-row-group-indent-66 {\n padding-left: calc(66 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-66 {\n padding-right: calc(66 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-66 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-66 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-67 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 67);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-67 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 67);\n }\n\n .ag-ltr .ag-row-group-indent-67 {\n padding-left: calc(67 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-67 {\n padding-right: calc(67 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-67 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-67 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-68 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 68);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-68 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 68);\n }\n\n .ag-ltr .ag-row-group-indent-68 {\n padding-left: calc(68 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-68 {\n padding-right: calc(68 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-68 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-68 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-69 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 69);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-69 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 69);\n }\n\n .ag-ltr .ag-row-group-indent-69 {\n padding-left: calc(69 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-69 {\n padding-right: calc(69 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-69 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-69 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-70 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 70);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-70 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 70);\n }\n\n .ag-ltr .ag-row-group-indent-70 {\n padding-left: calc(70 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-70 {\n padding-right: calc(70 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-70 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-70 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-71 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 71);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-71 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 71);\n }\n\n .ag-ltr .ag-row-group-indent-71 {\n padding-left: calc(71 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-71 {\n padding-right: calc(71 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-71 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-71 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-72 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 72);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-72 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 72);\n }\n\n .ag-ltr .ag-row-group-indent-72 {\n padding-left: calc(72 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-72 {\n padding-right: calc(72 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-72 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-72 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-73 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 73);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-73 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 73);\n }\n\n .ag-ltr .ag-row-group-indent-73 {\n padding-left: calc(73 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-73 {\n padding-right: calc(73 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-73 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-73 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-74 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 74);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-74 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 74);\n }\n\n .ag-ltr .ag-row-group-indent-74 {\n padding-left: calc(74 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-74 {\n padding-right: calc(74 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-74 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-74 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-75 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 75);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-75 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 75);\n }\n\n .ag-ltr .ag-row-group-indent-75 {\n padding-left: calc(75 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-75 {\n padding-right: calc(75 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-75 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-75 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-76 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 76);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-76 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 76);\n }\n\n .ag-ltr .ag-row-group-indent-76 {\n padding-left: calc(76 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-76 {\n padding-right: calc(76 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-76 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-76 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-77 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 77);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-77 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 77);\n }\n\n .ag-ltr .ag-row-group-indent-77 {\n padding-left: calc(77 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-77 {\n padding-right: calc(77 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-77 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-77 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-78 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 78);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-78 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 78);\n }\n\n .ag-ltr .ag-row-group-indent-78 {\n padding-left: calc(78 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-78 {\n padding-right: calc(78 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-78 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-78 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-79 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 79);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-79 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 79);\n }\n\n .ag-ltr .ag-row-group-indent-79 {\n padding-left: calc(79 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-79 {\n padding-right: calc(79 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-79 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-79 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-80 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 80);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-80 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 80);\n }\n\n .ag-ltr .ag-row-group-indent-80 {\n padding-left: calc(80 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-80 {\n padding-right: calc(80 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-80 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-80 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-81 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 81);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-81 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 81);\n }\n\n .ag-ltr .ag-row-group-indent-81 {\n padding-left: calc(81 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-81 {\n padding-right: calc(81 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-81 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-81 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-82 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 82);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-82 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 82);\n }\n\n .ag-ltr .ag-row-group-indent-82 {\n padding-left: calc(82 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-82 {\n padding-right: calc(82 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-82 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-82 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-83 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 83);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-83 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 83);\n }\n\n .ag-ltr .ag-row-group-indent-83 {\n padding-left: calc(83 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-83 {\n padding-right: calc(83 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-83 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-83 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-84 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 84);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-84 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 84);\n }\n\n .ag-ltr .ag-row-group-indent-84 {\n padding-left: calc(84 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-84 {\n padding-right: calc(84 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-84 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-84 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-85 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 85);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-85 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 85);\n }\n\n .ag-ltr .ag-row-group-indent-85 {\n padding-left: calc(85 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-85 {\n padding-right: calc(85 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-85 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-85 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-86 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 86);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-86 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 86);\n }\n\n .ag-ltr .ag-row-group-indent-86 {\n padding-left: calc(86 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-86 {\n padding-right: calc(86 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-86 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-86 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-87 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 87);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-87 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 87);\n }\n\n .ag-ltr .ag-row-group-indent-87 {\n padding-left: calc(87 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-87 {\n padding-right: calc(87 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-87 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-87 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-88 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 88);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-88 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 88);\n }\n\n .ag-ltr .ag-row-group-indent-88 {\n padding-left: calc(88 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-88 {\n padding-right: calc(88 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-88 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-88 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-89 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 89);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-89 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 89);\n }\n\n .ag-ltr .ag-row-group-indent-89 {\n padding-left: calc(89 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-89 {\n padding-right: calc(89 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-89 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-89 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-90 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 90);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-90 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 90);\n }\n\n .ag-ltr .ag-row-group-indent-90 {\n padding-left: calc(90 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-90 {\n padding-right: calc(90 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-90 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-90 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-91 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 91);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-91 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 91);\n }\n\n .ag-ltr .ag-row-group-indent-91 {\n padding-left: calc(91 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-91 {\n padding-right: calc(91 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-91 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-91 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-92 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 92);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-92 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 92);\n }\n\n .ag-ltr .ag-row-group-indent-92 {\n padding-left: calc(92 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-92 {\n padding-right: calc(92 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-92 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-92 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-93 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 93);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-93 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 93);\n }\n\n .ag-ltr .ag-row-group-indent-93 {\n padding-left: calc(93 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-93 {\n padding-right: calc(93 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-93 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-93 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-94 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 94);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-94 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 94);\n }\n\n .ag-ltr .ag-row-group-indent-94 {\n padding-left: calc(94 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-94 {\n padding-right: calc(94 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-94 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-94 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-95 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 95);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-95 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 95);\n }\n\n .ag-ltr .ag-row-group-indent-95 {\n padding-left: calc(95 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-95 {\n padding-right: calc(95 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-95 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-95 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-96 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 96);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-96 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 96);\n }\n\n .ag-ltr .ag-row-group-indent-96 {\n padding-left: calc(96 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-96 {\n padding-right: calc(96 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-96 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-96 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-97 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 97);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-97 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 97);\n }\n\n .ag-ltr .ag-row-group-indent-97 {\n padding-left: calc(97 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-97 {\n padding-right: calc(97 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-97 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-97 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-98 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 98);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-98 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 98);\n }\n\n .ag-ltr .ag-row-group-indent-98 {\n padding-left: calc(98 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-98 {\n padding-right: calc(98 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-98 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-98 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-99 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 99);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-99 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 99);\n }\n\n .ag-ltr .ag-row-group-indent-99 {\n padding-left: calc(99 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-99 {\n padding-right: calc(99 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-99 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-99 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row-group-leaf-indent {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-group-leaf-indent {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-value-change-delta {\n padding-right: 2px;\n }\n\n .ag-value-change-delta-up {\n color: var(--ag-value-change-delta-up-color);\n }\n\n .ag-value-change-delta-down {\n color: var(--ag-value-change-delta-down-color);\n }\n\n .ag-value-change-value {\n background-color: transparent;\n border-radius: 1px;\n padding-left: 1px;\n padding-right: 1px;\n transition: background-color 1s;\n }\n\n .ag-value-change-value-highlight {\n background-color: var(--ag-value-change-value-highlight-background-color);\n transition: background-color 0.1s;\n }\n\n .ag-cell-data-changed {\n background-color: var(--ag-value-change-value-highlight-background-color) !important;\n }\n\n .ag-cell-data-changed-animation {\n background-color: transparent;\n }\n\n .ag-cell-highlight {\n background-color: var(--ag-range-selection-highlight-color) !important;\n }\n\n .ag-row {\n height: var(--ag-row-height);\n background-color: var(--ag-background-color);\n color: var(--ag-data-color);\n border-bottom: var(--ag-row-border-style) var(--ag-row-border-color) var(--ag-row-border-width);\n }\n\n .ag-row-highlight-above::after,\n .ag-row-highlight-below::after {\n content: '';\n position: absolute;\n width: calc(100% - 1px);\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n left: 1px;\n }\n\n .ag-row-highlight-above::after {\n top: -1px;\n }\n\n .ag-row-highlight-above.ag-row-first::after {\n top: 0;\n }\n\n .ag-row-highlight-below::after {\n bottom: 0px;\n }\n\n .ag-row-odd {\n background-color: var(--ag-odd-row-background-color);\n }\n\n .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible)\n .ag-horizontal-left-spacer:not(.ag-scroller-corner) {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible)\n .ag-horizontal-right-spacer:not(.ag-scroller-corner) {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-row-selected::before {\n content: '';\n background-color: var(--ag-selected-row-background-color);\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .ag-row-hover:not(.ag-full-width-row)::before,\n .ag-row-hover.ag-full-width-row.ag-row-group::before {\n content: '';\n background-color: var(--ag-row-hover-color);\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .ag-row-hover.ag-full-width-row.ag-row-group > * {\n position: relative;\n }\n\n .ag-row-hover.ag-row-selected::before {\n background-color: var(--ag-row-hover-color);\n background-image: linear-gradient(\n var(--ag-selected-row-background-color),\n var(--ag-selected-row-background-color)\n );\n }\n\n .ag-column-hover {\n background-color: var(--ag-column-hover-color);\n }\n\n .ag-ltr .ag-right-aligned-cell {\n text-align: right;\n }\n .ag-rtl .ag-right-aligned-cell {\n text-align: left;\n }\n\n .ag-ltr .ag-right-aligned-cell .ag-cell-value,\n .ag-ltr .ag-right-aligned-cell .ag-group-value {\n margin-left: auto;\n }\n .ag-rtl .ag-right-aligned-cell .ag-cell-value,\n .ag-rtl .ag-right-aligned-cell .ag-group-value {\n margin-right: auto;\n }\n\n .ag-cell,\n .ag-full-width-row .ag-cell-wrapper.ag-row-group {\n --ag-internal-calculated-line-height: var(\n --ag-line-height,\n calc(var(--ag-row-height) - var(--ag-row-border-width))\n );\n --ag-internal-padded-row-height: calc(var(--ag-row-height) - var(--ag-row-border-width));\n border: 1px solid transparent;\n line-height: min(\n var(--ag-internal-calculated-line-height),\n var(--ag-internal-padded-row-height)\n );\n padding-left: calc(var(--ag-cell-horizontal-padding) - 1px);\n padding-right: calc(var(--ag-cell-horizontal-padding) - 1px);\n -webkit-font-smoothing: subpixel-antialiased;\n }\n\n .ag-row > .ag-cell-wrapper {\n padding-left: calc(var(--ag-cell-horizontal-padding) - 1px);\n padding-right: calc(var(--ag-cell-horizontal-padding) - 1px);\n }\n\n .ag-row-dragging {\n cursor: move;\n opacity: 0.5;\n }\n\n .ag-cell-inline-editing {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n padding: 0;\n height: var(--ag-row-height);\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-popup-editor {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n background-color: var(--ag-control-panel-background-color);\n padding: 0;\n }\n\n .ag-large-text-input {\n height: auto;\n padding: var(--ag-cell-horizontal-padding);\n }\n\n .ag-rtl .ag-large-text-input textarea {\n resize: none;\n }\n\n .ag-details-row {\n padding: calc(var(--ag-grid-size) * 5);\n background-color: var(--ag-background-color);\n }\n\n .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-layout-auto-height .ag-center-cols-container,\n .ag-layout-print .ag-center-cols-clipper,\n .ag-layout-print .ag-center-cols-container {\n min-height: 50px;\n }\n\n .ag-overlay-loading-wrapper {\n background-color: var(--ag-modal-overlay-background-color);\n }\n\n .ag-overlay-loading-center {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n }\n\n .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 30px;\n }\n\n .ag-loading {\n display: flex;\n height: 100%;\n align-items: center;\n }\n .ag-ltr .ag-loading {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-loading {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-loading-icon {\n padding-right: var(--ag-cell-widget-spacing);\n }\n .ag-rtl .ag-loading-icon {\n padding-left: var(--ag-cell-widget-spacing);\n }\n\n .ag-icon-loading {\n animation-name: spin;\n animation-duration: 1000ms;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n }\n\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n .ag-floating-top {\n border-bottom: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-floating-bottom {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-ltr .ag-cell {\n border-right: var(--ag-cell-horizontal-border);\n }\n .ag-rtl .ag-cell {\n border-left: var(--ag-cell-horizontal-border);\n }\n .ag-ltr .ag-cell {\n border-right-width: 1px;\n }\n .ag-rtl .ag-cell {\n border-left-width: 1px;\n }\n\n .ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left):not(.ag-cell-range-single-cell) {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right):not(.ag-cell-range-single-cell) {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-cell-range-selected:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-single-cell:not(.ag-cell-inline-editing) {\n background-color: var(--ag-range-selection-background-color);\n }\n .ag-cell-range-selected:not(.ag-cell-focus).ag-cell-range-chart,\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-single-cell:not(.ag-cell-inline-editing).ag-cell-range-chart {\n background-color: var(--ag-range-selection-chart-background-color) !important;\n }\n .ag-cell-range-selected:not(.ag-cell-focus).ag-cell-range-chart.ag-cell-range-chart-category,\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-single-cell:not(\n .ag-cell-inline-editing\n ).ag-cell-range-chart.ag-cell-range-chart-category {\n background-color: var(--ag-range-selection-chart-category-background-color) !important;\n }\n\n .ag-cell-range-selected-1:not(.ag-cell-focus),\n .ag-root:not(.ag-context-menu-open)\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-selected-1:not(.ag-cell-inline-editing) {\n background-color: var(--ag-range-selection-background-color);\n }\n\n .ag-cell-range-selected-2:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-2 {\n background-color: var(--ag-range-selection-background-color-2);\n }\n\n .ag-cell-range-selected-3:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-3 {\n background-color: var(--ag-range-selection-background-color-3);\n }\n\n .ag-cell-range-selected-4:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-4 {\n background-color: var(--ag-range-selection-background-color-4);\n }\n\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-top {\n border-top-color: var(--ag-range-selection-border-color);\n border-top-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-right {\n border-right-color: var(--ag-range-selection-border-color);\n border-right-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-bottom {\n border-bottom-color: var(--ag-range-selection-border-color);\n border-bottom-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-left {\n border-left-color: var(--ag-range-selection-border-color);\n border-left-style: var(--ag-range-selection-border-style);\n }\n\n .ag-ltr .ag-cell-focus:not(.ag-cell-range-selected):focus-within,\n .ag-ltr .ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),\n .ag-ltr .ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group,\n .ag-ltr .ag-cell-range-single-cell,\n .ag-ltr .ag-cell-range-single-cell.ag-cell-range-handle,\n .ag-rtl .ag-cell-focus:not(.ag-cell-range-selected):focus-within,\n .ag-rtl .ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),\n .ag-rtl .ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group,\n .ag-rtl .ag-cell-range-single-cell,\n .ag-rtl .ag-cell-range-single-cell.ag-cell-range-handle {\n border: 1px solid;\n border-color: var(--ag-range-selection-border-color);\n border-style: var(--ag-range-selection-border-style);\n outline: initial;\n }\n\n .ag-cell.ag-selection-fill-top,\n .ag-cell.ag-selection-fill-top.ag-cell-range-selected {\n border-top: 1px dashed;\n border-top-color: var(--ag-range-selection-border-color);\n }\n\n .ag-ltr .ag-cell.ag-selection-fill-right,\n .ag-ltr .ag-cell.ag-selection-fill-right.ag-cell-range-selected {\n border-right: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n .ag-rtl .ag-cell.ag-selection-fill-right,\n .ag-rtl .ag-cell.ag-selection-fill-right.ag-cell-range-selected {\n border-left: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n\n .ag-cell.ag-selection-fill-bottom,\n .ag-cell.ag-selection-fill-bottom.ag-cell-range-selected {\n border-bottom: 1px dashed;\n border-bottom-color: var(--ag-range-selection-border-color);\n }\n\n .ag-ltr .ag-cell.ag-selection-fill-left,\n .ag-ltr .ag-cell.ag-selection-fill-left.ag-cell-range-selected {\n border-left: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n .ag-rtl .ag-cell.ag-selection-fill-left,\n .ag-rtl .ag-cell.ag-selection-fill-left.ag-cell-range-selected {\n border-right: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n\n .ag-fill-handle,\n .ag-range-handle {\n position: absolute;\n width: 6px;\n height: 6px;\n bottom: -1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-ltr .ag-fill-handle,\n .ag-ltr .ag-range-handle {\n right: -1px;\n }\n .ag-rtl .ag-fill-handle,\n .ag-rtl .ag-range-handle {\n left: -1px;\n }\n\n .ag-fill-handle {\n cursor: cell;\n }\n\n .ag-range-handle {\n cursor: nwse-resize;\n }\n\n .ag-cell-inline-editing {\n border-color: var(--ag-input-focus-border-color) !important;\n }\n\n .ag-menu {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n padding: 0;\n }\n\n .ag-menu-list {\n cursor: default;\n padding: var(--ag-grid-size) 0;\n }\n\n .ag-menu-separator {\n height: calc(var(--ag-grid-size) * 2 + 1px);\n }\n\n .ag-menu-separator-part::after {\n content: '';\n display: block;\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-menu-option-active,\n .ag-compact-menu-option-active {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-menu-option-part,\n .ag-compact-menu-option-part {\n line-height: var(--ag-icon-size);\n padding: calc(var(--ag-grid-size) + 2px) 0;\n }\n\n .ag-menu-option-disabled,\n .ag-compact-menu-option-disabled {\n opacity: 0.5;\n }\n\n .ag-menu-option-icon,\n .ag-compact-menu-option-icon {\n width: var(--ag-icon-size);\n }\n .ag-ltr .ag-menu-option-icon,\n .ag-ltr .ag-compact-menu-option-icon {\n padding-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-menu-option-icon,\n .ag-rtl .ag-compact-menu-option-icon {\n padding-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-menu-option-text,\n .ag-compact-menu-option-text {\n padding-left: calc(var(--ag-grid-size) * 2);\n padding-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-ltr .ag-menu-option-shortcut,\n .ag-ltr .ag-compact-menu-option-shortcut {\n padding-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-menu-option-shortcut,\n .ag-rtl .ag-compact-menu-option-shortcut {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-menu-option-popup-pointer,\n .ag-compact-menu-option-popup-pointer {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-tabs {\n min-width: var(--ag-tab-min-width);\n }\n\n .ag-tabs-header {\n width: 100%;\n display: flex;\n }\n\n .ag-tab {\n border-bottom: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-bottom var(--ag-selected-tab-underline-transition-speed);\n display: flex;\n flex: none;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n }\n\n .ag-keyboard-focus .ag-tab:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-tab:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-tab-selected {\n border-bottom-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-menu-header {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-filter-separator {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-menu:not(.ag-tabs) .ag-filter-select {\n min-width: calc(\n var(--ag-menu-min-width) - 2 * var(--ag-widget-container-horizontal-padding) - 2px\n );\n }\n\n .ag-tabs .ag-filter-select {\n min-width: calc(\n var(--ag-tab-min-width) - 2 * var(--ag-widget-container-horizontal-padding) - 2px\n );\n }\n\n .ag-filter-select .ag-picker-field-wrapper {\n width: 0;\n }\n\n .ag-filter-condition-operator {\n height: 17px;\n }\n\n .ag-ltr .ag-filter-condition-operator-or {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-filter-condition-operator-or {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-set-filter-select-all {\n padding-top: var(--ag-widget-container-vertical-padding);\n }\n\n .ag-set-filter-list,\n .ag-filter-no-matches {\n height: calc(var(--ag-list-item-height) * 6);\n }\n\n .ag-set-filter-tree-list {\n height: calc(var(--ag-list-item-height) * 10);\n }\n\n .ag-set-filter-filter {\n margin-top: var(--ag-widget-container-vertical-padding);\n margin-left: var(--ag-widget-container-horizontal-padding);\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-filter-to {\n margin-top: var(--ag-widget-vertical-spacing);\n }\n\n .ag-mini-filter {\n margin: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-set-filter-item {\n margin: 0px var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-ltr .ag-set-filter-add-group-indent {\n margin-left: calc(\n var(--ag-widget-container-horizontal-padding) + var(--ag-icon-size) + var(--ag-grid-size) * 2\n );\n }\n .ag-rtl .ag-set-filter-add-group-indent {\n margin-right: calc(\n var(--ag-widget-container-horizontal-padding) + var(--ag-icon-size) + var(--ag-grid-size) * 2\n );\n }\n\n .ag-ltr .ag-set-filter-indent-1 {\n padding-left: calc(1 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-1 {\n padding-right: calc(1 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-2 {\n padding-left: calc(2 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-2 {\n padding-right: calc(2 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-3 {\n padding-left: calc(3 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-3 {\n padding-right: calc(3 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-4 {\n padding-left: calc(4 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-4 {\n padding-right: calc(4 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-5 {\n padding-left: calc(5 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-5 {\n padding-right: calc(5 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-6 {\n padding-left: calc(6 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-6 {\n padding-right: calc(6 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-7 {\n padding-left: calc(7 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-7 {\n padding-right: calc(7 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-8 {\n padding-left: calc(8 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-8 {\n padding-right: calc(8 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-9 {\n padding-left: calc(9 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-9 {\n padding-right: calc(9 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-group-icons {\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n .ag-rtl .ag-set-filter-group-icons {\n margin-left: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-filter-apply-panel {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-filter-apply-panel-button {\n line-height: 1.5;\n }\n .ag-ltr .ag-filter-apply-panel-button {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-filter-apply-panel-button {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-simple-filter-body-wrapper {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n padding-bottom: calc(\n var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing)\n );\n }\n .ag-simple-filter-body-wrapper > * {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-filter-no-matches {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-multi-filter-menu-item {\n margin: var(--ag-grid-size) 0;\n }\n\n .ag-multi-filter-group-title-bar {\n padding: calc(var(--ag-grid-size) * 2) var(--ag-grid-size);\n background-color: transparent;\n }\n\n .ag-keyboard-focus .ag-multi-filter-group-title-bar:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-multi-filter-group-title-bar:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-side-bar {\n position: relative;\n }\n\n .ag-tool-panel-wrapper {\n width: var(--ag-side-bar-panel-width);\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-side-buttons {\n padding-top: calc(var(--ag-grid-size) * 4);\n width: calc(var(--ag-icon-size) + 4px);\n position: relative;\n color: var(--ag-foreground-color);\n overflow: hidden;\n }\n\n button.ag-side-button-button {\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n background: transparent;\n padding: calc(var(--ag-grid-size) * 2) 0 calc(var(--ag-grid-size) * 2) 0;\n width: 100%;\n margin: 0;\n min-height: calc(var(--ag-grid-size) * 18);\n background-position-y: center;\n background-position-x: center;\n background-repeat: no-repeat;\n border: none;\n border-top: var(--ag-borders-side-button) var(--ag-border-color);\n border-bottom: var(--ag-borders-side-button) var(--ag-border-color);\n }\n button.ag-side-button-button:focus {\n box-shadow: none;\n }\n\n .ag-keyboard-focus .ag-side-button-button:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-side-button-button:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-selected button.ag-side-button-button {\n background-color: var(--ag-side-button-selected-background-color);\n }\n\n .ag-side-button-icon-wrapper {\n margin-bottom: 3px;\n }\n\n .ag-ltr .ag-side-bar-left,\n .ag-rtl .ag-side-bar-right {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-side-bar-left .ag-tool-panel-wrapper,\n .ag-rtl .ag-side-bar-right .ag-tool-panel-wrapper {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-side-bar-left .ag-side-button-button,\n .ag-rtl .ag-side-bar-right .ag-side-button-button {\n border-right: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-right var(--ag-selected-tab-underline-transition-speed);\n }\n .ag-ltr .ag-side-bar-left .ag-selected .ag-side-button-button,\n .ag-rtl .ag-side-bar-right .ag-selected .ag-side-button-button {\n border-right-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-rtl .ag-side-bar-left,\n .ag-ltr .ag-side-bar-right {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-side-bar-left .ag-tool-panel-wrapper,\n .ag-ltr .ag-side-bar-right .ag-tool-panel-wrapper {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-side-bar-left .ag-side-button-button,\n .ag-ltr .ag-side-bar-right .ag-side-button-button {\n border-left: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-left var(--ag-selected-tab-underline-transition-speed);\n }\n .ag-rtl .ag-side-bar-left .ag-selected .ag-side-button-button,\n .ag-ltr .ag-side-bar-right .ag-selected .ag-side-button-button {\n border-left-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-filter-toolpanel-header {\n height: calc(var(--ag-grid-size) * 6);\n }\n\n .ag-ltr .ag-filter-toolpanel-header,\n .ag-ltr .ag-filter-toolpanel-search {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-header,\n .ag-rtl .ag-filter-toolpanel-search {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-keyboard-focus .ag-filter-toolpanel-header:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-filter-toolpanel-header:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n content: var(--ag-icon-font-code-filter, '\\\\f114');\n position: absolute;\n }\n .ag-ltr .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-0-header {\n height: calc(var(--ag-grid-size) * 8);\n }\n\n .ag-filter-toolpanel-group-item {\n margin-top: calc(var(--ag-grid-size) * 0.5);\n margin-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n\n .ag-filter-toolpanel-search {\n height: var(--ag-header-height);\n }\n\n .ag-filter-toolpanel-search-input {\n flex-grow: 1;\n height: calc(var(--ag-grid-size) * 4);\n }\n .ag-ltr .ag-filter-toolpanel-search-input {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-search-input {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-0 {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-ltr .ag-filter-toolpanel-expand,\n .ag-ltr .ag-filter-toolpanel-group-title-bar-icon {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-expand,\n .ag-rtl .ag-filter-toolpanel-group-title-bar-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-1\n .ag-filter-toolpanel-group-level-1-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-1 .ag-filter-toolpanel-group-level-2-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 1 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-1 .ag-filter-toolpanel-group-level-2-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 1 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-2\n .ag-filter-toolpanel-group-level-2-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-2 .ag-filter-toolpanel-group-level-3-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 2 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-2 .ag-filter-toolpanel-group-level-3-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 2 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-3\n .ag-filter-toolpanel-group-level-3-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-3 .ag-filter-toolpanel-group-level-4-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 3 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-3 .ag-filter-toolpanel-group-level-4-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 3 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-4\n .ag-filter-toolpanel-group-level-4-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-4 .ag-filter-toolpanel-group-level-5-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 4 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-4 .ag-filter-toolpanel-group-level-5-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 4 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-5\n .ag-filter-toolpanel-group-level-5-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-5 .ag-filter-toolpanel-group-level-6-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 5 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-5 .ag-filter-toolpanel-group-level-6-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 5 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-6\n .ag-filter-toolpanel-group-level-6-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-6 .ag-filter-toolpanel-group-level-7-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 6 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-6 .ag-filter-toolpanel-group-level-7-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 6 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-7\n .ag-filter-toolpanel-group-level-7-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-7 .ag-filter-toolpanel-group-level-8-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 7 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-7 .ag-filter-toolpanel-group-level-8-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 7 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-8\n .ag-filter-toolpanel-group-level-8-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-8 .ag-filter-toolpanel-group-level-9-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 8 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-8 .ag-filter-toolpanel-group-level-9-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 8 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-9\n .ag-filter-toolpanel-group-level-9-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-9 .ag-filter-toolpanel-group-level-10-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 9 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-9 .ag-filter-toolpanel-group-level-10-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 9 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-10\n .ag-filter-toolpanel-group-level-10-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-10 .ag-filter-toolpanel-group-level-11-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 10 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-10 .ag-filter-toolpanel-group-level-11-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 10 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-instance-header.ag-filter-toolpanel-group-level-1-header {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-instance-filter {\n border-bottom: var(--ag-borders) var(--ag-border-color);\n border-top: var(--ag-borders) var(--ag-border-color);\n margin-top: var(--ag-grid-size);\n }\n\n .ag-ltr .ag-filter-toolpanel-instance-header-icon {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-instance-header-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-set-filter-group-icons {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-pivot-mode-panel {\n min-height: var(--ag-header-height);\n height: var(--ag-header-height);\n display: flex;\n }\n\n .ag-pivot-mode-select {\n display: flex;\n align-items: center;\n }\n .ag-ltr .ag-pivot-mode-select {\n margin-left: var(--ag-widget-container-horizontal-padding);\n }\n .ag-rtl .ag-pivot-mode-select {\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-keyboard-focus .ag-column-select-header:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-header:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-select-header {\n height: var(--ag-header-height);\n align-items: center;\n padding: 0 var(--ag-widget-container-horizontal-padding);\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-column-panel-column-select {\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-column-group-icons,\n .ag-column-select-header-icon {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-select-list .ag-list-item-hovered::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-column-select-list .ag-item-highlight-top::after {\n top: 0;\n }\n .ag-column-select-list .ag-item-highlight-bottom::after {\n bottom: 0;\n }\n\n .ag-header {\n background-color: var(--ag-header-background-color);\n border-bottom: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-header-row {\n color: var(--ag-header-foreground-color);\n height: var(--ag-header-height);\n }\n\n .ag-pinned-right-header {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-pinned-left-header {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-ltr .ag-header-cell:not(.ag-right-aligned-header) .ag-header-label-icon {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-header-cell:not(.ag-right-aligned-header) .ag-header-label-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-ltr .ag-header-cell.ag-right-aligned-header .ag-header-label-icon {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-header-cell.ag-right-aligned-header .ag-header-label-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-header-cell,\n .ag-header-group-cell {\n padding-left: var(--ag-cell-horizontal-padding);\n padding-right: var(--ag-cell-horizontal-padding);\n }\n .ag-header-cell.ag-header-cell-moving,\n .ag-header-group-cell.ag-header-cell-moving {\n background-color: var(--ag-header-cell-moving-background-color);\n }\n\n .ag-keyboard-focus .ag-header-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-header-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n .ag-keyboard-focus .ag-header-group-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-header-group-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-header-icon {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-header-expand-icon {\n cursor: pointer;\n }\n .ag-ltr .ag-header-expand-icon {\n padding-left: 4px;\n }\n .ag-rtl .ag-header-expand-icon {\n padding-right: 4px;\n }\n\n .ag-header-row:not(:first-child) .ag-header-cell,\n .ag-header-row:not(:first-child) .ag-header-group-cell.ag-header-group-cell-with-group {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-header-group-cell:not(.ag-column-resizing)\n + .ag-header-group-cell:not(.ag-column-hover):not(.ag-header-cell-moving):hover,\n .ag-header-group-cell:not(.ag-column-resizing)\n + .ag-header-group-cell:not(.ag-column-hover).ag-column-resizing,\n .ag-header-cell:not(.ag-column-resizing)\n + .ag-header-cell:not(.ag-column-hover):not(.ag-header-cell-moving):hover,\n .ag-header-cell:not(.ag-column-resizing)\n + .ag-header-cell:not(.ag-column-hover).ag-column-resizing,\n .ag-header-group-cell:first-of-type:not(.ag-header-cell-moving):hover,\n .ag-header-group-cell:first-of-type.ag-column-resizing,\n .ag-header-cell:not(.ag-column-hover):first-of-type:not(.ag-header-cell-moving):hover,\n .ag-header-cell:not(.ag-column-hover):first-of-type.ag-column-resizing {\n background-color: var(--ag-header-cell-hover-background-color);\n }\n\n .ag-header-cell::after,\n .ag-header-group-cell::after {\n content: '';\n position: absolute;\n z-index: 1;\n display: var(--ag-header-column-separator-display);\n width: var(--ag-header-column-separator-width);\n height: var(--ag-header-column-separator-height);\n top: calc(50% - var(--ag-header-column-separator-height) * 0.5);\n background-color: var(--ag-header-column-separator-color);\n }\n .ag-ltr .ag-header-cell::after,\n .ag-ltr .ag-header-group-cell::after {\n right: 0;\n }\n .ag-rtl .ag-header-cell::after,\n .ag-rtl .ag-header-group-cell::after {\n left: 0;\n }\n\n .ag-header-cell-resize {\n display: flex;\n align-items: center;\n }\n\n .ag-header-cell-resize::after {\n content: '';\n position: absolute;\n z-index: 1;\n display: var(--ag-header-column-resize-handle-display);\n width: var(--ag-header-column-resize-handle-width);\n height: var(--ag-header-column-resize-handle-height);\n top: calc(50% - var(--ag-header-column-resize-handle-height) * 0.5);\n background-color: var(--ag-header-column-resize-handle-color);\n }\n\n .ag-ltr .ag-header-viewport .ag-header-cell-resize::after {\n left: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n .ag-rtl .ag-header-viewport .ag-header-cell-resize::after {\n right: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n\n .ag-pinned-left-header .ag-header-cell-resize::after {\n left: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n\n .ag-pinned-right-header .ag-header-cell-resize::after {\n left: 50%;\n }\n\n .ag-ltr .ag-header-select-all {\n margin-right: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-header-select-all {\n margin-left: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-floating-filter-button {\n margin-left: calc(var(--ag-grid-size) * 3);\n }\n .ag-rtl .ag-floating-filter-button {\n margin-right: calc(var(--ag-grid-size) * 3);\n }\n\n .ag-floating-filter-button-button {\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n appearance: none;\n background: transparent;\n border: none;\n height: var(--ag-icon-size);\n padding: 0;\n width: var(--ag-icon-size);\n }\n\n .ag-filter-loading {\n background-color: var(--ag-control-panel-background-color);\n height: 100%;\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n position: absolute;\n width: 100%;\n z-index: 1;\n }\n\n .ag-paging-panel {\n border-top: 1px solid;\n border-top-color: var(--ag-border-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-header-height);\n }\n .ag-paging-panel > * {\n margin: 0 var(--ag-cell-horizontal-padding);\n }\n\n .ag-paging-button {\n cursor: pointer;\n }\n\n .ag-paging-button.ag-disabled {\n cursor: default;\n color: var(--ag-disabled-foreground-color);\n }\n\n .ag-keyboard-focus .ag-paging-button:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-paging-button:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 0px;\n left: 0px;\n display: block;\n width: calc(100% - 0px);\n height: calc(100% - 0px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-paging-button,\n .ag-paging-description {\n margin: 0 var(--ag-grid-size);\n }\n\n .ag-status-bar {\n border-top: var(--ag-borders) var(--ag-border-color);\n color: var(--ag-disabled-foreground-color);\n padding-right: calc(var(--ag-grid-size) * 4);\n padding-left: calc(var(--ag-grid-size) * 4);\n line-height: 1.5;\n }\n\n .ag-status-name-value-value {\n color: var(--ag-foreground-color);\n }\n\n .ag-status-bar-center {\n text-align: center;\n }\n\n .ag-status-name-value {\n margin-left: var(--ag-grid-size);\n margin-right: var(--ag-grid-size);\n padding-top: calc(var(--ag-grid-size) * 2);\n padding-bottom: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-column-drop-cell {\n background: var(--ag-chip-background-color);\n border-radius: calc(var(--ag-grid-size) * 4);\n height: calc(var(--ag-grid-size) * 4);\n padding: 0 calc(var(--ag-grid-size) * 0.5);\n border: 1px solid transparent;\n }\n\n .ag-keyboard-focus .ag-column-drop-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-drop-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 2px;\n left: 2px;\n display: block;\n width: calc(100% - 4px);\n height: calc(100% - 4px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-drop-cell-text {\n margin: 0 var(--ag-grid-size);\n }\n\n .ag-column-drop-cell-button {\n min-width: calc(var(--ag-grid-size) * 4);\n margin: 0 calc(var(--ag-grid-size) * 0.5);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-drop-cell-drag-handle {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-column-drop-cell-ghost {\n opacity: 0.5;\n }\n\n .ag-column-drop-horizontal {\n background-color: var(--ag-control-panel-background-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-row-height);\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-column-drop-horizontal {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-column-drop-horizontal {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-column-drop-horizontal-half-width:not(:last-child) {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-column-drop-horizontal-half-width:not(:last-child) {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-column-drop-horizontal-cell-separator {\n margin: 0 var(--ag-grid-size);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-drop-horizontal-empty-message {\n color: var(--ag-disabled-foreground-color);\n }\n\n .ag-ltr .ag-column-drop-horizontal-icon {\n margin-right: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-column-drop-horizontal-icon {\n margin-left: var(--ag-cell-horizontal-padding);\n }\n\n .ag-column-drop-vertical-list {\n padding-bottom: var(--ag-grid-size);\n padding-right: var(--ag-grid-size);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical-cell {\n margin-top: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical {\n min-height: 50px;\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n .ag-column-drop-vertical.ag-last-column-drop {\n border-bottom: none;\n }\n\n .ag-column-drop-vertical-icon {\n margin-left: var(--ag-grid-size);\n margin-right: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical-empty-message {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n color: var(--ag-disabled-foreground-color);\n margin-top: var(--ag-grid-size);\n }\n\n .ag-select-agg-func-popup {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n background: var(--ag-background-color);\n height: calc(var(--ag-grid-size) * 5 * 3.5);\n padding: 0;\n }\n\n .ag-select-agg-func-virtual-list-item {\n cursor: default;\n padding-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-select-agg-func-virtual-list-item:hover {\n background-color: var(--ag-selected-row-background-color);\n }\n\n .ag-keyboard-focus .ag-select-agg-func-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-select-agg-func-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 1px;\n left: 1px;\n display: block;\n width: calc(100% - 2px);\n height: calc(100% - 2px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-sort-indicator-container {\n display: flex;\n }\n\n .ag-ltr .ag-sort-indicator-icon {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-sort-indicator-icon {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-chart {\n position: relative;\n display: flex;\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .ag-chart-components-wrapper {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .ag-chart-title-edit {\n position: absolute;\n display: none;\n top: 0;\n left: 0;\n text-align: center;\n }\n\n .ag-chart-title-edit.currently-editing {\n display: inline-block;\n }\n\n .ag-chart-canvas-wrapper {\n position: relative;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .ag-charts-canvas {\n display: block;\n }\n\n .ag-chart-menu {\n position: absolute;\n top: 10px;\n width: 24px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .ag-ltr .ag-chart-menu {\n right: 20px;\n }\n .ag-rtl .ag-chart-menu {\n left: 20px;\n }\n\n .ag-chart-docked-container {\n position: relative;\n width: 0;\n min-width: 0;\n transition: min-width 0.4s;\n }\n\n .ag-chart-menu-hidden ~ .ag-chart-docked-container {\n max-width: 0;\n overflow: hidden;\n }\n\n .ag-chart-tabbed-menu {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .ag-chart-tabbed-menu-header {\n flex: none;\n user-select: none;\n cursor: default;\n }\n\n .ag-chart-tabbed-menu-body {\n display: flex;\n flex: 1 1 auto;\n align-items: stretch;\n overflow: hidden;\n }\n\n .ag-chart-tab {\n width: 100%;\n overflow: hidden;\n overflow-y: auto;\n }\n\n .ag-chart-settings {\n overflow-x: hidden;\n }\n\n .ag-chart-settings-wrapper {\n position: relative;\n flex-direction: column;\n width: 100%;\n height: 100%;\n display: flex;\n overflow: hidden;\n }\n\n .ag-chart-settings-nav-bar {\n display: flex;\n align-items: center;\n width: 100%;\n height: 30px;\n padding: 0 10px;\n user-select: none;\n }\n\n .ag-chart-settings-card-selector {\n display: flex;\n align-items: center;\n justify-content: space-around;\n flex: 1 1 auto;\n height: 100%;\n padding: 0 10px;\n }\n\n .ag-chart-settings-card-item {\n cursor: pointer;\n width: 10px;\n height: 10px;\n background-color: #000;\n position: relative;\n }\n .ag-chart-settings-card-item.ag-not-selected {\n opacity: 0.2;\n }\n .ag-chart-settings-card-item::before {\n content: ' ';\n display: block;\n position: absolute;\n background-color: transparent;\n left: 50%;\n top: 50%;\n margin-left: -10px;\n margin-top: -10px;\n width: 20px;\n height: 20px;\n }\n\n .ag-chart-settings-prev,\n .ag-chart-settings-next {\n position: relative;\n flex: none;\n }\n\n .ag-chart-settings-prev-button,\n .ag-chart-settings-next-button {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n }\n\n .ag-chart-settings-mini-charts-container {\n position: relative;\n flex: 1 1 auto;\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n .ag-chart-settings-mini-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 100%;\n overflow: hidden;\n }\n .ag-chart-settings-mini-wrapper.ag-animating {\n transition: left 0.3s;\n transition-timing-function: ease-in-out;\n }\n\n .ag-chart-mini-thumbnail {\n cursor: pointer;\n }\n\n .ag-chart-mini-thumbnail-canvas {\n display: block;\n }\n\n .ag-chart-data-wrapper,\n .ag-chart-format-wrapper {\n display: flex;\n flex-direction: column;\n position: relative;\n user-select: none;\n }\n\n .ag-chart-data-wrapper {\n height: 100%;\n overflow-y: auto;\n }\n\n .ag-chart-data-section,\n .ag-chart-format-section {\n display: flex;\n margin: 0;\n }\n\n .ag-chart-empty-text {\n display: flex;\n top: 0;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n }\n\n .ag-chart .ag-chart-menu {\n display: none;\n }\n\n .ag-chart-menu-hidden:hover .ag-chart-menu {\n display: block;\n }\n\n .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n display: flex;\n flex-direction: row;\n overflow: auto;\n top: 5px;\n gap: calc(var(--ag-grid-size) * 3 - 8px);\n width: auto;\n }\n .ag-ltr .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n right: calc(var(--ag-cell-horizontal-padding) + var(--ag-grid-size) - 4px);\n justify-content: right;\n }\n .ag-rtl .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n left: calc(var(--ag-cell-horizontal-padding) + var(--ag-grid-size) - 4px);\n justify-content: left;\n }\n\n .ag-chart-menu-close {\n display: none;\n }\n\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n position: absolute;\n top: 50%;\n transition: transform 0.33s ease-in-out;\n padding: 0;\n display: block;\n cursor: pointer;\n border: none;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n right: 0px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n left: 0px;\n }\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close .ag-icon {\n padding: 14px 5px 14px 2px;\n }\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n content: '';\n position: absolute;\n top: -40px;\n bottom: -40px;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n right: 0px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n left: 0px;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n left: -10px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n right: -10px;\n }\n .ag-chart-tool-panel-button-enable .ag-icon-menu {\n display: none;\n }\n\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n transform: translate(3px, -50%);\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(0, -50%);\n }\n .ag-ltr .ag-chart-menu-visible .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(5px, -50%);\n }\n\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n transform: translate(-3px, -50%);\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(0, -50%);\n }\n .ag-rtl .ag-chart-menu-visible .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(-5px, -50%);\n }\n\n .ag-charts-font-size-color {\n display: flex;\n align-self: stretch;\n justify-content: space-between;\n }\n\n .ag-charts-data-group-item {\n position: relative;\n }\n\n .ag-chart-menu {\n border-radius: var(--ag-card-radius);\n background: var(--ag-background-color);\n }\n\n .ag-chart-menu-icon {\n opacity: 0.5;\n line-height: 24px;\n font-size: 24px;\n width: 24px;\n height: 24px;\n margin: 2px 0;\n cursor: pointer;\n border-radius: var(--ag-card-radius);\n color: var(--ag-secondary-foreground-color);\n }\n .ag-chart-menu-icon:hover {\n opacity: 1;\n }\n\n .ag-chart-mini-thumbnail {\n border: 1px solid var(--ag-secondary-border-color);\n border-radius: 5px;\n margin: 5px;\n }\n .ag-chart-mini-thumbnail:nth-last-child(3),\n .ag-chart-mini-thumbnail:nth-last-child(3) ~ .ag-chart-mini-thumbnail {\n margin-left: auto;\n margin-right: auto;\n }\n .ag-ltr .ag-chart-mini-thumbnail:first-child {\n margin-left: 0;\n }\n .ag-rtl .ag-chart-mini-thumbnail:first-child {\n margin-right: 0;\n }\n .ag-ltr .ag-chart-mini-thumbnail:last-child {\n margin-right: 0;\n }\n .ag-rtl .ag-chart-mini-thumbnail:last-child {\n margin-left: 0;\n }\n .ag-chart-mini-thumbnail.ag-selected {\n border-color: var(--ag-minichart-selected-chart-color);\n }\n\n .ag-chart-settings-card-item {\n background: var(--ag-foreground-color);\n width: 8px;\n height: 8px;\n border-radius: 4px;\n }\n .ag-chart-settings-card-item.ag-selected {\n background-color: var(--ag-minichart-selected-page-color);\n }\n\n .ag-chart-data-column-drag-handle {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-charts-settings-group-title-bar,\n .ag-charts-data-group-title-bar,\n .ag-charts-format-top-level-group-title-bar {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-charts-settings-group-container {\n padding: var(--ag-grid-size);\n }\n\n .ag-charts-data-group-container {\n padding: calc(var(--ag-widget-container-vertical-padding) * 0.5)\n var(--ag-widget-container-horizontal-padding);\n }\n .ag-charts-data-group-container\n .ag-charts-data-group-item:not(.ag-charts-format-sub-level-group) {\n height: var(--ag-list-item-height);\n }\n .ag-charts-data-group-container .ag-list-item-hovered::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-charts-data-group-container .ag-item-highlight-top::after {\n top: 0;\n }\n .ag-charts-data-group-container .ag-item-highlight-bottom::after {\n bottom: 0;\n }\n\n .ag-charts-format-top-level-group-container {\n margin-left: calc(var(--ag-grid-size) * 2);\n padding: var(--ag-grid-size);\n }\n\n .ag-charts-format-top-level-group-item {\n margin: var(--ag-grid-size) 0;\n }\n\n .ag-charts-format-sub-level-group-container {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n padding-bottom: calc(\n var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing)\n );\n }\n .ag-charts-format-sub-level-group-container > * {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-charts-group-container.ag-group-container-horizontal {\n padding: var(--ag-grid-size);\n }\n\n .ag-chart-data-section,\n .ag-chart-format-section {\n display: flex;\n margin: 0;\n }\n\n .ag-chart-menu-panel {\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-ltr .ag-chart-menu-panel {\n border-left: solid 1px var(--ag-border-color);\n }\n .ag-rtl .ag-chart-menu-panel {\n border-right: solid 1px var(--ag-border-color);\n }\n\n .ag-date-time-list-page-title-bar {\n display: flex;\n }\n\n .ag-date-time-list-page-title {\n flex-grow: 1;\n text-align: center;\n }\n\n .ag-date-time-list-page-column-labels-row,\n .ag-date-time-list-page-entries-row {\n display: flex;\n }\n\n .ag-date-time-list-page-column-label,\n .ag-date-time-list-page-entry {\n flex-basis: 0;\n flex-grow: 1;\n }\n\n .ag-date-time-list-page-entry {\n cursor: pointer;\n text-align: center;\n }\n\n .ag-date-time-list-page-column-label {\n text-align: center;\n }\n\n .ag-input-field-input {\n width: 100%;\n min-width: 0;\n }\n\n .ag-checkbox-input-wrapper {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-checkbox-background-color);\n border-radius: var(--ag-checkbox-border-radius);\n display: inline-block;\n vertical-align: middle;\n flex: none;\n }\n .ag-checkbox-input-wrapper input,\n .ag-checkbox-input-wrapper input {\n -webkit-appearance: none;\n opacity: 0;\n width: 100%;\n height: 100%;\n }\n .ag-checkbox-input-wrapper:focus-within,\n .ag-checkbox-input-wrapper:active {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-checkbox-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-checkbox-input-wrapper::after {\n content: var(--ag-icon-font-code-checkbox-unchecked, '\\\\f108');\n color: var(--ag-checkbox-unchecked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-checkbox-input-wrapper.ag-checked::after {\n content: var(--ag-icon-font-code-checkbox-checked, '\\\\f106');\n color: var(--ag-checkbox-checked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-checkbox-input-wrapper.ag-indeterminate::after {\n content: var(--ag-icon-font-code-checkbox-indeterminate, '\\\\f107');\n color: var(--ag-checkbox-indeterminate-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n\n .ag-toggle-button-input-wrapper {\n box-sizing: border-box;\n width: var(--ag-toggle-button-width);\n height: var(--ag-toggle-button-height);\n background-color: var(--ag-toggle-button-off-background-color);\n border-radius: calc(var(--ag-toggle-button-height) * 0.5);\n position: relative;\n flex: none;\n border: var(--ag-toggle-button-border-width) solid;\n border-color: var(--ag-toggle-button-off-border-color);\n }\n .ag-toggle-button-input-wrapper input {\n opacity: 0;\n height: 100%;\n width: 100%;\n }\n .ag-toggle-button-input-wrapper:focus-within {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-toggle-button-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-toggle-button-input-wrapper.ag-checked {\n background-color: var(--ag-toggle-button-on-background-color);\n border-color: var(--ag-toggle-button-on-border-color);\n }\n .ag-toggle-button-input-wrapper::before {\n content: ' ';\n position: absolute;\n top: calc(0px - var(--ag-toggle-button-border-width));\n left: calc(0px - var(--ag-toggle-button-border-width));\n display: block;\n box-sizing: border-box;\n height: var(--ag-toggle-button-height);\n width: var(--ag-toggle-button-height);\n background-color: var(--ag-toggle-button-switch-background-color);\n border-radius: 100%;\n transition: left 100ms;\n border: var(--ag-toggle-button-border-width) solid;\n border-color: var(--ag-toggle-button-switch-border-color);\n }\n .ag-toggle-button-input-wrapper.ag-checked::before {\n left: calc(100% - var(--ag-toggle-button-height));\n border-color: var(--ag-toggle-button-on-border-color);\n }\n\n .ag-radio-button-input-wrapper {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-checkbox-background-color);\n border-radius: var(--ag-checkbox-border-radius);\n display: inline-block;\n vertical-align: middle;\n flex: none;\n border-radius: var(--ag-icon-size);\n }\n .ag-radio-button-input-wrapper input,\n .ag-radio-button-input-wrapper input {\n -webkit-appearance: none;\n opacity: 0;\n width: 100%;\n height: 100%;\n }\n .ag-radio-button-input-wrapper:focus-within,\n .ag-radio-button-input-wrapper:active {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-radio-button-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-radio-button-input-wrapper::after {\n content: var(--ag-icon-font-code-radio-button-off, '\\\\f126');\n color: var(--ag-checkbox-unchecked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-radio-button-input-wrapper.ag-checked::after {\n content: var(--ag-icon-font-code-radio-button-on, '\\\\f127');\n color: var(--ag-checkbox-checked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n\n input[class^='ag-'][type='range'] {\n -webkit-appearance: none;\n width: 100%;\n height: 100%;\n background: none;\n overflow: visible;\n }\n input[class^='ag-'][type='range']::-webkit-slider-runnable-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n }\n input[class^='ag-'][type='range']::-moz-range-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n }\n input[class^='ag-'][type='range']::-ms-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n color: transparent;\n width: calc(100% - 2px);\n }\n input[class^='ag-'][type='range']::-webkit-slider-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n transform: translateY(calc(var(--ag-icon-size) * -0.5 + 1.5px));\n }\n input[class^='ag-'][type='range']::-ms-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n }\n input[class^='ag-'][type='range']::-moz-ag-range-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n }\n input[class^='ag-'][type='range']:focus {\n outline: none;\n }\n input[class^='ag-'][type='range']:focus::-webkit-slider-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:focus::-ms-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:focus::-moz-ag-range-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:active::-webkit-slider-runnable-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:active::-moz-ag-range-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:active::-ms-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:disabled {\n opacity: 0.5;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Alpine Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeAlpineNofontsCSS = css `\n .ag-theme-alpine,\n .ag-theme-alpine-dark {\n --ag-alpine-active-color: #2196f3;\n --ag-selected-row-background-color: rgba(33, 150, 243, 0.3);\n --ag-row-hover-color: rgba(33, 150, 243, 0.1);\n --ag-column-hover-color: rgba(33, 150, 243, 0.1);\n --ag-input-focus-border-color: rgba(33, 150, 243, 0.4);\n --ag-range-selection-background-color: rgba(33, 150, 243, 0.2);\n --ag-range-selection-background-color-2: rgba(33, 150, 243, 0.36);\n --ag-range-selection-background-color-3: rgba(33, 150, 243, 0.49);\n --ag-range-selection-background-color-4: rgba(33, 150, 243, 0.59);\n --ag-background-color: #fff;\n --ag-foreground-color: #181d1f;\n --ag-border-color: #babfc7;\n --ag-secondary-border-color: #dde2eb;\n --ag-header-background-color: #f8f8f8;\n --ag-tooltip-background-color: #f8f8f8;\n --ag-odd-row-background-color: #fcfcfc;\n --ag-control-panel-background-color: #f8f8f8;\n --ag-subheader-background-color: #fff;\n --ag-invalid-color: #e02525;\n --ag-checkbox-unchecked-color: #999;\n --ag-checkbox-background-color: var(--ag-background-color);\n --ag-checkbox-checked-color: var(--ag-alpine-active-color);\n --ag-range-selection-border-color: var(--ag-alpine-active-color);\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-input-border-color: var(--ag-border-color);\n --ag-input-border-color-invalid: var(--ag-invalid-color);\n --ag-input-focus-box-shadow: 0 0 2px 0.1rem var(--ag-input-focus-border-color);\n --ag-disabled-foreground-color: rgba(24, 29, 31, 0.5);\n --ag-chip-background-color: rgba(24, 29, 31, 0.07);\n --ag-input-disabled-border-color: rgba(186, 191, 199, 0.3);\n --ag-input-disabled-background-color: rgba(186, 191, 199, 0.15);\n --ag-borders: solid 1px;\n --ag-border-radius: 3px;\n --ag-borders-side-button: none;\n --ag-side-button-selected-background-color: transparent;\n --ag-header-column-resize-handle-display: block;\n --ag-header-column-resize-handle-width: 2px;\n --ag-header-column-resize-handle-height: 30%;\n --ag-grid-size: 6px;\n --ag-icon-size: 16px;\n --ag-row-height: calc(var(--ag-grid-size) * 7);\n --ag-header-height: calc(var(--ag-grid-size) * 8);\n --ag-list-item-height: calc(var(--ag-grid-size) * 4);\n --ag-column-select-indent-size: var(--ag-icon-size);\n --ag-set-filter-indent-size: var(--ag-icon-size);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-cell-widget-spacing: calc(var(--ag-grid-size) * 2);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.5);\n --ag-toggle-button-height: 18px;\n --ag-toggle-button-width: 28px;\n --ag-font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,\n 'Helvetica Neue', sans-serif;\n --ag-font-size: 13px;\n --ag-icon-font-family: agGridAlpine;\n --ag-selected-tab-underline-color: var(--ag-alpine-active-color);\n --ag-selected-tab-underline-width: 2px;\n --ag-selected-tab-underline-transition-speed: 0.3s;\n --ag-tab-min-width: 240px;\n --ag-card-shadow: 0 1px 4px 1px rgba(186, 191, 199, 0.4);\n --ag-popup-shadow: var(--ag-card-shadow);\n --ag-side-bar-panel-width: 250px;\n }\n\n .ag-theme-alpine-dark {\n --ag-background-color: #181d1f;\n --ag-foreground-color: #fff;\n --ag-border-color: #68686e;\n --ag-secondary-border-color: rgba(88, 86, 82, 0.5);\n --ag-modal-overlay-background-color: rgba(24, 29, 31, 0.66);\n --ag-header-background-color: #222628;\n --ag-tooltip-background-color: #222628;\n --ag-odd-row-background-color: #222628;\n --ag-control-panel-background-color: #222628;\n --ag-subheader-background-color: #000;\n --ag-input-disabled-background-color: #282c2f;\n --ag-input-focus-box-shadow:\n 0 0 2px 0.5px rgba(255, 255, 255, 0.5), 0 0 4px 3px var(--ag-input-focus-border-color);\n --ag-card-shadow: 0 1px 20px 1px black;\n --ag-disabled-foreground-color: rgba(255, 255, 255, 0.5);\n --ag-chip-background-color: rgba(255, 255, 255, 0.07);\n --ag-input-disabled-border-color: rgba(104, 104, 110, 0.3);\n --ag-input-disabled-background-color: rgba(104, 104, 110, 0.07);\n }\n\n .ag-theme-alpine .ag-filter-toolpanel-header,\n .ag-theme-alpine .ag-filter-toolpanel-search,\n .ag-theme-alpine .ag-status-bar,\n .ag-theme-alpine .ag-header-row,\n .ag-theme-alpine .ag-panel-title-bar-title,\n .ag-theme-alpine .ag-multi-filter-group-title-bar,\n .ag-theme-alpine-dark .ag-filter-toolpanel-header,\n .ag-theme-alpine-dark .ag-filter-toolpanel-search,\n .ag-theme-alpine-dark .ag-status-bar,\n .ag-theme-alpine-dark .ag-header-row,\n .ag-theme-alpine-dark .ag-panel-title-bar-title,\n .ag-theme-alpine-dark .ag-multi-filter-group-title-bar {\n font-weight: 700;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-alpine .ag-row,\n .ag-theme-alpine-dark .ag-row {\n font-size: calc(var(--ag-font-size) + 1px);\n }\n .ag-theme-alpine input[class^='ag-']:not([type]),\n .ag-theme-alpine input[class^='ag-'][type='text'],\n .ag-theme-alpine input[class^='ag-'][type='number'],\n .ag-theme-alpine input[class^='ag-'][type='tel'],\n .ag-theme-alpine input[class^='ag-'][type='date'],\n .ag-theme-alpine input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine textarea[class^='ag-'],\n .ag-theme-alpine-dark input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark textarea[class^='ag-'] {\n min-height: calc(var(--ag-grid-size) * 4);\n border-radius: var(--ag-border-radius);\n }\n .ag-theme-alpine .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine .ag-ltr textarea[class^='ag-'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark .ag-ltr textarea[class^='ag-'] {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine .ag-rtl textarea[class^='ag-'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark .ag-rtl textarea[class^='ag-'] {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-tab,\n .ag-theme-alpine-dark .ag-tab {\n padding: calc(var(--ag-grid-size) * 1.5);\n transition: color 0.4s;\n flex: 1 1 auto;\n }\n .ag-theme-alpine .ag-tab-selected,\n .ag-theme-alpine-dark .ag-tab-selected {\n color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-menu,\n .ag-theme-alpine-dark .ag-menu {\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-theme-alpine .ag-menu-header,\n .ag-theme-alpine-dark .ag-menu-header {\n background-color: var(--ag-control-panel-background-color);\n padding-top: 1px;\n }\n .ag-theme-alpine .ag-tabs-header,\n .ag-theme-alpine-dark .ag-tabs-header {\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n .ag-theme-alpine .ag-charts-settings-group-title-bar,\n .ag-theme-alpine .ag-charts-data-group-title-bar,\n .ag-theme-alpine .ag-charts-format-top-level-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-settings-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-data-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-format-top-level-group-title-bar {\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n line-height: calc(var(--ag-icon-size) + var(--ag-grid-size) - 2px);\n }\n .ag-theme-alpine .ag-chart-mini-thumbnail,\n .ag-theme-alpine-dark .ag-chart-mini-thumbnail {\n background-color: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-chart-settings-nav-bar,\n .ag-theme-alpine-dark .ag-chart-settings-nav-bar {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n .ag-theme-alpine .ag-ltr .ag-group-title-bar-icon,\n .ag-theme-alpine-dark .ag-ltr .ag-group-title-bar-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-group-title-bar-icon,\n .ag-theme-alpine-dark .ag-rtl .ag-group-title-bar-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-charts-format-top-level-group-toolbar {\n margin-top: var(--ag-grid-size);\n }\n .ag-theme-alpine .ag-ltr .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-ltr .ag-charts-format-top-level-group-toolbar {\n padding-left: calc(var(--ag-icon-size) * 0.5 + var(--ag-grid-size) * 2);\n }\n\n .ag-theme-alpine .ag-rtl .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-rtl .ag-charts-format-top-level-group-toolbar {\n padding-right: calc(var(--ag-icon-size) * 0.5 + var(--ag-grid-size) * 2);\n }\n\n .ag-theme-alpine .ag-charts-format-sub-level-group,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group {\n border-left: dashed 1px;\n border-left-color: var(--ag-border-color);\n padding-left: var(--ag-grid-size);\n margin-bottom: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-title-bar {\n padding-top: 0;\n padding-bottom: 0;\n background: none;\n font-weight: 700;\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-container,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-container {\n padding-bottom: 0;\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-item:last-child,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-item:last-child {\n margin-bottom: 0;\n }\n .ag-theme-alpine.ag-dnd-ghost,\n .ag-theme-alpine-dark.ag-dnd-ghost {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 700;\n }\n .ag-theme-alpine .ag-side-buttons,\n .ag-theme-alpine-dark .ag-side-buttons {\n width: calc(var(--ag-grid-size) * 5);\n }\n .ag-theme-alpine .ag-standard-button,\n .ag-theme-alpine-dark .ag-standard-button {\n appearance: none;\n -webkit-appearance: none;\n border-radius: var(--ag-border-radius);\n border: 1px solid;\n border-color: var(--ag-alpine-active-color);\n color: var(--ag-alpine-active-color);\n background-color: var(--ag-background-color);\n font-weight: 600;\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-standard-button:hover,\n .ag-theme-alpine-dark .ag-standard-button:hover {\n border-color: var(--ag-alpine-active-color);\n background-color: var(--ag-row-hover-color);\n }\n .ag-theme-alpine .ag-standard-button:active,\n .ag-theme-alpine-dark .ag-standard-button:active {\n border-color: var(--ag-alpine-active-color);\n background-color: var(--ag-alpine-active-color);\n color: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-standard-button:disabled,\n .ag-theme-alpine-dark .ag-standard-button:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n .ag-theme-alpine .ag-column-drop-vertical,\n .ag-theme-alpine-dark .ag-column-drop-vertical {\n min-height: 75px;\n }\n .ag-theme-alpine .ag-column-drop-vertical-title-bar,\n .ag-theme-alpine-dark .ag-column-drop-vertical-title-bar {\n padding: calc(var(--ag-grid-size) * 2);\n padding-bottom: 0px;\n }\n .ag-theme-alpine .ag-column-drop-vertical-empty-message,\n .ag-theme-alpine-dark .ag-column-drop-vertical-empty-message {\n display: flex;\n align-items: center;\n border: dashed 1px;\n border-color: var(--ag-border-color);\n margin: calc(var(--ag-grid-size) * 2);\n padding: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-column-drop-empty-message,\n .ag-theme-alpine-dark .ag-column-drop-empty-message {\n color: var(--ag-foreground-color);\n opacity: 0.75;\n }\n .ag-theme-alpine .ag-status-bar,\n .ag-theme-alpine-dark .ag-status-bar {\n font-weight: normal;\n }\n .ag-theme-alpine .ag-status-name-value-value,\n .ag-theme-alpine-dark .ag-status-name-value-value {\n font-weight: 700;\n }\n .ag-theme-alpine .ag-paging-number,\n .ag-theme-alpine .ag-paging-row-summary-panel-number,\n .ag-theme-alpine-dark .ag-paging-number,\n .ag-theme-alpine-dark .ag-paging-row-summary-panel-number {\n font-weight: 700;\n }\n .ag-theme-alpine .ag-column-drop-cell-button,\n .ag-theme-alpine-dark .ag-column-drop-cell-button {\n opacity: 0.5;\n }\n .ag-theme-alpine .ag-column-drop-cell-button:hover,\n .ag-theme-alpine-dark .ag-column-drop-cell-button:hover {\n opacity: 0.75;\n }\n .ag-theme-alpine .ag-header-cell-menu-button:hover,\n .ag-theme-alpine .ag-side-button-button:hover,\n .ag-theme-alpine .ag-tab:hover,\n .ag-theme-alpine .ag-panel-title-bar-button:hover,\n .ag-theme-alpine .ag-header-expand-icon:hover,\n .ag-theme-alpine .ag-column-group-icons:hover,\n .ag-theme-alpine .ag-set-filter-group-icons:hover,\n .ag-theme-alpine .ag-group-expanded .ag-icon:hover,\n .ag-theme-alpine .ag-group-contracted .ag-icon:hover,\n .ag-theme-alpine .ag-chart-settings-prev:hover,\n .ag-theme-alpine .ag-chart-settings-next:hover,\n .ag-theme-alpine .ag-group-title-bar-icon:hover,\n .ag-theme-alpine .ag-column-select-header-icon:hover,\n .ag-theme-alpine .ag-floating-filter-button-button:hover,\n .ag-theme-alpine .ag-filter-toolpanel-expand:hover,\n .ag-theme-alpine .ag-chart-menu-icon:hover,\n .ag-theme-alpine .ag-chart-menu-close:hover,\n .ag-theme-alpine-dark .ag-header-cell-menu-button:hover,\n .ag-theme-alpine-dark .ag-side-button-button:hover,\n .ag-theme-alpine-dark .ag-tab:hover,\n .ag-theme-alpine-dark .ag-panel-title-bar-button:hover,\n .ag-theme-alpine-dark .ag-header-expand-icon:hover,\n .ag-theme-alpine-dark .ag-column-group-icons:hover,\n .ag-theme-alpine-dark .ag-set-filter-group-icons:hover,\n .ag-theme-alpine-dark .ag-group-expanded .ag-icon:hover,\n .ag-theme-alpine-dark .ag-group-contracted .ag-icon:hover,\n .ag-theme-alpine-dark .ag-chart-settings-prev:hover,\n .ag-theme-alpine-dark .ag-chart-settings-next:hover,\n .ag-theme-alpine-dark .ag-group-title-bar-icon:hover,\n .ag-theme-alpine-dark .ag-column-select-header-icon:hover,\n .ag-theme-alpine-dark .ag-floating-filter-button-button:hover,\n .ag-theme-alpine-dark .ag-filter-toolpanel-expand:hover,\n .ag-theme-alpine-dark .ag-chart-menu-icon:hover,\n .ag-theme-alpine-dark .ag-chart-menu-close:hover {\n color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-chart-menu-close,\n .ag-theme-alpine-dark .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-chart-menu-close:hover .ag-icon,\n .ag-theme-alpine-dark .ag-chart-menu-close:hover .ag-icon {\n border-color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-chart-menu-close .ag-icon,\n .ag-theme-alpine-dark .ag-chart-menu-close .ag-icon {\n background: var(--ag-header-background-color);\n border: 1px solid var(--ag-border-color);\n border-right: none;\n }\n .ag-theme-alpine .ag-chart-settings-card-item.ag-not-selected:hover,\n .ag-theme-alpine-dark .ag-chart-settings-card-item.ag-not-selected:hover {\n opacity: 0.35;\n }\n .ag-theme-alpine .ag-ltr .ag-panel-title-bar-button,\n .ag-theme-alpine-dark .ag-ltr .ag-panel-title-bar-button {\n margin-left: calc(var(--ag-grid-size) * 2);\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-panel-title-bar-button,\n .ag-theme-alpine-dark .ag-rtl .ag-panel-title-bar-button {\n margin-right: calc(var(--ag-grid-size) * 2);\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-ltr .ag-filter-toolpanel-group-container,\n .ag-theme-alpine-dark .ag-ltr .ag-filter-toolpanel-group-container {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-filter-toolpanel-group-container,\n .ag-theme-alpine-dark .ag-rtl .ag-filter-toolpanel-group-container {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-filter-toolpanel-instance-filter {\n border: none;\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-theme-alpine .ag-ltr .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-ltr .ag-filter-toolpanel-instance-filter {\n border-left: dashed 1px;\n border-left-color: var(--ag-border-color);\n margin-left: calc(var(--ag-icon-size) * 0.5);\n }\n\n .ag-theme-alpine .ag-rtl .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-rtl .ag-filter-toolpanel-instance-filter {\n border-right: dashed 1px;\n border-right-color: var(--ag-border-color);\n margin-right: calc(var(--ag-icon-size) * 0.5);\n }\n\n .ag-theme-alpine .ag-set-filter-list,\n .ag-theme-alpine-dark .ag-set-filter-list {\n padding-top: calc(var(--ag-grid-size) * 0.5);\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-alpine .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-alpine .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-alpine .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-alpine .ag-layout-print .ag-center-cols-container,\n .ag-theme-alpine-dark .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-alpine-dark .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-alpine-dark .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-alpine-dark .ag-layout-print .ag-center-cols-container {\n min-height: 150px;\n }\n .ag-theme-alpine .ag-overlay-no-rows-wrapper.ag-layout-auto-height,\n .ag-theme-alpine-dark .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 60px;\n }\n .ag-theme-alpine .ag-date-time-list-page-entry-is-current,\n .ag-theme-alpine-dark .ag-date-time-list-page-entry-is-current {\n background-color: var(--ag-alpine-active-color);\n }\n\n .ag-theme-alpine-dark {\n color-scheme: dark;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Balham Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeBalhamNofontsCSS = css `\n .ag-theme-balham,\n .ag-theme-balham-dark {\n --ag-balham-active-color: #0091ea;\n --ag-foreground-color: #000;\n --ag-background-color: #fff;\n --ag-header-background-color: #f5f7f7;\n --ag-tooltip-background-color: #cbd0d3;\n --ag-subheader-background-color: #e2e9eb;\n --ag-control-panel-background-color: #f5f7f7;\n --ag-border-color: #bdc3c7;\n --ag-odd-row-background-color: #fcfdfe;\n --ag-row-hover-color: #ecf0f1;\n --ag-column-hover-color: #ecf0f1;\n --ag-input-border-color: #95a5a6;\n --ag-invalid-color: #e02525;\n --ag-input-disabled-background-color: #ebebeb;\n --ag-checkbox-unchecked-color: #7f8c8d;\n --ag-input-focus-border-color: #719ece;\n --ag-input-focus-box-shadow: 0 0 2px 1px var(--ag-input-focus-border-color);\n --ag-range-selection-border-color: var(--ag-balham-active-color);\n --ag-checkbox-checked-color: var(--ag-balham-active-color);\n --ag-checkbox-background-color: var(--ag-background-color);\n --ag-secondary-foreground-color: rgba(0, 0, 0, 0.54);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.38);\n --ag-subheader-toolbar-background-color: rgba(226, 233, 235, 0.5);\n --ag-row-border-color: rgba(189, 195, 199, 0.58);\n --ag-chip-background-color: rgba(0, 0, 0, 0.1);\n --ag-range-selection-background-color: rgba(0, 145, 234, 0.2);\n --ag-range-selection-background-color-2: rgba(0, 145, 234, 0.36);\n --ag-range-selection-background-color-3: rgba(0, 145, 234, 0.49);\n --ag-range-selection-background-color-4: rgba(0, 145, 234, 0.59);\n --ag-selected-row-background-color: rgba(0, 145, 234, 0.28);\n --ag-header-column-separator-color: rgba(189, 195, 199, 0.5);\n --ag-input-disabled-border-color: rgba(149, 165, 166, 0.3);\n --ag-header-column-separator-display: block;\n --ag-header-column-separator-height: 50%;\n --ag-grid-size: 4px;\n --ag-icon-size: 16px;\n --ag-row-height: calc(var(--ag-grid-size) * 7);\n --ag-header-height: calc(var(--ag-grid-size) * 8);\n --ag-list-item-height: calc(var(--ag-grid-size) * 6);\n --ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-input-height: calc(var(--ag-grid-size) * 4);\n --ag-font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,\n 'Helvetica Neue', sans-serif;\n --ag-font-size: 12px;\n --ag-icon-font-family: agGridBalham;\n --ag-border-radius: 2px;\n --ag-checkbox-border-radius: 3px;\n --ag-card-shadow: none;\n }\n\n .ag-theme-balham-dark {\n --ag-balham-active-color: #00b0ff;\n --ag-foreground-color: #f5f5f5;\n --ag-background-color: #2d3436;\n --ag-header-background-color: #1c1c1c;\n --ag-tooltip-background-color: #1c1f20;\n --ag-subheader-background-color: #111;\n --ag-control-panel-background-color: #202020;\n --ag-border-color: #424242;\n --ag-odd-row-background-color: #262c2e;\n --ag-row-hover-color: #3d4749;\n --ag-column-hover-color: #3d4749;\n --ag-input-border-color: #f0f0f0;\n --ag-input-disabled-background-color: rgba(48, 46, 46, 0.3);\n --ag-modal-overlay-background-color: rgba(45, 52, 54, 0.66);\n --ag-checkbox-unchecked-color: #ecf0f1;\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-disabled-foreground-color: rgba(245, 245, 245, 0.38);\n --ag-subheader-toolbar-background-color: rgba(17, 17, 17, 0.5);\n --ag-row-border-color: #5c5c5c;\n --ag-chip-background-color: rgba(245, 245, 245, 0.08);\n --ag-range-selection-background-color: rgba(0, 176, 255, 0.2);\n --ag-range-selection-background-color-2: rgba(0, 176, 255, 0.36);\n --ag-range-selection-background-color-3: rgba(0, 176, 255, 0.49);\n --ag-range-selection-background-color-4: rgba(0, 176, 255, 0.59);\n --ag-selected-row-background-color: rgba(0, 176, 255, 0.28);\n --ag-header-column-separator-color: rgba(66, 66, 66, 0.5);\n --ag-input-disabled-border-color: rgba(240, 240, 240, 0.3);\n --ag-header-foreground-color: rgba(245, 245, 245, 0.64);\n --ag-toggle-button-off-background-color: transparent;\n --ag-toggle-button-off-border-color: var(--ag-foreground-color);\n --ag-range-selection-chart-category-background-color: rgba(26, 177, 74, 0.5);\n --ag-range-selection-chart-background-color: rgba(45, 166, 255, 0.5);\n --ag-input-focus-box-shadow: 0 0 4px 1.5px var(--ag-input-focus-border-color);\n }\n\n .ag-theme-balham .ag-filter-toolpanel-header,\n .ag-theme-balham .ag-filter-toolpanel-search,\n .ag-theme-balham .ag-status-bar,\n .ag-theme-balham .ag-header-row,\n .ag-theme-balham .ag-multi-filter-group-title-bar,\n .ag-theme-balham-dark .ag-filter-toolpanel-header,\n .ag-theme-balham-dark .ag-filter-toolpanel-search,\n .ag-theme-balham-dark .ag-status-bar,\n .ag-theme-balham-dark .ag-header-row,\n .ag-theme-balham-dark .ag-multi-filter-group-title-bar {\n font-weight: 600;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-balham .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham .ag-ltr textarea[class^='ag-'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham-dark .ag-ltr textarea[class^='ag-'] {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham .ag-rtl textarea[class^='ag-'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham-dark .ag-rtl textarea[class^='ag-'] {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-column-drop-vertical-empty-message,\n .ag-theme-balham .ag-status-bar,\n .ag-theme-balham-dark .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-status-bar {\n font-weight: 600;\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-balham.ag-dnd-ghost,\n .ag-theme-balham-dark.ag-dnd-ghost {\n font-size: var(--ag-font-size);\n font-weight: 600;\n }\n .ag-theme-balham .ag-tab,\n .ag-theme-balham-dark .ag-tab {\n border: 1px solid transparent;\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n margin: var(--ag-grid-size);\n margin-bottom: -1px;\n }\n .ag-theme-balham .ag-tab-selected,\n .ag-theme-balham-dark .ag-tab-selected {\n background-color: var(--ag-background-color);\n border-color: var(--ag-border-color);\n border-bottom-color: transparent;\n }\n .ag-theme-balham .ag-tabs-header,\n .ag-theme-balham-dark .ag-tabs-header {\n border-bottom: 1px solid var(--ag-border-color);\n }\n .ag-theme-balham .ag-column-drop-cell,\n .ag-theme-balham-dark .ag-column-drop-cell {\n height: calc(var(--ag-grid-size) * 6);\n }\n .ag-theme-balham .ag-column-drop-vertical-title,\n .ag-theme-balham-dark .ag-column-drop-vertical-title {\n color: var(--ag-foreground-color);\n }\n .ag-theme-balham .ag-column-drop-vertical-cell,\n .ag-theme-balham-dark .ag-column-drop-vertical-cell {\n margin-left: calc(var(--ag-grid-size) * 2);\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical-cell-text,\n .ag-theme-balham-dark .ag-column-drop-vertical-cell-text {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical-icon,\n .ag-theme-balham-dark .ag-column-drop-vertical-icon {\n color: var(--ag-secondary-foreground-color);\n }\n .ag-theme-balham .ag-ltr .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-ltr .ag-column-drop-vertical-empty-message {\n padding-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-rtl .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-vertical-empty-message {\n padding-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-column-drop-horizontal,\n .ag-theme-balham-dark .ag-column-drop-horizontal {\n height: var(--ag-header-height);\n }\n .ag-theme-balham .ag-column-drop-empty,\n .ag-theme-balham-dark .ag-column-drop-empty {\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-balham .ag-column-drop-horizontal-cell-text,\n .ag-theme-balham-dark .ag-column-drop-horizontal-cell-text {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical,\n .ag-theme-balham-dark .ag-column-drop-vertical {\n padding-top: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-menu-header,\n .ag-theme-balham-dark .ag-menu-header {\n background-color: var(--ag-header-background-color);\n }\n .ag-theme-balham .ag-overlay-loading-center,\n .ag-theme-balham-dark .ag-overlay-loading-center {\n background-color: var(--ag-background-color);\n border: 1px solid var(--ag-border-color);\n color: var(--ag-foreground-color);\n padding: calc(var(--ag-grid-size) * 4);\n }\n .ag-theme-balham .ag-tooltip,\n .ag-theme-balham-dark .ag-tooltip {\n border: none;\n }\n .ag-theme-balham .ag-panel-title-bar-button-icon,\n .ag-theme-balham-dark .ag-panel-title-bar-button-icon {\n font-size: calc(var(--ag-icon-size) + var(--ag-grid-size));\n }\n .ag-theme-balham .ag-chart-data-section,\n .ag-theme-balham .ag-chart-format-section,\n .ag-theme-balham-dark .ag-chart-data-section,\n .ag-theme-balham-dark .ag-chart-format-section {\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-balham .ag-group-toolbar,\n .ag-theme-balham-dark .ag-group-toolbar {\n background-color: var(--ag-subheader-toolbar-background-color);\n }\n .ag-theme-balham .ag-chart-tab,\n .ag-theme-balham-dark .ag-chart-tab {\n padding-top: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-balham .ag-charts-format-sub-level-group-item,\n .ag-theme-balham-dark .ag-charts-format-sub-level-group-item {\n margin-bottom: calc(var(--ag-grid-size) * 1.5);\n }\n .ag-theme-balham .ag-chart-menu-close,\n .ag-theme-balham-dark .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-balham .ag-chart-menu-close:hover .ag-icon,\n .ag-theme-balham-dark .ag-chart-menu-close:hover .ag-icon {\n border-color: var(--ag-border-color);\n }\n .ag-theme-balham .ag-chart-menu-close .ag-icon,\n .ag-theme-balham-dark .ag-chart-menu-close .ag-icon {\n background: var(--ag-header-background-color);\n border: 1px solid var(--ag-secondary-border-color);\n border-right: none;\n }\n\n .ag-theme-balham-dark {\n color-scheme: dark;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Material Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeMaterialNofontsCSS = css `\n .ag-theme-material {\n --ag-material-primary-color: #3f51b5;\n --ag-material-accent-color: #ff4081;\n --ag-foreground-color: rgba(0, 0, 0, 0.87);\n --ag-secondary-foreground-color: rgba(0, 0, 0, 0.54);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.38);\n --ag-background-color: #fff;\n --ag-header-background-color: #fff;\n --ag-tooltip-background-color: #fff;\n --ag-subheader-background-color: #eee;\n --ag-subheader-toolbar-background-color: rgba(238, 238, 238, 0.5);\n --ag-header-cell-hover-background-color: #f2f2f2;\n --ag-chip-background-color: #e2e2e2;\n --ag-range-selection-background-color: rgba(122, 134, 203, 0.1);\n --ag-range-selection-background-color-2: rgba(122, 134, 203, 0.19);\n --ag-range-selection-background-color-3: rgba(122, 134, 203, 0.27);\n --ag-range-selection-background-color-4: rgba(122, 134, 203, 0.34);\n --ag-range-selection-highlight-color: #fce4ec;\n --ag-row-hover-color: #fafafa;\n --ag-column-hover-color: #fafafa;\n --ag-control-panel-background-color: #fafafa;\n --ag-selected-row-background-color: #eee;\n --ag-checkbox-unchecked-color: #333;\n --ag-value-change-value-highlight-background-color: #00acc1;\n --ag-side-button-selected-background-color: transparent;\n --ag-range-selection-border-color: var(--ag-material-primary-color);\n --ag-checkbox-checked-color: var(--ag-material-accent-color);\n --ag-borders: none;\n --ag-borders-critical: solid 1px;\n --ag-border-color: #e2e2e2;\n --ag-grid-size: 8px;\n --ag-icon-size: 18px;\n --ag-header-height: calc(var(--ag-grid-size) * 7);\n --ag-row-height: calc(var(--ag-grid-size) * 6);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-list-item-height: calc(var(--ag-grid-size) * 4);\n --ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));\n --ag-filter-tool-panel-sub-level-row-height: calc(var(--ag-grid-size) * 4);\n --ag-checkbox-border-radius: 2px;\n --ag-toggle-button-switch-border-width: 2px;\n --ag-toggle-button-height: var(--ag-icon-size);\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.75);\n --ag-font-family: 'Roboto', sans-serif;\n --ag-font-size: 13px;\n --ag-icon-font-family: agGridMaterial;\n --ag-selected-tab-underline-color: var(--ag-material-primary-color);\n --ag-selected-tab-underline-width: 2px;\n --ag-input-focus-border-color: var(--ag-material-primary-color);\n --ag-input-focus-box-shadow: 0 0 0 5px rgba(32, 33, 36, 0.122);\n --ag-card-shadow:\n 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n --ag-card-radius: 2px;\n --ag-invalid-color: #e02525;\n }\n\n .ag-theme-material .ag-filter-toolpanel-header,\n .ag-theme-material .ag-filter-toolpanel-search,\n .ag-theme-material .ag-status-bar,\n .ag-theme-material .ag-header-row,\n .ag-theme-material .ag-panel-title-bar-title,\n .ag-theme-material .ag-multi-filter-group-title-bar {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-material .ag-tab {\n height: calc(var(--ag-grid-size) * 4.5);\n flex: 1 1 auto;\n }\n .ag-theme-material .ag-tabs-header,\n .ag-theme-material .ag-column-drop-horizontal {\n background-color: var(--ag-subheader-background-color);\n }\n .ag-theme-material .ag-tabs-body {\n padding: calc(var(--ag-grid-size) * 0.5) 0;\n }\n .ag-theme-material .ag-tabs-body .ag-menu-list {\n padding-top: 0;\n padding-bottom: 0;\n }\n .ag-theme-material .ag-header-cell,\n .ag-theme-material .ag-header-group-cell {\n transition: background-color 0.5s;\n }\n .ag-theme-material .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing {\n bottom: 0;\n }\n .ag-theme-material .ag-cell-inline-editing {\n padding: var(--ag-grid-size);\n height: calc(var(--ag-row-height) + var(--ag-grid-size) * 3);\n border-color: var(--ag-border-color) !important;\n }\n .ag-theme-material .ag-has-focus .ag-cell-inline-editing {\n border-color: var(--ag-input-focus-border-color) !important;\n }\n .ag-theme-material .ag-side-button-button {\n color: var(--ag-foreground-color);\n }\n .ag-theme-material .ag-column-drop-vertical {\n border-bottom: solid 1px;\n border-bottom-color: var(--ag-border-color);\n padding-top: var(--ag-grid-size);\n }\n .ag-theme-material .ag-column-drop-vertical.ag-last-column-drop {\n border-bottom: none;\n }\n .ag-theme-material .ag-column-drop-vertical-cell {\n margin-left: 0;\n }\n .ag-theme-material .ag-column-drop-vertical-empty-message {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-material .ag-ltr .ag-column-drop-vertical-empty-message {\n padding-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-rtl .ag-column-drop-vertical-empty-message {\n padding-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-status-bar {\n border: solid 1px;\n border-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-panel-column-select {\n border-top: solid 1px;\n border-top-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-select,\n .ag-theme-material .ag-column-select-header {\n border-bottom: solid 1px;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-select-header {\n height: var(--ag-header-height);\n }\n .ag-theme-material .ag-group-title-bar {\n padding: calc(var(--ag-grid-size) * 0.75) var(--ag-grid-size);\n }\n .ag-theme-material .ag-charts-format-sub-level-group-title-bar {\n padding: calc(var(--ag-grid-size) * 0.5) var(--ag-grid-size);\n }\n .ag-theme-material .ag-chart-data-section,\n .ag-theme-material .ag-chart-format-section {\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-material .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-material .ag-chart-menu-close .ag-icon {\n background: var(--ag-subheader-background-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]),\n .ag-theme-material input[class^='ag-'][type='text'],\n .ag-theme-material input[class^='ag-'][type='number'],\n .ag-theme-material input[class^='ag-'][type='tel'],\n .ag-theme-material input[class^='ag-'][type='date'],\n .ag-theme-material input[class^='ag-'][type='datetime-local'],\n .ag-theme-material textarea[class^='ag-'] {\n background: transparent;\n color: var(--ag-foreground-color);\n font-family: inherit;\n font-size: inherit;\n height: calc(var(--ag-grid-size) * 5);\n padding-bottom: var(--ag-grid-size);\n border-width: 0;\n border-bottom: 2px solid;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):focus,\n .ag-theme-material input[class^='ag-'][type='text']:focus,\n .ag-theme-material input[class^='ag-'][type='number']:focus,\n .ag-theme-material input[class^='ag-'][type='tel']:focus,\n .ag-theme-material input[class^='ag-'][type='date']:focus,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:focus,\n .ag-theme-material textarea[class^='ag-']:focus {\n border-bottom: 2px solid;\n border-bottom-color: var(--ag-material-primary-color);\n outline: none;\n box-shadow: none;\n }\n .ag-theme-material input[class^='ag-']:not([type])::placeholder,\n .ag-theme-material input[class^='ag-'][type='text']::placeholder,\n .ag-theme-material input[class^='ag-'][type='number']::placeholder,\n .ag-theme-material input[class^='ag-'][type='tel']::placeholder,\n .ag-theme-material input[class^='ag-'][type='date']::placeholder,\n .ag-theme-material input[class^='ag-'][type='datetime-local']::placeholder,\n .ag-theme-material textarea[class^='ag-']::placeholder {\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):disabled,\n .ag-theme-material input[class^='ag-'][type='text']:disabled,\n .ag-theme-material input[class^='ag-'][type='number']:disabled,\n .ag-theme-material input[class^='ag-'][type='tel']:disabled,\n .ag-theme-material input[class^='ag-'][type='date']:disabled,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:disabled,\n .ag-theme-material textarea[class^='ag-']:disabled {\n border-bottom: 1px solid;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):invalid,\n .ag-theme-material input[class^='ag-'][type='text']:invalid,\n .ag-theme-material input[class^='ag-'][type='number']:invalid,\n .ag-theme-material input[class^='ag-'][type='tel']:invalid,\n .ag-theme-material input[class^='ag-'][type='date']:invalid,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:invalid,\n .ag-theme-material textarea[class^='ag-']:invalid {\n border-width: 0;\n border-bottom: 1px solid;\n border-bottom-color: var(--ag-invalid-color);\n color: var(--ag-invalid-color);\n }\n .ag-theme-material .ag-standard-button {\n appearance: none;\n background-color: transparent;\n border: 0;\n color: var(--ag-material-primary-color);\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n padding: 0;\n text-transform: uppercase;\n }\n .ag-theme-material .ag-standard-button:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n .ag-theme-material.ag-dnd-ghost {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n }\n .ag-theme-material .ag-filter-toolpanel-header {\n height: calc(var(--ag-grid-size) * 4);\n }\n .ag-theme-material .ag-filter-toolpanel-group-level-0-header {\n height: calc(var(--ag-grid-size) * 7);\n }\n .ag-theme-material .ag-ltr .ag-filter-apply-panel-button {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-rtl .ag-filter-apply-panel-button {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-material .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-material .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-material .ag-layout-print .ag-center-cols-container {\n min-height: 150px;\n }\n .ag-theme-material .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 60px;\n }\n .ag-theme-material .ag-picker-field-wrapper:focus {\n box-shadow: 0 0 0 1px var(--ag-material-primary-color);\n }\n`;\n","import { css } from '@microsoft/fast-element';\nimport { agGridCSS } from './ag-grid-css';\nimport { agHeadCSS } from './ag-head-css';\nimport { agThemeAlpineNofontsCSS } from './ag-theme-alpine-no-font-css';\nimport { agThemeBalhamNofontsCSS } from './ag-theme-balham-no-font-css';\nimport { agThemeMaterialNofontsCSS } from './ag-theme-material-no-font-css';\nexport * from './fonts';\n/**\n * All External AG Grid Stock in one CSS.\n * @remarks This is a collection of multiple AG themes, only needed if the target element needs more than one stock theme.\n * @public\n */\nexport const agExternalStockStyles = css `\n ${agGridCSS}\n ${agHeadCSS}\n ${agThemeAlpineNofontsCSS}\n ${agThemeBalhamNofontsCSS}\n ${agThemeMaterialNofontsCSS}\n`;\n/**\n * All available External AG Grid Stock CSS.\n * @public\n */\nexport { agGridCSS, agHeadCSS, agThemeAlpineNofontsCSS, agThemeBalhamNofontsCSS, agThemeMaterialNofontsCSS, };\n","/**\n * Event names for datasource-grid communication\n * These represent datasource operations, not grid-specific actions\n */\nexport const datasourceEventNames = {\n // Initialization events\n initialize: 'datasource-initialize',\n ready: 'datasource-ready',\n // Data events\n dataLoaded: 'datasource-data-loaded',\n dataChanged: 'datasource-data-changed',\n dataCleared: 'datasource-data-cleared',\n // Schema events\n schemaUpdated: 'datasource-schema-updated',\n // Status events\n loadingStarted: 'datasource-loading-started',\n loadingFinished: 'datasource-loading-finished',\n noDataAvailable: 'datasource-no-data-available',\n moreDataAvailable: 'datasource-more-data-available',\n // Filter events\n filtersRestored: 'datasource-filters-restored',\n // Error events\n error: 'datasource-error',\n // Destroy datasource events\n destroy: 'datasource-destroy',\n // Size events\n sizeChanged: 'datasource-size-changed',\n // Server-side specific events\n cacheFilterConfig: 'cache-filter-config',\n refreshServerSide: 'refresh-server-side',\n setServerSideDatasource: 'set-server-side-datasource',\n addGridCssClass: 'add-grid-css-class',\n removeGridCssClass: 'remove-grid-css-class',\n applyServerSideTransaction: 'apply-server-side-transaction',\n};\n","/**\n * The Genesis Datasource events names.\n * @public\n */\nexport const gridProGenesisDatasourceEventNames = {\n error: 'datasource-error',\n dataInit: 'datasource-init',\n sizeChanged: 'datasource-size-changed',\n moreRowsChanged: 'more-rows-changed',\n};\n","import { FieldTypeEnum } from '@genesislcap/foundation-comms';\nimport { getEnumFilterParams } from '../grid-pro.definitions';\n/**\n * Returns a filter type based on the Grid Pro field/column type.\n * @param type - The type of the field/column\n * @returns The ag-grid filter type\n */\nexport function getFilterByFieldType(type) {\n switch (type === null || type === void 0 ? void 0 : type.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'agNumberColumnFilter';\n case 'date':\n case 'datetime':\n return 'agDateColumnFilter';\n case 'string':\n case 'enum':\n return 'agMultiColumnFilter';\n default:\n return 'agTextColumnFilter';\n }\n}\n/**\n * Returns the filter params based on the Grid Pro field/column type.\n * @param field - The field metadata\n * @returns the filter params for the specified field type\n * @remarks Currently only returns a default filter params object, for all field types\n * @alpha\n */\nexport function getClientSideFilterParamsByFieldType(field) {\n switch (field.type) {\n case FieldTypeEnum.DATE:\n case FieldTypeEnum.DATETIME: {\n return {\n comparator: function (filterLocalDateAtMidnight, cellValue) {\n if (!cellValue)\n return -1;\n const cellValueTime = new Date(cellValue).setHours(0, 0, 0, 0);\n const filterValueTime = filterLocalDateAtMidnight.getTime();\n if (cellValueTime === filterValueTime) {\n return 0;\n }\n if (cellValueTime < filterValueTime) {\n return -1;\n }\n if (cellValueTime > filterValueTime) {\n return 1;\n }\n },\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n browserDatePicker: true,\n };\n }\n case FieldTypeEnum.ENUM: {\n return getEnumFilterParams(field, getFilterByFieldType(field.type));\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { MessageType, ResourceType, dataServerResultFilter, normaliseCriteria, } from '@genesislcap/foundation-comms';\nimport { LifecycleMixin } from '@genesislcap/foundation-utils';\nimport { DOM, attr, customElement } from '@microsoft/fast-element';\nimport { BehaviorSubject, EMPTY } from 'rxjs';\nimport { catchError, debounceTime, skip, tap } from 'rxjs/operators';\nimport { GridProBaseDatasource, criteriaDelimiter } from '../datasource/base.datasource';\nimport { getClientSideFilterParamsByFieldType, getFilterByFieldType, } from '../datasource/client-side.grid-definitions';\nimport { logger } from '../utils/logger';\nimport { datasourceEventNames, } from './datasource-events.types';\nimport { gridProGenesisDatasourceEventNames } from './grid-pro-genesis-datasource.config';\nconst withoutFullInit = null;\nconst withoutColumnDefs = null;\n/**\n * The Genesis Datasource element, for CSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Client-Side Row Model.\n * @public\n *\n * @fires base-datasource-error - Fired when a datasource error is reported\n * @fires datasource-error - Fired when a datasource error occurs (for grid integration)\n * @fires base-datasource-connected - Fired when error state is cleared after connection succeeds\n * @fires datasource-loading-finished - Fired when loading completes with no pending row changes\n * @fires datasource-no-data-available - Fired when the grid has no rows after load\n * @fires datasource-data-changed - Fired when row data changes from stream updates\n * @fires datasource-initialize - Fired to hand off grid options and initialization flags\n * @fires datasource-destroy - Fired when the datasource is torn down\n * @fires datasource-data-cleared - Fired when row data is cleared\n * @fires datasource-schema-updated - Fired when column metadata or defs are updated\n * @fires datasource-filters-restored - Fired when persisted filters are reapplied\n * @fires datasource-data-loaded - Fired when a data payload is loaded for the grid\n * @fires datasource-loading-started - Fired when a load or refresh starts\n * @fires datasource-more-data-available - Fired when more server rows can be requested\n * @fires datasource-ready - Fired when the host grid is ready (detail includes pagination state)\n * @fires datasource-init - Fired when initial grid data is ready for the client-side model\n * @fires more-rows-changed - Fired when MORE_ROWS availability changes\n * @fires datasource-size-changed - Fired when layout or viewport sizing affects the datasource\n */\nlet GridProGenesisDatasource = class GridProGenesisDatasource extends LifecycleMixin(GridProBaseDatasource) {\n constructor() {\n super(...arguments);\n // Cache for rowData array to avoid repeated Array.from() calls\n this.cachedRowArray = [];\n // Transaction data for grid operations\n this.transactionData = {\n add: [],\n remove: [],\n update: [],\n addIndex: 0,\n };\n this.keepColDefsOnClearRowData = false;\n this.requiresFullRowDataAndColDefs = true;\n this._lastMoreRows = false;\n this._isMoreRowsResult = false;\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n }\n // DatasourceOptions\n criteriaChanged(oldCriteria, newCriteria) {\n return __awaiter(this, void 0, void 0, function* () {\n const criteriaIsNotDuplicate = oldCriteria !== normaliseCriteria(newCriteria, criteriaDelimiter);\n if (this.datasource.initialized && criteriaIsNotDuplicate) {\n yield this.reloadResourceData();\n }\n });\n }\n requestChanged(oldRequest, newRequest) {\n const requestIsNotDuplicate = oldRequest !== newRequest;\n if (this.datasource.initialized && requestIsNotDuplicate) {\n this.reloadResourceData();\n }\n }\n resourceNameChanged(oldValue, newValue) {\n if (!oldValue || oldValue === newValue)\n return;\n this.restart();\n }\n connectedCallback() {\n super.connectedCallback();\n const shouldRunConnect = this.shouldRunConnect;\n DOM.queueUpdate(() => {\n if (!shouldRunConnect)\n return;\n this.init();\n this.subscribeToConnection();\n });\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n const shouldRunDisconnect = this.shouldRunDisconnect;\n DOM.queueUpdate(() => {\n if (!shouldRunDisconnect)\n return;\n this.destroy();\n this.unsubscribeFromConnection();\n });\n }\n deepClone() {\n const copy = super.deepClone();\n copy.deferredGridOptions = {};\n if (this.deferredGridOptions) {\n Object.keys(this.deferredGridOptions).forEach((key) => {\n if (typeof this.deferredGridOptions[key] === 'function') {\n copy.deferredGridOptions[key] = this.deferredGridOptions[key].bind(copy);\n }\n else if (key === 'columnDefs' && this.deferredGridOptions[key].length) {\n copy.deferredGridOptions[key] = this.colDefsDeepClone(key, copy);\n }\n else {\n copy.deferredGridOptions[key] = structuredClone(this.deferredGridOptions[key]);\n }\n });\n }\n copy.deferredColumnStates = structuredClone(this.deferredColumnStates);\n copy.request = structuredClone(this.request);\n return copy;\n }\n colDefsDeepClone(key, copy) {\n return this.deferredGridOptions[key].map((columnDefinition) => {\n const definitionCopy = {};\n Object.keys(columnDefinition).forEach((fieldKey) => {\n if (typeof columnDefinition[fieldKey] === 'function') {\n definitionCopy[fieldKey] = columnDefinition[fieldKey].bind(copy);\n }\n else {\n definitionCopy[fieldKey] = structuredClone(columnDefinition[fieldKey]);\n }\n });\n return definitionCopy;\n });\n }\n // Genesis Specific\n /**\n * Initializes the datasource.\n * @public\n * @param columnDefinitions - Optionally set the `gridOptions` up with column definitions\n * @param columnStates - Optionally set the grid up with column state\n * @remarks This method is called automatically when the element is connected to the DOM.\n */\n init(keepColDefsOnClearRowData) {\n return __awaiter(this, void 0, void 0, function* () {\n this.$emit(datasourceEventNames.initialize, {\n keepColDefsOnClearRowData,\n options: Object.assign({ getRowId: (params) => params.data[this.rowId] }, this.deferredGridOptions),\n });\n // TODO: instead of listening to ready event, we should only render the datasource slot when the grid is ready\n this.addEventListener(datasourceEventNames.ready, (event) => __awaiter(this, void 0, void 0, function* () {\n const { pagination } = event.detail;\n this.pagination = pagination;\n yield this.loadResourceData();\n }), { once: true });\n const filterDebounceTime = 600;\n this.updateSub = this.update\n .pipe(skip(1), debounceTime(filterDebounceTime), tap((f) => logger.debug('filters (debounced): ', f)))\n .subscribe((_) => {\n this.reloadResourceData();\n });\n });\n }\n /**\n * Destroys the datasource, resetting it to its initial state.\n * @public\n */\n destroy() {\n var _a;\n logger.debug('GridProGenesisDatasource.destroy()', this.resourceName);\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n this.dataSub = undefined;\n }\n if (this.updateSub) {\n this.updateSub.unsubscribe();\n this.updateSub = undefined;\n }\n if (this.connectionSub) {\n this.connectionSub.unsubscribe();\n this.connectionSub = undefined;\n }\n this._sourceRef = undefined;\n this.clearRowData();\n this._lastMoreRows = false;\n this._isMoreRowsResult = false;\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n this.$emit(datasourceEventNames.destroy);\n this.requiresFullRowDataAndColDefs = true;\n this.dataSubWasLoggedOff = false;\n this.criteriaFromFilters = new Map();\n (_a = this.update) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.update = new BehaviorSubject(new Map());\n this.setDisconnected(false);\n // TODO: There may need to be a full destroy path. Datasources need some love!\n this.datasource.destroy();\n }\n /**\n * Deinitialises the datasource, resetting it to its initial state.\n * @deprecated Use `destroy` instead\n * @public\n */\n deinit() {\n logger.debug('GridProGenesisDatasource.deinit()', this.resourceName);\n this.destroy();\n }\n /**\n * Resets the datasource to its initial state.\n * @public\n * @deprecated Use `destroy` instead\n */\n reset() {\n logger.debug('GridProGenesisDatasource.reset()', this.resourceName);\n this.destroy();\n }\n /**\n * Restarts the datasource, uses `destroy` and `init` in sequence.\n * @public\n */\n restart() {\n return __awaiter(this, void 0, void 0, function* () {\n this.destroy();\n yield this.init(this.keepColDefsOnClearRowData);\n });\n }\n /**\n * Force the grid to redispatch the current rows\n */\n refreshRows() {\n this.updateCachedRowArray(); // Ensure the cache is up-to-date\n this.emitDataLoaded(this.cachedRowArray);\n }\n /**\n * Clears the rowData and columnDefs for the grid.\n * @remarks This is called when `reloadResourceData` happens, on criteria and filters change or full `reset`.\n * @param withColumnDefs - Whether to clear the columnDefs as well. Defaults to true.\n * @internal\n */\n clearRowData(withColumnDefs = true) {\n this.rowData = new Map();\n this.cachedRowArray = []; // Clear the cached array\n this.transactionData = { add: [], remove: [], update: [], addIndex: 0 };\n // Emit event to clear data\n this.$emit(datasourceEventNames.dataCleared, {\n includeSchema: withColumnDefs && !this.keepColDefsOnClearRowData,\n });\n }\n /**\n * Sets the columnDefs and rowData for the grid.\n * @remarks This should only happen once, when the grid is first initialized. Follow up updates will use transactions.\n * @internal\n */\n setRowData(rowData) {\n return __awaiter(this, void 0, void 0, function* () {\n const agColumnDefs = yield this.getAgColumnDefs(this.datasource.fieldMetadata);\n if (agColumnDefs) {\n this.$emit(datasourceEventNames.schemaUpdated, {\n schema: agColumnDefs,\n metadata: this.datasource.fieldMetadata,\n });\n }\n const data = this.rowDataMapper ? this.rowDataMapper(rowData) : rowData;\n this.$emit(datasourceEventNames.filtersRestored);\n // Use transactions for adding data\n this.transactionData = { add: data ? [...data] : [], remove: [], update: [], addIndex: 0 };\n this.emitDataChanged(this.transactionData);\n // Update the cached row array\n this.updateCachedRowArray();\n this.requiresFullRowDataAndColDefs = false;\n });\n }\n /**\n * Updates the cached row array from the rowData Map\n * @internal\n */\n updateCachedRowArray() {\n this.cachedRowArray = Array.from(this.rowData.values());\n }\n /**\n * Emits event to notify data has been loaded\n * @internal\n */\n emitDataLoaded(data, isInitialLoad = false) {\n this.$emit(datasourceEventNames.dataLoaded, {\n data,\n isInitialLoad,\n });\n }\n /**\n * Emits event to notify data has changed\n * @internal\n */\n emitDataChanged(transaction) {\n this.$emit(datasourceEventNames.dataChanged, {\n changes: transaction,\n });\n if (this.rowData.size === 0 &&\n !transaction.add.length &&\n !transaction.update.length &&\n !transaction.remove.length) {\n this.$emit(datasourceEventNames.noDataAvailable);\n }\n else {\n this.$emit(datasourceEventNames.loadingFinished);\n }\n }\n /**\n * Resets the grid data while keeping columnDefs and sends a DATA_LOGOFF message if it's a stream.\n * Loads resource data without full initialization (no metadata fetch).\n * @remarks This is used when the grid is already initialized and we want to reload the data due to a criteria/filter change.\n * @see loadResourceData\n * @public\n */\n reloadResourceData() {\n return __awaiter(this, void 0, void 0, function* () {\n logger.debug('GridProGenesisDatasource.reloadResourceData()', this.resourceName);\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n this.dataSub = undefined;\n }\n // Reset load more tracking on reload\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n this.datasource.updateLoadMoreCount(0);\n this.datasource.stream = undefined;\n this.clearRowData(withoutColumnDefs);\n this.$emit(datasourceEventNames.loadingStarted);\n this.setDisconnected(false);\n yield this.loadResourceData(withoutFullInit);\n });\n }\n /**\n * Initializes the datasource and loads the data for the grid.\n * Handles both snapshot and stream data (for both REQUEST_SERVER and DATASERVER resource types).\n *\n * @param withFullInit - if true, will call datasource.init() with requiresMetadataFetch = true, fetching fresh metadata\n * @see reloadResourceData\n * @internal\n */\n loadResourceData() {\n return __awaiter(this, arguments, void 0, function* (withFullInit = true) {\n const requiresMetadataFetch = withFullInit || !this.datasource.initialized;\n try {\n // Use the base datasource error handling\n const initOK = yield this.initializeDatasource(this.datasourceOptions(), requiresMetadataFetch, false);\n if (!initOK) {\n logger.debug(`Genesis Datasource init failed for ${this.resourceName}`);\n this.clearRowData();\n return;\n }\n this.$emit(gridProGenesisDatasourceEventNames.dataInit);\n if (this.isSnapshot) {\n const result = yield this.datasource.snapshot();\n if (result) {\n const rowData = this.handleSnapshot(result);\n this.setRowData(rowData);\n }\n return;\n }\n logger.debug(`starting stream for ${this.resourceName}`);\n yield this.datasource.startStream();\n this.dataSub = this.datasource.stream\n .pipe(catchError((err) => {\n var _a;\n // Use base error handling for stream errors\n this.handleErrors(((_a = err === null || err === void 0 ? void 0 : err.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || (err === null || err === void 0 ? void 0 : err.message) || err, 'stream');\n return EMPTY;\n }))\n .subscribe((result) => {\n this._sourceRef = result.SOURCE_REF;\n const hasMoreRowsInResult = 'MORE_ROWS' in result;\n const hasRowsCountInResult = 'ROWS_COUNT' in result;\n const hasNextOffsetInResult = this.datasource.resourceType === ResourceType.REQUEST_SERVER && 'NEXT_OFFSET' in result;\n this._isMoreRowsResult = hasMoreRowsInResult && !hasRowsCountInResult;\n // Store NEXT_OFFSET for RequestServer load more functionality\n if (hasNextOffsetInResult) {\n this._nextOffset = result.NEXT_OFFSET;\n }\n if (result === null || result === void 0 ? void 0 : result.ERROR) {\n this.handleErrors(result.ERROR, 'criteria');\n }\n const messageType = result.MESSAGE_TYPE;\n if (messageType && messageType === MessageType.LOGOFF_ACK) {\n this.handleErrors(`Genesis datasource for ${this.resourceName} disconnected.`, 'connection');\n this.dataSubWasLoggedOff = true;\n return;\n }\n this.dataSubWasLoggedOff = false;\n if (hasMoreRowsInResult) {\n this.updateLoadMoreStatus(result.MORE_ROWS, result.SOURCE_REF);\n }\n if (result.ROW) {\n const nextMessage = dataServerResultFilter(result);\n this.handleStreamResult(nextMessage);\n if (hasMoreRowsInResult && result.MORE_ROWS !== this._lastMoreRows) {\n const moreRowsDetail = {\n moreRows: result.MORE_ROWS,\n sourceRef: result.SOURCE_REF,\n };\n this.$emit(gridProGenesisDatasourceEventNames.moreRowsChanged, moreRowsDetail);\n this._lastMoreRows = result.MORE_ROWS;\n }\n }\n else {\n this.handleStreamResult(result);\n }\n });\n }\n catch (error) {\n let { message } = error;\n if (error.receivedMessage) {\n message = error.receivedMessage.ERROR;\n }\n logger.error(message);\n // Use base error handling for general errors\n this.handleErrors(message, 'unknown');\n }\n });\n }\n handleSnapshot(result) {\n if (Array.isArray(result))\n return result;\n if (result.REPLY) {\n return result.REPLY;\n }\n if (result.ROW) {\n return dataServerResultFilter(result).inserts;\n }\n return result.inserts;\n }\n handleStreamResult(result) {\n if (!result)\n return;\n if (this.isRequestServer) {\n this.applyRequestServerData(result);\n }\n else {\n this.applyDataserverData(result);\n }\n }\n /**\n * Updates the status bar based on more rows status\n * @param moreRows - Whether more rows are available\n * @param sourceRef - The source reference\n * @param rowsCount - The total number of rows\n * @remarks\n * This method emits an event for the grid to handle status bar updates.\n */\n updateLoadMoreStatus(moreRows, sourceRef) {\n this.$emit(datasourceEventNames.moreDataAvailable, {\n hasMoreData: moreRows,\n sourceRef,\n });\n }\n applyRequestServerData(requestServerResult) {\n var _a;\n const previousSize = this.rowData.size;\n const requestServerData = requestServerResult.REPLY;\n if (!Array.isArray(requestServerData) ||\n !((_a = requestServerResult.MESSAGE_TYPE) === null || _a === void 0 ? void 0 : _a.startsWith('REP_'))) {\n logger.error('received invalid RequestServerResult', requestServerResult);\n return;\n }\n if (this.requiresFullRowDataAndColDefs) {\n let noRowIdError = false;\n for (const insertData of requestServerData || []) {\n const insertDataRowId = insertData[this.rowId];\n if (!insertDataRowId) {\n if (!noRowIdError) {\n const noRowIdMessage = `The specified rowId (${this.rowId}) is not present in the data. Since this is not a snapshot (isSnapshot=false), the data will not be loaded. Please provide a valid 'row-id' attribute.`;\n logger.error(noRowIdMessage);\n noRowIdError = true;\n }\n break;\n }\n this.rowData.set(insertDataRowId, insertData);\n }\n if (noRowIdError) {\n this.destroy();\n return;\n }\n // Update cache and use it if available\n this.updateCachedRowArray();\n const rowData = this.rowData.size > 0 ? this.cachedRowArray : requestServerData;\n this.handleSizeChanged(previousSize, this.rowData.size);\n this.setRowData(rowData);\n return;\n }\n const rowsToUpdate = [];\n // Update cache before using it\n this.updateCachedRowArray();\n const rowsToDelete = this.cachedRowArray.filter((row) => {\n const match = requestServerData.find((data) => data[this.rowId] === row[this.rowId]);\n if (match) {\n rowsToUpdate.push(match);\n return false; // don't delete rows that need to be updated\n }\n return true; // delete rows that don't exist in requestServerData\n });\n const rowsToInsert = requestServerData.filter((data) => !this.rowData.has(data[this.rowId]));\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(rowsToInsert);\n this.handleStreamDeletes(rowsToDelete);\n this.handleStreamUpdates(rowsToUpdate);\n this.emitDataChanged(this.transactionData);\n this.handleSizeChanged(previousSize, this.rowData.size);\n }\n applyDataserverData(dataServerResult) {\n var _a;\n const previousSize = this.rowData.size;\n if (this.requiresFullRowDataAndColDefs) {\n (_a = dataServerResult.inserts) === null || _a === void 0 ? void 0 : _a.forEach((insertData) => {\n this.rowData.set(insertData[this.rowId], insertData);\n });\n // Update and use the cached array\n this.updateCachedRowArray();\n this.setRowData(this.cachedRowArray);\n this.handleSizeChanged(previousSize, this.rowData.size);\n return;\n }\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(dataServerResult.inserts);\n this.handleStreamDeletes(dataServerResult.deletes);\n this.handleStreamUpdates(dataServerResult.updates);\n this.emitDataChanged(this.transactionData);\n this.handleSizeChanged(previousSize, this.rowData.size);\n }\n // FUTURE: Work with the field types vs ag grid column def types!\n getAgColumnDefs(fieldsMetadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const columnDefsFromMetadata = this.generateColumnDefsFromMetadata(fieldsMetadata, getClientSideFilterParamsByFieldType, getFilterByFieldType);\n // Return the base column definitions - the grid will handle merging with template definitions\n return columnDefsFromMetadata;\n });\n }\n setFilter(fieldName, newFilter) {\n this.criteriaFromFilters.set(fieldName, newFilter);\n this.update.next(this.criteriaFromFilters);\n }\n removeFilter(fieldName) {\n this.criteriaFromFilters.delete(fieldName);\n this.update.next(this.criteriaFromFilters);\n }\n applyTransaction(transaction) {\n this.emitDataChanged(transaction);\n }\n handleSizeChanged(oldSize, newSize) {\n if (oldSize === newSize)\n return;\n this.$emit(gridProGenesisDatasourceEventNames.sizeChanged, {\n value: newSize,\n oldValue: oldSize,\n });\n }\n handleStreamInserts(inserts = []) {\n super.handleStreamInserts(inserts, this._isMoreRowsResult ? this.cachedRowArray.length : 0);\n this.updateCachedRowArray();\n }\n handleStreamUpdates(updates = []) {\n super.handleStreamUpdates(updates);\n this.updateCachedRowArray();\n }\n /**\n * Handles stream deletes by removing records from the grid.\n * @param deletes - List of records to remove from the grid stream\n */\n handleStreamDeletes(deletes = []) {\n super.handleStreamDeletes(deletes);\n this.updateCachedRowArray();\n }\n loadMore() {\n switch (this.datasource.resourceType) {\n case ResourceType.DATASERVER:\n let viewNumber;\n if (this.viewNumber) {\n this._loadMoreCount = +this.viewNumber + 1;\n viewNumber = this._loadMoreCount;\n }\n else {\n this._loadMoreCount += 1;\n }\n this.connect.getMoreRows(this._sourceRef, viewNumber);\n break;\n case ResourceType.REQUEST_SERVER:\n this._loadMoreCount += 1;\n // TODO: Will get back to this soon, want to improve loadMore for isSnapshot + extras\n // const requestParams = this.datasource.requestOnlyParams;\n // // Set OFFSET for the next request\n // if (requestParams.DETAILS) {\n // requestParams.DETAILS.OFFSET = this._nextOffset;\n // }\n // this.datasource.snapshot(requestParams).then((result) => {\n // this.applyRequestServerData(result as RequestServerResult);\n // });\n break;\n }\n this.datasource.updateLoadMoreCount(this._loadMoreCount);\n }\n};\n__decorate([\n attr({ mode: 'boolean', attribute: 'keep-col-defs-on-clear-row-data' })\n], GridProGenesisDatasource.prototype, \"keepColDefsOnClearRowData\", void 0);\nGridProGenesisDatasource = __decorate([\n customElement({\n name: 'grid-pro-genesis-datasource',\n })\n], GridProGenesisDatasource);\nexport { GridProGenesisDatasource };\n","import { formatDateTimestamp, formatDateTimeTimestamp } from '@genesislcap/foundation-utils';\n/**\n * Returns the filter params for enum fields based on the detected filter type.\n * @param field - The field metadata\n * @returns the filter params for enum fields, or undefined if not applicable\n */\nexport function getEnumFilterParams(field, filterType) {\n if (filterType === 'agMultiColumnFilter') {\n return {\n filters: [\n {\n filter: 'agTextColumnFilter',\n },\n {\n filter: 'agSetColumnFilter',\n filterParams: {\n values: field.enumOptions,\n },\n },\n ],\n };\n }\n if (filterType === 'agSetColumnFilter') {\n return {\n values: field.enumOptions,\n };\n }\n return undefined;\n}\n/**\n * Return a column type base on each field's metadata from the selected resource.\n * @param metadataType - The type of the field/column\n * @returns the column type\n * @remarks Currently only handles numeric columns\n * @alpha\n */\nexport function getColumnType(metadataType) {\n switch (metadataType === null || metadataType === void 0 ? void 0 : metadataType.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'numericColumn';\n }\n}\n/**\n * Returns a formatted date value from the Grid Pro cell value.\n * @param param - A ValueFormatterParams object.\n * @returns A formatted date value.\n * @public\n */\nexport function dateValueFormatter({ value }) {\n return formatDateTimestamp(value);\n}\n/**\n * Returns a formatted date time value from the Grid Pro cell value.\n * @param param - A ValueFormatterParams object.\n * @returns A formatted date time value.\n * @public\n */\nexport function dateTimeValueFormatter({ value }) {\n return formatDateTimeTimestamp(value);\n}\n// TODO: possible duplicate - need to evaluate the differences\nconst isoDateTimeSliceEnd = 19;\n/**\n * Returns a formatted date value from an epoch number.\n * @param epoch - A number representing the number of milliseconds since the Unix epoch (1 January 1970 00:00:00 UTC).\n * @returns A formatted date value.\n * @alpha\n * @deprecated No longer used in the Grid Pro package.\n */\nexport function formatDateExtra(epoch) {\n return new Date(epoch)\n .toISOString()\n .slice(0, isoDateTimeSliceEnd)\n .replace(/-/g, '')\n .replace('T', '-');\n}\n/**\n * The time between allowing the grids to automatically resize.\n * @internal\n */\nexport const DEBOUNCED_RESIZE_TIME = 5;\n/**\n * The event names for the Grid Pro component.\n * @public\n */\nexport const gridProEventNames = {\n datasourceErrorClose: 'datasource-error-close',\n};\n/**\n * The error names for the Grid Pro component.\n * @public\n */\nexport const gridProErrorNames = {\n datasource: 'datasource',\n unknown: 'unknown',\n};\n/**\n * @remarks List of AG properties without rowData\n * @privateRemarks This is was removed from ag-grid v35 but we need to support it for backwards compatibility.\n * @internal\n */\nexport const AG_PROPERTIES = [\n 'rowSelection',\n 'overlayLoadingTemplate',\n 'overlayNoRowsTemplate',\n 'quickFilterText',\n 'rowModelType',\n 'editType',\n 'domLayout',\n 'clipboardDelimiter',\n 'rowGroupPanelShow',\n 'multiSortKey',\n 'pivotColumnGroupTotals',\n 'pivotRowTotals',\n 'pivotPanelShow',\n 'fillHandleDirection',\n 'serverSideStoreType',\n 'groupDisplayType',\n 'treeDataDisplayType',\n 'colResizeDefault',\n 'components',\n 'frameworkComponents',\n 'rowStyle',\n 'context',\n 'autoGroupColumnDef',\n 'localeText',\n 'icons',\n 'datasource',\n 'serverSideDatasource',\n 'viewportDatasource',\n 'groupRowRendererParams',\n 'aggFuncs',\n 'fullWidthCellRendererParams',\n 'defaultColGroupDef',\n 'defaultColDef',\n 'defaultCsvExportParams',\n 'defaultExcelExportParams',\n 'columnTypes',\n 'rowClassRules',\n 'detailCellRendererParams',\n 'loadingCellRendererParams',\n 'loadingOverlayComponentParams',\n 'noRowsOverlayComponentParams',\n 'popupParent',\n 'statusBar',\n 'sideBar',\n 'chartThemeOverrides',\n 'customChartThemes',\n 'chartToolPanelsDef',\n 'sortingOrder',\n 'alignedGrids',\n 'columnDefs',\n 'excelStyles',\n 'pinnedTopRowData',\n 'pinnedBottomRowData',\n 'chartThemes',\n 'rowClass',\n 'rowHeight',\n 'detailRowHeight',\n 'rowBuffer',\n 'headerHeight',\n 'groupHeaderHeight',\n 'floatingFiltersHeight',\n 'pivotHeaderHeight',\n 'pivotGroupHeaderHeight',\n 'groupDefaultExpanded',\n 'viewportRowModelPageSize',\n 'viewportRowModelBufferSize',\n 'autoSizePadding',\n 'maxBlocksInCache',\n 'maxConcurrentDatasourceRequests',\n 'tooltipShowDelay',\n 'tooltipHideDelay',\n 'cacheOverflowSize',\n 'paginationPageSize',\n 'cacheBlockSize',\n 'infiniteInitialRowCount',\n 'serverSideInitialRowCount',\n 'scrollbarWidth',\n 'asyncTransactionWaitMillis',\n 'blockLoadDebounceMillis',\n 'keepDetailRowsCount',\n 'undoRedoCellEditingLimit',\n 'cellFlashDelay',\n 'cellFadeDelay',\n 'tabIndex',\n 'suppressMakeColumnVisibleAfterUnGroup',\n 'suppressRowClickSelection',\n 'suppressCellSelection',\n 'suppressCellFocus',\n 'suppressHorizontalScroll',\n 'alwaysShowHorizontalScroll',\n 'alwaysShowVerticalScroll',\n 'debug',\n 'enableBrowserTooltips',\n 'enableCellExpressions',\n 'groupSelectsChildren',\n 'groupIncludeFooter',\n 'groupIncludeTotalFooter',\n 'groupSuppressBlankHeader',\n 'suppressMenuHide',\n 'suppressRowDeselection',\n 'unSortIcon',\n 'suppressMultiSort',\n 'alwaysMultiSort',\n 'singleClickEdit',\n 'suppressLoadingOverlay',\n 'suppressNoRowsOverlay',\n 'suppressAutoSize',\n 'skipHeaderOnAutoSize',\n 'suppressParentsInRowNodes',\n 'suppressColumnMoveAnimation',\n 'suppressMovableColumns',\n 'suppressFieldDotNotation',\n 'enableRangeSelection',\n 'enableRangeHandle',\n 'enableFillHandle',\n 'suppressClearOnFillReduction',\n 'deltaSort',\n 'suppressTouch',\n 'suppressAsyncEvents',\n 'allowContextMenuWithControlKey',\n 'suppressContextMenu',\n 'rememberGroupStateWhenNewData',\n 'enableCellChangeFlash',\n 'suppressDragLeaveHidesColumns',\n 'suppressRowGroupHidesColumns',\n 'suppressMiddleClickScrolls',\n 'suppressPreventDefaultOnMouseWheel',\n 'suppressCopyRowsToClipboard',\n 'copyHeadersToClipboard',\n 'copyGroupHeadersToClipboard',\n 'pivotMode',\n 'suppressAggFuncInHeader',\n 'suppressColumnVirtualisation',\n 'suppressAggAtRootLevel',\n 'suppressFocusAfterRefresh',\n 'functionsPassive',\n 'functionsReadOnly',\n 'animateRows',\n 'groupSelectsFiltered',\n 'groupRemoveSingleChildren',\n 'groupRemoveLowestSingleChildren',\n 'enableRtl',\n 'suppressClickEdit',\n 'rowDragEntireRow',\n 'rowDragManaged',\n 'suppressRowDrag',\n 'suppressMoveWhenRowDragging',\n 'rowDragMultiRow',\n 'enableGroupEdit',\n 'embedFullWidthRows',\n 'suppressPaginationPanel',\n 'groupHideOpenParents',\n 'groupAllowUnbalanced',\n 'pagination',\n 'paginationAutoPageSize',\n 'suppressScrollOnNewData',\n 'suppressScrollWhenPopupsAreOpen',\n 'purgeClosedRowNodes',\n 'cacheQuickFilter',\n 'excludeHiddenColumnsFromQuickFilter',\n 'ensureDomOrder',\n 'accentedSort',\n 'suppressChangeDetection',\n 'valueCache',\n 'valueCacheNeverExpires',\n 'aggregateOnlyChangedColumns',\n 'suppressAnimationFrame',\n 'suppressExcelExport',\n 'suppressCsvExport',\n 'treeData',\n 'masterDetail',\n 'suppressMultiRangeSelection',\n 'enterMovesDownAfterEdit',\n 'enterMovesDown',\n 'suppressPropertyNamesCheck',\n 'rowMultiSelectWithClick',\n 'suppressRowHoverHighlight',\n 'suppressRowTransform',\n 'suppressClipboardPaste',\n 'suppressLastEmptyLineOnPaste',\n 'enableCharts',\n 'enableChartToolPanelsButton',\n 'suppressChartToolPanelsButton',\n 'suppressMaintainUnsortedOrder',\n 'enableCellTextSelection',\n 'suppressBrowserResizeObserver',\n 'suppressMaxRenderedRowRestriction',\n 'excludeChildrenWhenTreeDataFiltering',\n 'tooltipMouseTrack',\n 'keepDetailRows',\n 'paginateChildRows',\n 'preventDefaultOnContextMenu',\n 'undoRedoCellEditing',\n 'allowDragFromColumnsToolPanel',\n 'immutableData',\n 'pivotSuppressAutoColumn',\n 'suppressExpandablePivotGroups',\n 'debounceVerticalScrollbar',\n 'detailRowAutoHeight',\n 'serverSideFilteringAlwaysResets',\n 'serverSideSortingAlwaysResets',\n 'serverSideSortAllLevels',\n 'serverSideFilterAllLevels',\n 'serverSideSortOnServer',\n 'serverSideFilterOnServer',\n 'suppressAggFilteredOnly',\n 'showOpenedGroup',\n 'suppressClipboardApi',\n 'suppressModelUpdateAfterUpdateTransaction',\n 'stopEditingWhenCellsLoseFocus',\n 'maintainColumnOrder',\n 'groupMaintainOrder',\n 'columnHoverHighlight',\n 'reactUi',\n 'suppressReactUi',\n 'readOnlyEdit',\n 'suppressRowVirtualisation',\n 'enableCellEditingOnBackspace',\n 'resetRowDataOnUpdate',\n 'removePivotHeaderRowWhenSingleValueColumn',\n 'suppressCopySingleCellRanges',\n 'groupRowsSticky',\n 'suppressServerSideInfiniteScroll',\n 'rowGroupPanelSuppressSort',\n 'allowShowChangeAfterFilter',\n 'suppressCutToClipboard',\n 'localeTextFunc',\n 'doesExternalFilterPass',\n 'groupRowAggNodes',\n 'isFullWidthCell',\n 'processSecondaryColDef',\n 'processSecondaryColGroupDef',\n 'processPivotResultColDef',\n 'processPivotResultColGroupDef',\n 'getBusinessKeyForNode',\n 'isRowSelectable',\n 'postSort',\n 'defaultGroupOrderComparator',\n 'rowDragText',\n 'groupRowRenderer',\n 'groupRowRendererFramework',\n 'fullWidthCellRenderer',\n 'fullWidthCellRendererFramework',\n 'loadingCellRenderer',\n 'loadingCellRendererFramework',\n 'loadingOverlayComponent',\n 'loadingOverlayComponentFramework',\n 'noRowsOverlayComponent',\n 'noRowsOverlayComponentFramework',\n 'detailCellRenderer',\n 'detailCellRendererFramework',\n 'getLocaleText',\n 'isExternalFilterPresent',\n 'getRowHeight',\n 'getRowClass',\n 'getRowStyle',\n 'getContextMenuItems',\n 'getMainMenuItems',\n 'processRowPostCreate',\n 'processCellForClipboard',\n 'getGroupRowAgg',\n 'getRowNodeId',\n 'isFullWidthRow',\n 'sendToClipboard',\n 'navigateToNextHeader',\n 'tabToNextHeader',\n 'navigateToNextCell',\n 'tabToNextCell',\n 'processCellFromClipboard',\n 'getDocument',\n 'postProcessPopup',\n 'getChildCount',\n 'getDataPath',\n 'isRowMaster',\n 'postSortRows',\n 'processHeaderForClipboard',\n 'processGroupHeaderForClipboard',\n 'paginationNumberFormatter',\n 'processDataFromClipboard',\n 'getServerSideGroupKey',\n 'isServerSideGroup',\n 'createChartContainer',\n 'getChartToolbarItems',\n 'fillOperation',\n 'isApplyServerSideTransaction',\n 'getServerSideStoreParams',\n 'getServerSideGroupLevelParams',\n 'isServerSideGroupOpenByDefault',\n 'isGroupOpenByDefault',\n 'initialGroupOrderComparator',\n 'loadingCellRendererSelector',\n 'getRowId',\n 'groupAggFiltering',\n];\n/**\n * @remarks Copied from AG Grid `PropertyKeys.NUMBER_PROPERTIES` (v29.2.0) to support\n * attribute-to-gridOptions coercion without relying on `ComponentUtil.copyAttributesToGridOptions`.\n * @internal\n */\nexport const AG_NUMBER_PROPERTIES = [\n 'rowHeight',\n 'detailRowHeight',\n 'rowBuffer',\n 'headerHeight',\n 'groupHeaderHeight',\n 'floatingFiltersHeight',\n 'pivotHeaderHeight',\n 'pivotGroupHeaderHeight',\n 'groupDefaultExpanded',\n 'viewportRowModelPageSize',\n 'viewportRowModelBufferSize',\n 'autoSizePadding',\n 'maxBlocksInCache',\n 'maxConcurrentDatasourceRequests',\n 'tooltipShowDelay',\n 'tooltipHideDelay',\n 'cacheOverflowSize',\n 'paginationPageSize',\n 'cacheBlockSize',\n 'infiniteInitialRowCount',\n 'serverSideInitialRowCount',\n 'scrollbarWidth',\n 'asyncTransactionWaitMillis',\n 'blockLoadDebounceMillis',\n 'keepDetailRowsCount',\n 'undoRedoCellEditingLimit',\n 'cellFlashDelay',\n 'cellFadeDelay',\n 'tabIndex',\n];\n/**\n * @remarks Copied from AG Grid `PropertyKeys.BOOLEAN_PROPERTIES` (v29.2.0) to support\n * attribute-to-gridOptions coercion without relying on `ComponentUtil.copyAttributesToGridOptions`.\n * @internal\n */\nexport const AG_BOOLEAN_PROPERTIES = [\n 'suppressMakeColumnVisibleAfterUnGroup',\n 'suppressRowClickSelection',\n 'suppressCellSelection',\n 'suppressCellFocus',\n 'suppressHorizontalScroll',\n 'alwaysShowHorizontalScroll',\n 'alwaysShowVerticalScroll',\n 'debug',\n 'enableBrowserTooltips',\n 'enableCellExpressions',\n 'groupSelectsChildren',\n 'groupIncludeFooter',\n 'groupIncludeTotalFooter',\n 'groupSuppressBlankHeader',\n 'suppressMenuHide',\n 'suppressRowDeselection',\n 'unSortIcon',\n 'suppressMultiSort',\n 'alwaysMultiSort',\n 'singleClickEdit',\n 'suppressLoadingOverlay',\n 'suppressNoRowsOverlay',\n 'suppressAutoSize',\n 'skipHeaderOnAutoSize',\n 'suppressParentsInRowNodes',\n 'suppressColumnMoveAnimation',\n 'suppressMovableColumns',\n 'suppressFieldDotNotation',\n 'enableRangeSelection',\n 'enableRangeHandle',\n 'enableFillHandle',\n 'suppressClearOnFillReduction',\n 'deltaSort',\n 'suppressTouch',\n 'suppressAsyncEvents',\n 'allowContextMenuWithControlKey',\n 'suppressContextMenu',\n 'rememberGroupStateWhenNewData',\n 'enableCellChangeFlash',\n 'suppressDragLeaveHidesColumns',\n 'suppressRowGroupHidesColumns',\n 'suppressMiddleClickScrolls',\n 'suppressPreventDefaultOnMouseWheel',\n 'suppressCopyRowsToClipboard',\n 'copyHeadersToClipboard',\n 'copyGroupHeadersToClipboard',\n 'pivotMode',\n 'suppressAggFuncInHeader',\n 'suppressColumnVirtualisation',\n 'suppressAggAtRootLevel',\n 'suppressFocusAfterRefresh',\n 'functionsPassive',\n 'functionsReadOnly',\n 'animateRows',\n 'groupSelectsFiltered',\n 'groupRemoveSingleChildren',\n 'groupRemoveLowestSingleChildren',\n 'enableRtl',\n 'suppressClickEdit',\n 'rowDragEntireRow',\n 'rowDragManaged',\n 'suppressRowDrag',\n 'suppressMoveWhenRowDragging',\n 'rowDragMultiRow',\n 'enableGroupEdit',\n 'embedFullWidthRows',\n 'suppressPaginationPanel',\n 'groupHideOpenParents',\n 'groupAllowUnbalanced',\n 'pagination',\n 'paginationAutoPageSize',\n 'suppressScrollOnNewData',\n 'suppressScrollWhenPopupsAreOpen',\n 'purgeClosedRowNodes',\n 'cacheQuickFilter',\n 'excludeHiddenColumnsFromQuickFilter',\n 'ensureDomOrder',\n 'accentedSort',\n 'suppressChangeDetection',\n 'valueCache',\n 'valueCacheNeverExpires',\n 'aggregateOnlyChangedColumns',\n 'suppressAnimationFrame',\n 'suppressExcelExport',\n 'suppressCsvExport',\n 'treeData',\n 'masterDetail',\n 'suppressMultiRangeSelection',\n 'enterMovesDownAfterEdit',\n 'enterMovesDown',\n 'suppressPropertyNamesCheck',\n 'rowMultiSelectWithClick',\n 'suppressRowHoverHighlight',\n 'suppressRowTransform',\n 'suppressClipboardPaste',\n 'suppressLastEmptyLineOnPaste',\n 'enableCharts',\n 'enableChartToolPanelsButton',\n 'suppressChartToolPanelsButton',\n 'suppressMaintainUnsortedOrder',\n 'enableCellTextSelection',\n 'suppressBrowserResizeObserver',\n 'suppressMaxRenderedRowRestriction',\n 'excludeChildrenWhenTreeDataFiltering',\n 'tooltipMouseTrack',\n 'keepDetailRows',\n 'paginateChildRows',\n 'preventDefaultOnContextMenu',\n 'undoRedoCellEditing',\n 'allowDragFromColumnsToolPanel',\n 'immutableData',\n 'pivotSuppressAutoColumn',\n 'suppressExpandablePivotGroups',\n 'debounceVerticalScrollbar',\n 'detailRowAutoHeight',\n 'serverSideFilteringAlwaysResets',\n 'serverSideSortingAlwaysResets',\n 'serverSideSortAllLevels',\n 'serverSideFilterAllLevels',\n 'serverSideSortOnServer',\n 'serverSideFilterOnServer',\n 'suppressAggFilteredOnly',\n 'showOpenedGroup',\n 'suppressClipboardApi',\n 'suppressModelUpdateAfterUpdateTransaction',\n 'stopEditingWhenCellsLoseFocus',\n 'maintainColumnOrder',\n 'groupMaintainOrder',\n 'columnHoverHighlight',\n 'reactUi',\n 'suppressReactUi',\n 'readOnlyEdit',\n 'suppressRowVirtualisation',\n 'enableCellEditingOnBackspace',\n 'resetRowDataOnUpdate',\n 'removePivotHeaderRowWhenSingleValueColumn',\n 'suppressCopySingleCellRanges',\n 'groupRowsSticky',\n 'suppressServerSideInfiniteScroll',\n 'rowGroupPanelSuppressSort',\n 'allowShowChangeAfterFilter',\n 'suppressCutToClipboard',\n];\nconst AG_NUMBER_PROPERTIES_SET = new Set(AG_NUMBER_PROPERTIES);\nconst AG_BOOLEAN_PROPERTIES_SET = new Set(AG_BOOLEAN_PROPERTIES);\nconst AG_PROPERTIES_SET = new Set(AG_PROPERTIES);\nfunction toBoolean(value) {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n // for boolean, compare to empty String to allow attributes appearing with\n // no value to be treated as 'true'\n return value.toUpperCase() === 'TRUE' || value === '';\n }\n return false;\n}\nfunction toNumber(value) {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n}\n/**\n * @remarks Copied from AG Grid `ComponentUtil.copyAttributesToGridOptions` (v29.2.0).\n * This is used to coerce string/attribute values into the correct types for gridOptions.\n * @internal\n */\nexport function copyAttributesToGridOptions(gridOptions, component) {\n // create empty grid options if none were passed\n if (typeof gridOptions !== 'object') {\n gridOptions = {};\n }\n // to allow array style lookup in TypeScript, take type away from 'gridOptions'\n const pGridOptions = gridOptions;\n const keys = Object.keys(component);\n // Loop through component props, if they are not undefined and a valid gridOption copy to gridOptions\n keys.forEach((key) => {\n if (!AG_PROPERTIES_SET.has(key)) {\n return;\n }\n const value = component[key];\n if (typeof value === 'undefined') {\n return;\n }\n // Match ComponentUtil.getValue behaviour (limited to our local boolean/number sets + special-case)\n let coercedValue = value;\n if (AG_NUMBER_PROPERTIES_SET.has(key)) {\n coercedValue = toNumber(value);\n }\n else if (AG_BOOLEAN_PROPERTIES_SET.has(key)) {\n coercedValue = toBoolean(value);\n }\n else if (key === 'groupAggFiltering' && typeof value !== 'function') {\n coercedValue = toBoolean(value);\n }\n if (coercedValue !== undefined) {\n pGridOptions[key] = coercedValue;\n }\n });\n return gridOptions;\n}\n","import { __awaiter, __decorate, __rest } from \"tslib\";\nimport { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model';\nimport { ComponentUtil, Events, Grid, ModuleRegistry } from '@ag-grid-community/core';\nimport { CsvExportModule } from '@ag-grid-community/csv-export';\nimport { DatasourceDefaults } from '@genesislcap/foundation-comms';\nimport { avoidTreeShaking, insertDocumentCSSRule, LifecycleMixin, respondToVisibility, } from '@genesislcap/foundation-utils';\nimport { attr, DOM, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { classNames } from '@microsoft/fast-web-utilities';\nimport * as changeCase from 'change-case';\nimport debounce from 'lodash.debounce';\nimport { GridProCell } from './cell';\nimport { DateEditor, MultiselectEditor, NumberEditor, SelectEditor, StringEditor, } from './cell-editors';\nimport { ActionRenderer, ActionsMenuRenderer, BooleanRenderer, EditableRenderer, IconRenderer, SelectRenderer, StatusPillRenderer, } from './cell-renderers';\nimport { GridProColumn } from './column';\nimport { GridProClientSideDatasource, GridProServerSideDatasource } from './datasource';\nimport { baseDatasourceEventNames } from './datasource/base.types';\nimport { agThemeFontFaceMap, defaultAgGridFontFace } from './external';\nimport { GridProGenesisDatasource, gridProGenesisDatasourceEventNames, } from './grid-pro-genesis-datasource';\nimport { datasourceEventNames, } from './grid-pro-genesis-datasource/datasource-events.types';\nimport { AG_PROPERTIES, copyAttributesToGridOptions, DEBOUNCED_RESIZE_TIME, gridProErrorNames, gridProEventNames, } from './grid-pro.definitions';\nimport { foundationGridProStyles as styles } from './grid-pro.styles';\nimport { gridProTemplate as template } from './grid-pro.template';\nimport { AgGridTheme, agThemeFontsId, agThemeTokenMapClassname, DEFAULT_STATUS_BAR_CONFIG, EDITED_COLUMN_FIELD, ERROR_COLUMN_FIELD, GRID_READY_EVENT, GridOptionsConfig, GridProRendererTypes, GridProStatusBarTypes, } from './grid-pro.types';\nimport { StatePersistence } from './state-persistence';\nimport { LabelValueStatusBarComponent, LoadMoreStatusBarComponent, PaginationStatusBarComponent, ReloadStatusBarComponent, RowCountStatusBarComponent, } from './status-bar-components';\nimport { ErrorTooltip } from './tooltips';\nimport { convertColDefsToColumnStates, convertToKebabCase, logger, mergeAndDedupColDefWithColumnState, sanitizeColumnState, } from './utils';\navoidTreeShaking(GridProGenesisDatasource, GridProClientSideDatasource, GridProServerSideDatasource, GridProCell, GridProColumn);\nModuleRegistry.registerModules([CsvExportModule, ClientSideRowModelModule]);\nconst DEBOUNCE_TIME = 400;\n// Re-export AG_PROPERTIES from definitions for backwards compatibility\nexport { AG_PROPERTIES };\n/**\n * The Grid Pro element.\n * @remarks Grid Pro is a Web Component wrapper around the AG Grid Community library.\n * @public\n * @tagname %%prefix%%-grid-pro\n *\n * @fires gridReady - Fired when AG Grid is ready (detail includes the grid-ready event and grid id)\n * @fires onGridReady - Deprecated alias for the grid-ready signal; prefer `gridReady`\n * @fires gridready - Native `Event` from `globalEventListener` when AG Grid fires `gridReady` (`agGridDetails` holds the AG Grid event)\n * @remarks Re-emits AG Grid public API events when listeners are registered via `addEventListener` (event names match `ComponentUtil.PUBLIC_EVENTS` from `@ag-grid-community/core`). The same AG Grid events are also dispatched as native `Event`s with lowercased `type` and payload on `agGridDetails` (for example `addEventListener('columnresized', ...)`).\n */\nexport class GridPro extends LifecycleMixin(FoundationElement) {\n rowDataChanged(_, rowData) {\n if (this.initialised) {\n this.gridApi.setRowData(rowData);\n }\n }\n themeChanged(oldValue, newValue) {\n if (!newValue) {\n this.classNames = '';\n this.destroyFontFace();\n return;\n }\n this.classNames = classNames(agThemeTokenMapClassname(newValue), newValue);\n this.insertFontFace(newValue);\n }\n getfilterModel() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistFilterModelKey) {\n return this._filterConfig;\n }\n const filterModel = yield this.statePersistence.getFilterModel(this.persistFilterModelKey);\n return filterModel;\n });\n }\n setFilterModel(value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistFilterModelKey) {\n this._filterConfig = value;\n return;\n }\n yield this.statePersistence.saveFilterModel(this.persistFilterModelKey, value);\n });\n }\n constructor() {\n super();\n // Cache for total column width to avoid repeated calculations\n this.cachedTotalColumnWidth = null;\n this.columnCount = 0;\n this.gridErrorItems = [];\n this.disposed = false;\n this.debouncedSaveColumnState = debounce(this.saveColumnState.bind(this), DEBOUNCE_TIME);\n this.debouncedSaveFilterModel = debounce(this.cacheFilterConfig.bind(this), DEBOUNCE_TIME);\n // Genesis-specific attrs\n this.autoCellRendererByType = false;\n this.onlyTemplateColDefs = false;\n // AG-specific attrs\n /**\n * Boolean attribute to control whether the grid autosizes the columns upon interaction.\n * This will disable the column widths from being manually set, and doesn't save the widths\n * in local storage if you are using `persist-column-state-key`.\n */\n this.gridAutosizingEnabled = false;\n /**\n * Boolean attribute to control whether the grid automatically sizes columns to fit their content.\n * This will call AG Grid's autoSizeColumns() method to automatically adjust column widths based on content.\n * @public\n */\n this.sizeColumnsToContent = false;\n /**\n * Boolean attribute to adjust the size of columns to fit the available horizontal space.\n * This will call AG Grid's sizeColumnsToFit() method.\n * @public\n */\n this.sizeColumnsToFit = false;\n /**\n * The index to add new rows to when using `applyTransaction` or `applyTransactionAsync`\n */\n this.addIndex = 0;\n /**\n * Whether to use the `applyTransactionAsync` function for *add* transactions\n * @remarks Defaults to false\n */\n this.asyncAdd = false;\n /**\n * Whether to use the `applyTransactionAsync` function for *remove* transactions\n * @remarks Defaults to false\n */\n this.asyncRemove = false;\n /**\n * Whether to use the `applyTransactionAsync` function for *update* transactions\n * @remarks Defaults to true\n */\n this.asyncUpdate = true;\n /**\n * If false, will disable cell flashing for all cells by default, unless otherwise defined in custom colDef\n * @remarks Defaults to true\n */\n this.enableCellFlashing = false;\n /**\n * @deprecated - use `enableRowFlashing` instead.\n */\n this.enabledRowFlashing = false;\n /**\n * If true, will enable row flashing for all rows for `add` async transactions\n */\n this.enableRowFlashing = false;\n /**\n * The default column config to reset to when deleteColumnState is called.\n */\n this.defaultColumnConfig = [];\n this.gridFontFace = defaultAgGridFontFace;\n this.columnComponentName = 'grid-pro-column';\n this.theme = AgGridTheme.alpine;\n this.themeMode = 'dark';\n /**\n * Enable pagination for the grid.\n * @remarks\n * When enabled, the grid will automatically configure pagination settings.\n * Note that AG Grid's full pagination functionality requires the Enterprise module.\n * While basic pagination will work in Community edition, advanced features like\n * custom pagination components require Enterprise.\n * @see https://www.ag-grid.com/javascript-data-grid/row-pagination/\n * @see https://www.ag-grid.com/javascript-data-grid/server-side-model-pagination/\n */\n this.pagination = false;\n /**\n * Configuration for the grid status bar components.\n * @remarks\n * This requires AG Grid Enterprise module to be enabled.\n * The status bar will only be displayed if the Enterprise module is available.\n * @see https://www.ag-grid.com/javascript-data-grid/component-status-bar/\n */\n this.statusBarConfig = DEFAULT_STATUS_BAR_CONFIG;\n /**\n * Enables or disables the grid status bar.\n * @remarks\n * Default is false.\n * When disabled, no status bar will be displayed regardless of statusBarConfig.\n * This requires AG Grid Enterprise module to be available for the status bar to be displayed when enabled.\n */\n this.withStatusBar = false;\n this.rehydrationAttempted = false;\n this.eventHandlers = [];\n this.gridEventsQueue = [];\n this.registeredGridEvents = new Set();\n this.gridEventListeners = new Map();\n this.boundGlobalEventListener = this.globalEventListener.bind(this);\n this._filterConfig = undefined;\n this.agAttributes = {};\n this.agPropertiesMap = AG_PROPERTIES.reduce((map, property) => {\n map[property.toLowerCase()] = property;\n map[convertToKebabCase(property)] = property;\n return map;\n }, {});\n const hideDataSourceError = this.hideDatasourceError.bind(this);\n // Bind all event handlers once to ensure proper add/remove of listeners\n this.eventHandlers.push(\n // Root event listeners\n [gridProGenesisDatasourceEventNames.dataInit, hideDataSourceError], [gridProEventNames.datasourceErrorClose, hideDataSourceError], [baseDatasourceEventNames.error, this.handleBaseDatasourceError.bind(this)], [baseDatasourceEventNames.connected, hideDataSourceError], \n // Datasource event listeners\n [datasourceEventNames.initialize, this.handleInitialize.bind(this)], [datasourceEventNames.dataLoaded, this.handleDataLoaded.bind(this)], [datasourceEventNames.dataChanged, this.handleDataChanged.bind(this)], [datasourceEventNames.schemaUpdated, this.handleSchemaUpdated.bind(this)], [datasourceEventNames.dataCleared, this.handleDataCleared.bind(this)], [datasourceEventNames.loadingStarted, this.handleLoadingStarted.bind(this)], [datasourceEventNames.loadingFinished, this.handleLoadingFinished.bind(this)], [datasourceEventNames.noDataAvailable, this.handleNoDataAvailable.bind(this)], [datasourceEventNames.filtersRestored, this.handleFiltersRestored.bind(this)], [datasourceEventNames.moreDataAvailable, this.handleMoreDataAvailable.bind(this)], [datasourceEventNames.error, this.handleDatasourceError.bind(this)], [datasourceEventNames.destroy, this.handleDatasourceDestroy.bind(this)], \n // Server-side specific events\n [datasourceEventNames.cacheFilterConfig, this.cacheFilterConfig.bind(this)], [datasourceEventNames.refreshServerSide, this.handleRefreshServerSide.bind(this)], [datasourceEventNames.setServerSideDatasource, this.handleSetServerSideDatasource.bind(this)], [datasourceEventNames.addGridCssClass, this.handleAddGridCssClass.bind(this)], [datasourceEventNames.removeGridCssClass, this.handleRemoveGridCssClass.bind(this)], [\n datasourceEventNames.applyServerSideTransaction,\n this.handleApplyServerSideTransaction.bind(this),\n ]);\n }\n /**\n * Adds an event listener to the grid element.\n * @param eventType - The event type to listen for. Recommened to use the `Events` from AG Grid.\n * @param listener - The event listener to call when the event is fired.\n * @param options - An options object that specifies characteristics about the event listener.\n * @privateRemarks\n * This will change once we do the AG Upgrade and `eventType` will be correctly typed.\n */\n addEventListener(eventType, listener, options) {\n super.addEventListener(eventType, listener, options);\n if (ComponentUtil.PUBLIC_EVENTS.includes(eventType)) {\n if (this.gridApi) {\n this.addGridEventListener(eventType);\n }\n else {\n if (!this.gridEventsQueue.includes(eventType)) {\n this.gridEventsQueue.push(eventType);\n }\n }\n }\n }\n addGridEventListener(eventType) {\n if (this.registeredGridEvents.has(eventType)) {\n return;\n }\n this.registeredGridEvents.add(eventType);\n const listener = (e) => {\n this.$emit(eventType, e);\n };\n this.gridEventListeners.set(eventType, listener);\n this.gridApi.addEventListener(eventType, listener);\n }\n handleError(type, event) {\n this.gridErrorItems = [...this.gridErrorItems, { detail: event.detail, type }];\n }\n handleBaseDatasourceError(event) {\n // Map base datasource errors to grid-pro error format\n const gridProError = {\n detail: { message: event.detail.message },\n type: gridProErrorNames.datasource,\n };\n this.gridErrorItems = [\n ...this.gridErrorItems,\n { detail: gridProError.detail, type: gridProError.type },\n ];\n }\n hideDatasourceError() {\n this.gridErrorItems = this.gridErrorItems.filter((item) => item.type !== gridProErrorNames.datasource);\n this.removeAttribute('ds-disconnected');\n }\n connectedCallback() {\n super.connectedCallback();\n this.disposed = false;\n if (this.gridAutosizingEnabled) {\n this.visibilityObserverCleanup = respondToVisibility(this, (gridVisible) => {\n if (gridVisible) {\n this.debouncedColumnAutosize();\n }\n });\n }\n this.rehydrationAttempted = false;\n this.eventHandlers.forEach(([eventName, handler]) => {\n this.addEventListener(eventName, handler);\n });\n if (!this.shouldRunConnect)\n return;\n AG_PROPERTIES.forEach((key) => {\n Object.defineProperty(this, key, {\n set: (v) => {\n this.agAttributeChangedCallback(convertToKebabCase(key), undefined, v);\n },\n enumerable: true,\n configurable: true,\n });\n });\n this.paginationPageSize = this.isServerSide\n ? this.gridProDatasource.maxRows\n : DatasourceDefaults.DEFAULT_PAGINATION_PAGE_SIZE;\n }\n disconnectedCallback() {\n this.disposed = true;\n this.debouncedSaveColumnState.cancel();\n this.debouncedSaveFilterModel.cancel();\n if (this.visibilityObserverCleanup) {\n this.visibilityObserverCleanup();\n this.visibilityObserverCleanup = undefined;\n }\n super.disconnectedCallback();\n this.rehydrationAttempted = false;\n const shouldRunDisconnect = this.shouldRunDisconnect;\n this.eventHandlers.forEach(([eventName, handler]) => {\n this.removeEventListener(eventName, handler);\n });\n if (!shouldRunDisconnect) {\n // If lifecycle is temporarily blocked (e.g. layout drag/reconnect path),\n // still tear down once the element remains detached on the next tick.\n queueMicrotask(() => {\n if (!this.isConnected) {\n this.performDisconnectCleanup();\n }\n });\n return;\n }\n this.performDisconnectCleanup();\n }\n performDisconnectCleanup() {\n if (this.debounced) {\n clearTimeout(this.debounced);\n this.debounced = null;\n }\n this.initialised = false;\n this.clearLocalGridOptions();\n this.destroyGridInstance();\n // Destroy can synchronously emit final grid events; cancel again to avoid\n // retaining this element through trailing debounce timers.\n this.debouncedSaveColumnState.cancel();\n this.debouncedSaveFilterModel.cancel();\n this.invalidateColumnWidthCache();\n // Clear registered events when grid is destroyed\n this.registeredGridEvents.clear();\n this.gridEventsQueue = [];\n }\n /**\n * Tear down the AG Grid instance. Prefer {@link GridApi#destroy}; if `gridApi` is not set yet\n * (e.g. disconnect before `grid-ready`), fall back to {@link Grid#destroy} on the vanilla wrapper.\n */\n destroyGridInstance() {\n if (this.gridApi) {\n this.gridEventListeners.forEach((listener, eventType) => {\n this.gridApi.removeEventListener(eventType, listener);\n });\n }\n this.gridEventListeners.clear();\n if (this.gridApi) {\n this.gridApi.destroy();\n }\n else if (this.agGrid) {\n this.agGrid.destroy();\n }\n if (this.gridSlot) {\n this.gridSlot.replaceChildren();\n }\n this.gridApi = undefined;\n this.columnApi = undefined;\n this.agGrid = undefined;\n }\n /**\n * Handles datasource initialization\n * @internal\n */\n handleInitialize(event) {\n const { options, keepColDefsOnClearRowData } = event.detail;\n let columnDefinitions;\n if (keepColDefsOnClearRowData) {\n columnDefinitions = this.gridApi.getColumnDefs();\n this.columnState = this.columnApi.getColumnState();\n }\n const gridOptions = Object.assign(Object.assign(Object.assign({}, this.agGridOptions), (columnDefinitions && { columnDefs: columnDefinitions })), options);\n this.gridOptions = Object.assign({}, gridOptions);\n this.initGrid();\n }\n /**\n * Handles data loading from datasource\n * @internal\n */\n handleDataLoaded(event) {\n const { data } = event.detail;\n if (this.gridApi) {\n this.gridApi.setRowData(data);\n }\n }\n /**\n * Handles data changes from datasource\n * @internal\n */\n handleDataChanged(event) {\n var _a, _b, _c;\n const { changes } = event.detail;\n if (!this.gridApi)\n return;\n if (((_a = changes.add) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n if (this.asyncAdd) {\n this.gridApi.applyTransactionAsync({ add: changes.add, addIndex: this.addIndex }, (result) => {\n this.flashAddedCells(result === null || result === void 0 ? void 0 : result.add);\n });\n }\n else {\n const result = this.gridApi.applyTransaction({ add: changes.add, addIndex: this.addIndex });\n this.flashAddedCells(result === null || result === void 0 ? void 0 : result.add);\n }\n }\n if (((_b = changes.update) === null || _b === void 0 ? void 0 : _b.length) > 0) {\n if (this.asyncUpdate) {\n this.gridApi.applyTransactionAsync({ update: changes.update });\n }\n else {\n this.gridApi.applyTransaction({ update: changes.update });\n }\n }\n if (((_c = changes.remove) === null || _c === void 0 ? void 0 : _c.length) > 0) {\n if (this.asyncRemove) {\n this.gridApi.applyTransactionAsync({ remove: changes.remove });\n }\n else {\n this.gridApi.applyTransaction({ remove: changes.remove });\n }\n }\n }\n flashAddedCells(rowNodes) {\n if (this.enableRowFlashing && (rowNodes === null || rowNodes === void 0 ? void 0 : rowNodes.length)) {\n this.gridApi.flashCells({ rowNodes });\n }\n }\n /**\n * Handles schema updates from datasource\n * @internal\n */\n handleSchemaUpdated(event) {\n return __awaiter(this, void 0, void 0, function* () {\n const { schema, metadata } = event.detail;\n const preSetColumnDefs = this.gridApi.getColumnDefs();\n if (!preSetColumnDefs || preSetColumnDefs.length === 0) {\n const colDefs = metadata\n .map((field) => {\n var _a;\n return (Object.assign(Object.assign({}, schema.find((colDef) => colDef.field === field.name)), (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getColumnDef(field.name)));\n })\n .map((colDef) => (Object.assign(Object.assign({}, colDef), { cellRenderer: this.autoCellRendererByType ? colDef.cellRenderer : undefined, cellEditor: this.autoCellRendererByType ? colDef.cellEditor : undefined })));\n const colDefsMergedWithTemplateDefs = yield this.mergeAllColumnDefsAndStates(colDefs, true);\n if (colDefsMergedWithTemplateDefs) {\n // AG's internals will check if group/pivot are NOT NULL to trigger module registration warning for `row-grouping`.\n // When using gridApi to get the currentState to save, all boolean will return false when they were not set at all.\n // ColDef type is `boolean` while ColumnState is `boolean | null`.\n colDefsMergedWithTemplateDefs.forEach((col) => {\n if (!col.rowGroup) {\n col.rowGroup = null;\n }\n if (!col.pivot) {\n col.pivot = null;\n }\n });\n this.gridApi.setColumnDefs(colDefsMergedWithTemplateDefs);\n }\n }\n });\n }\n /**\n * Handles data clearing from datasource\n * @internal\n */\n handleDataCleared(event) {\n var _a, _b;\n const { includeSchema } = event.detail;\n if (!this.gridApi)\n return;\n // For server-side, these methods are handled via server-side transactions\n // Only flush async transactions for client-side row model\n if (!this.isServerSide) {\n // Flush any pending async transactions\n if (this.asyncAdd || this.asyncUpdate || this.asyncRemove) {\n (_b = (_a = this.gridApi).flushAsyncTransactions) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n }\n if (includeSchema) {\n this.gridApi.setColumnDefs([]);\n }\n // setRowData only works for client-side row model\n // For server-side, data clearing is handled via server-side transactions\n if (!this.isServerSide) {\n this.gridApi.setRowData([]);\n this.gridApi.refreshCells({ force: true });\n }\n }\n /**\n * Handles loading started from datasource\n * @internal\n */\n handleLoadingStarted() {\n if (this.gridApi) {\n this.gridApi.showLoadingOverlay();\n }\n }\n /**\n * Handles loading finished from datasource\n * @internal\n */\n handleLoadingFinished() {\n if (this.gridApi) {\n this.gridApi.hideOverlay();\n }\n }\n /**\n * Handles no data available from datasource\n * @internal\n */\n handleNoDataAvailable() {\n if (this.gridApi) {\n this.gridApi.showNoRowsOverlay();\n }\n }\n /**\n * Handles filter restoration from datasource\n * @internal\n */\n handleFiltersRestored() {\n this.restoreCachedFilterConfig();\n }\n /**\n * Handles more data availability from datasource\n * @internal\n */\n handleMoreDataAvailable(event) {\n var _a, _b, _c, _d;\n const { hasMoreData, sourceRef } = event.detail;\n if (!this.gridApi)\n return;\n const statusBar = (_b = (_a = this.gridApi).getStatusPanel) === null || _b === void 0 ? void 0 : _b.call(_a, GridProStatusBarTypes.loadMore);\n if (statusBar) {\n (_d = (_c = statusBar).updateParams) === null || _d === void 0 ? void 0 : _d.call(_c, {\n moreRows: hasMoreData,\n sourceRef,\n });\n }\n }\n /**\n * Handles datasource errors\n * @internal\n */\n handleDatasourceError(event) {\n // Set visual indicator on grid\n this.setAttribute('ds-disconnected', 'ds-disconnected');\n }\n /**\n * Handles datasource destroy\n * @internal\n */\n handleDatasourceDestroy() {\n this.clearLocalGridOptions();\n }\n /**\n * Handles refreshing server-side data\n * @internal\n */\n handleRefreshServerSide(event) {\n const { purge } = event.detail;\n if (this.gridApi) {\n this.gridApi.refreshServerSide({ purge });\n }\n }\n /**\n * Handles setting server-side datasource\n * @internal\n */\n handleSetServerSideDatasource(event) {\n const { datasource } = event.detail;\n if (this.gridApi) {\n this.gridApi.setServerSideDatasource(datasource);\n }\n }\n /**\n * Handles adding CSS class to grid element\n * @internal\n */\n handleAddGridCssClass(event) {\n var _a;\n const { className } = event.detail;\n // Add CSS class to grid element\n const gridElement = ((_a = this.gridSlot) === null || _a === void 0 ? void 0 : _a.parentElement) || this;\n if (gridElement) {\n gridElement.classList.add(className);\n }\n }\n /**\n * Handles removing CSS class from grid element\n * @internal\n */\n handleRemoveGridCssClass(event) {\n var _a;\n const { className } = event.detail;\n // Remove CSS class from grid element\n const gridElement = ((_a = this.gridSlot) === null || _a === void 0 ? void 0 : _a.parentElement) || this;\n if (gridElement) {\n gridElement.classList.remove(className);\n }\n }\n /**\n * Handles applying server-side transactions\n * @internal\n */\n handleApplyServerSideTransaction(event) {\n const { transaction, async, callback } = event.detail;\n if (!this.gridApi)\n return;\n if (async) {\n this.gridApi.applyServerSideTransactionAsync(transaction, callback);\n }\n else {\n const result = this.gridApi.applyServerSideTransaction(transaction);\n if (callback) {\n callback(result);\n }\n }\n }\n combineAllGridComponents(gridOptionsComponents) {\n const defaultFoundationAgComponents = {\n [GridProRendererTypes.action]: ActionRenderer,\n [GridProRendererTypes.actionsMenu]: ActionsMenuRenderer,\n [GridProRendererTypes.boolean]: BooleanRenderer,\n [GridProRendererTypes.editable]: EditableRenderer,\n [GridProRendererTypes.icon]: IconRenderer,\n [GridProRendererTypes.statusPill]: StatusPillRenderer,\n [GridProRendererTypes.select]: SelectRenderer,\n [GridProRendererTypes.selectEditor]: SelectEditor,\n [GridProRendererTypes.numberEditor]: NumberEditor,\n [GridProRendererTypes.multiselectEditor]: MultiselectEditor,\n [GridProRendererTypes.dateEditor]: DateEditor,\n [GridProRendererTypes.stringEditor]: StringEditor,\n [GridProStatusBarTypes.labelValue]: LabelValueStatusBarComponent,\n [GridProStatusBarTypes.loadMore]: LoadMoreStatusBarComponent,\n [GridProStatusBarTypes.pagination]: PaginationStatusBarComponent,\n [GridProStatusBarTypes.reload]: ReloadStatusBarComponent,\n [GridProStatusBarTypes.rowCount]: RowCountStatusBarComponent,\n };\n return Object.assign(Object.assign(Object.assign({}, defaultFoundationAgComponents), gridOptionsComponents), this.gridComponents);\n }\n statePersistanceEnabled() {\n if (!this.persistColumnStateKey || this.persistColumnStateKey.length === 0) {\n return false;\n }\n return true;\n }\n /**\n * Gets the currently selected rows from the grid\n * @public\n * @returns Array of selected row data\n */\n getSelectedRows() {\n var _a, _b, _c, _d;\n try {\n if (!this.initialised || !this.gridApi) {\n return [];\n }\n const rowSelectionMode = (_a = this.gridOptions) === null || _a === void 0 ? void 0 : _a.rowSelection;\n // If row selection is enabled (single or multiple), use row selection only\n if (rowSelectionMode === 'single' || rowSelectionMode === 'multiple') {\n if (this.gridApi.getSelectedRows && this.gridApi.getSelectedRows().length > 0) {\n return this.gridApi.getSelectedRows();\n }\n return [];\n }\n // If row selection is disabled (undefined/none), use cell range selection\n if (((_b = this.gridApi) === null || _b === void 0 ? void 0 : _b.getCellRanges) && this.gridApi.getCellRanges().length > 0) {\n return this.getCellRangeRowData();\n }\n // Fallback: if no cell ranges but range selection is disabled,\n // check for focused cell (single cell selection)\n if (!((_c = this.gridOptions) === null || _c === void 0 ? void 0 : _c.enableRangeSelection)) {\n const focusedCell = (_d = this.gridApi) === null || _d === void 0 ? void 0 : _d.getFocusedCell();\n if (focusedCell) {\n const rowNode = this.gridApi.getDisplayedRowAtIndex(focusedCell.rowIndex);\n if (rowNode === null || rowNode === void 0 ? void 0 : rowNode.data) {\n return [rowNode.data];\n }\n }\n }\n return [];\n }\n catch (error) {\n logger.error('Grid Pro: Error getting selected rows:', error);\n return [];\n }\n }\n /**\n * Gets the row data from selected cell ranges\n * @internal\n * @returns Array containing the row data from selected cell ranges, or empty array if none\n */\n getCellRangeRowData() {\n var _a;\n if (!((_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getCellRanges)) {\n return [];\n }\n const cellRanges = this.gridApi.getCellRanges();\n if (cellRanges.length === 0) {\n return [];\n }\n const rowData = [];\n // Collect unique row data from all selected cell ranges\n cellRanges.forEach((range) => {\n const startIndex = range.startRow.rowIndex;\n const endIndex = range.endRow.rowIndex;\n // Iterate over indices directly for better performance\n for (let rowIndex = startIndex; rowIndex <= endIndex; rowIndex += 1) {\n const rowNode = this.gridApi.getDisplayedRowAtIndex(rowIndex);\n if ((rowNode === null || rowNode === void 0 ? void 0 : rowNode.data) && !rowData.some((existing) => existing === rowNode.data)) {\n rowData.push(rowNode.data);\n }\n }\n });\n return rowData;\n }\n /**\n * Checks if any rows are currently selected\n * @public\n * @returns True if rows are selected, false otherwise\n */\n hasSelectedRows() {\n const selectedRows = this.getSelectedRows();\n return selectedRows.length > 0;\n }\n /**\n * Updates the label-value status bar component with new label and value\n * @public\n * @param params - Object containing label, value, and optionally hide flag\n * @example\n * ```ts\n * gridPro.updateLabelValueStatusBar({\n * label: 'Total Records',\n * value: '1,234',\n * hide: false\n * });\n * ```\n */\n updateLabelValueStatusBar(params) {\n var _a, _b;\n if (!this.gridApi) {\n logger.warn('Grid Pro: Cannot update label-value status bar - grid API not available');\n return;\n }\n const statusBar = (_b = (_a = this.gridApi).getStatusPanel) === null || _b === void 0 ? void 0 : _b.call(_a, GridProStatusBarTypes.labelValue);\n if (statusBar && typeof statusBar.updateParams === 'function') {\n statusBar.updateParams(params);\n }\n else {\n logger.warn('Grid Pro: Label-value status bar component not found or updateParams method not available');\n }\n }\n /**\n * Because we try and resize the grid to fit using callbacks on events, this will cause\n * a stack overflow of calls to resize, so we need to debounce it.\n * @internal\n */\n debouncedColumnAutosize() {\n if (!this.gridAutosizingEnabled)\n return;\n if (this.debounced) {\n clearTimeout(this.debounced);\n this.debounced = null;\n }\n this.debounced = setTimeout(() => {\n var _a;\n (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.sizeColumnsToFit();\n }, DEBOUNCED_RESIZE_TIME);\n }\n /**\n * If {@link @genesislcap/grid-pro#GridPro.gridAutosizingEnabled} is true, will remove the widths from the column states.\n * @internal\n */\n removeConfigWidthsToAutosize(colState) {\n return colState.map((col) => (Object.assign(Object.assign({}, col), { width: null })));\n }\n saveColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.rehydrationAttempted && this.statePersistanceEnabled()) {\n let colState = this.columnApi.getColumnState();\n colState = sanitizeColumnState(colState);\n colState = this.gridAutosizingEnabled\n ? this.removeConfigWidthsToAutosize(colState)\n : colState;\n const allHeadersHidden = colState.filter((c) => {\n if (c.hide)\n return false;\n const col = this.columnApi.getColumn(c.colId);\n return Boolean(col.getColDef().headerName);\n }).length === 0;\n if (colState.length === 0 ||\n JSON.stringify(colState) === JSON.stringify(this.columnState) ||\n allHeadersHidden)\n return;\n yield this.statePersistence.saveColumnState(this.persistColumnStateKey, colState);\n this.columnState = colState;\n }\n });\n }\n /**\n * Gets the saved grid ColumnState[] from storage\n * @remarks This is used to restore the grid state when the grid is rehydrated\n * @privateRemarks Not using `columnApi.get|setColumnState()` for these flows as it doesn't work setting new columnDefs vs different ordering.\n * @public\n */\n getSavedColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n this.columnState = [];\n if (this.statePersistanceEnabled()) {\n this.columnState = yield this.statePersistence.getColumnState(this.persistColumnStateKey);\n }\n return this.columnState;\n });\n }\n /**\n * Deletes the saved column state for the current grid\n * @param resetToDefault - Whether to reset columns to their default configuration. Defaults to true.\n * @remarks This removes the persisted column state from storage, allowing the grid to use default column configuration\n * @public\n */\n deleteColumnState() {\n return __awaiter(this, arguments, void 0, function* (resetToDefault = true) {\n var _a;\n if (this.statePersistanceEnabled()) {\n yield this.statePersistence.deleteColumnState(this.persistColumnStateKey);\n this.columnState = [];\n }\n if (resetToDefault && this.columnApi) {\n if (((_a = this.defaultColumnConfig) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n // Convert ColDef[] to ColumnState[] using utility function\n const columnState = convertColDefsToColumnStates(this.defaultColumnConfig);\n this.columnApi.applyColumnState({\n state: columnState,\n applyOrder: true,\n });\n }\n else {\n this.columnApi.resetColumnState();\n }\n this.handleColumnSizing();\n }\n });\n }\n restoreColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.rehydrationAttempted = true;\n const colState = yield this.getSavedColumnState();\n const sanitizedColState = sanitizeColumnState(colState);\n if (sanitizedColState && sanitizedColState.length > 0) {\n (_a = this.columnApi) === null || _a === void 0 ? void 0 : _a.applyColumnState({\n state: sanitizedColState,\n applyOrder: true,\n });\n }\n });\n }\n cacheFilterConfig() {\n var _a;\n this.setFilterModel(((_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getFilterModel()) || undefined);\n }\n restoreCachedFilterConfig() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n const filterModel = yield this.getfilterModel();\n if (typeof filterModel !== 'undefined') {\n (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.setFilterModel(filterModel);\n (_b = this.gridApi) === null || _b === void 0 ? void 0 : _b.onFilterChanged();\n }\n });\n }\n /**\n * @public\n */\n get gridOptions() {\n return this.agGridOptions;\n }\n /**\n * @public\n */\n get isServerSide() {\n return this.gridProDatasource instanceof GridProServerSideDatasource;\n }\n /**\n * @public\n */\n get gridParams() {\n return {\n globalEventListener: this.boundGlobalEventListener,\n };\n }\n /**\n * Get the datasource element.\n * @remarks This will return the first datasource element found in the light DOM, wrapping all concrete datasource implementations.\n * @public\n */\n get gridProDatasource() {\n return (this.querySelector('grid-pro-genesis-datasource') ||\n this.querySelector('grid-pro-client-side-datasource') ||\n this.querySelector('grid-pro-server-side-datasource'));\n }\n set gridOptions(options) {\n const gridOnChangeCallback = () => {\n if (this.disposed || !this.isConnected)\n return;\n this.debouncedSaveColumnState();\n this.debouncedColumnAutosize();\n this.invalidateColumnWidthCache();\n };\n Array.from(this.attributes).forEach((attribute) => {\n const attrName = this.agPropertiesMap[attribute.name];\n if (!attrName)\n return;\n this.agAttributes[attrName] = attribute.value;\n });\n const _a = options, { columnDefs, components, defaultColDef, getRowId, onGridReady, onFilterChanged, onFirstDataRendered } = _a, rest = __rest(_a, [\"columnDefs\", \"components\", \"defaultColDef\", \"getRowId\", \"onGridReady\", \"onFilterChanged\", \"onFirstDataRendered\"]);\n const gridOptionsConfig = this.gridOptionsConfig;\n const derivedOptions = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, gridOptionsConfig), { defaultColDef: Object.assign({ enableCellChangeFlash: this.enableCellFlashing, filter: true, resizable: true, sortable: true }, defaultColDef), components: this.combineAllGridComponents(components), suppressDragLeaveHidesColumns: true }), this.eventsAndCallbacks), { onGridReady: (event) => {\n var _a, _b;\n this.gridApi = event.api;\n this.columnApi = event.columnApi;\n if (this.gridEventsQueue.length) {\n this.gridEventsQueue.forEach((type) => {\n this.addGridEventListener(type);\n });\n }\n if (this.rowData) {\n this.gridApi.setRowData(this.rowData);\n }\n if (onGridReady) {\n onGridReady(event);\n }\n if (this.columnState && ((_a = this.columnState) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n this.columnApi.applyColumnState({\n state: this.columnState,\n applyOrder: true,\n });\n }\n this.$emit(Events.EVENT_GRID_READY, {\n event,\n gridId: this.id,\n });\n // TODO: Remove this event when we do the AG Upgrade\n this.$emit(GRID_READY_EVENT, {\n event,\n gridId: this.id,\n });\n // Emit datasource ready event, signals that the datasource is ready to be used\n // TODO: prevent rendering datasource slot until grid is ready\n // so there is no need for this even and handling it in datasources\n (_b = this.gridProDatasource) === null || _b === void 0 ? void 0 : _b.$emit(datasourceEventNames.ready, { pagination: this.pagination });\n this.restoreColumnState();\n this.restoreCachedFilterConfig();\n this.debouncedColumnAutosize();\n }, onFirstDataRendered: (event) => {\n // Handle column sizing\n this.handleColumnSizing();\n // Call the original onFirstDataRendered if provided\n if (onFirstDataRendered) {\n onFirstDataRendered(event);\n }\n }, onColumnPinned: gridOnChangeCallback, onColumnResized: gridOnChangeCallback, onColumnMoved: gridOnChangeCallback, onDisplayedColumnsChanged: gridOnChangeCallback, onFilterChanged: (filterChangedEvent) => {\n if (this.disposed || !this.isConnected)\n return;\n this.debouncedSaveFilterModel();\n if (onFilterChanged) {\n onFilterChanged(filterChangedEvent);\n }\n }, onGridSizeChanged: gridOnChangeCallback, onSortChanged: gridOnChangeCallback }), rest);\n const hasGetRowId = 'getRowId' in (options !== null && options !== void 0 ? options : {});\n if (this.gridProDatasource) {\n derivedOptions.columnDefs = columnDefs;\n if (hasGetRowId) {\n derivedOptions.getRowId = getRowId;\n }\n this.setupPaginationAndStatusBar(derivedOptions);\n this.setLocalGridOptions(derivedOptions);\n }\n else {\n this.mergeAllColumnDefsAndStates(columnDefs).then((value) => {\n if (this.disposed || !this.isConnected) {\n return;\n }\n derivedOptions.columnDefs = value;\n if (hasGetRowId) {\n derivedOptions.getRowId = getRowId;\n }\n this.setupPaginationAndStatusBar(derivedOptions);\n this.setLocalGridOptions(derivedOptions);\n this.initGrid();\n });\n }\n }\n setLocalGridOptions(derivedOptions) {\n this.agGridOptions = Object.assign(Object.assign({}, this.agGridOptions), copyAttributesToGridOptions(derivedOptions, this.agAttributes));\n }\n /**\n * Clears the local grid options, this is used to clear the grid options when the grid is restarted.\n * @public\n */\n clearLocalGridOptions() {\n this.agGridOptions = undefined;\n }\n initGrid() {\n DOM.queueUpdate(() => {\n if (this.disposed || !this.isConnected) {\n return;\n }\n if (this.initialised) {\n this.destroyGridInstance();\n // Needed due gridSlot children cleanup\n if (this.gridSlot.firstChild) {\n // prevent re-instantiating the grid using the same slot content\n this.gridSlot.removeChild(this.gridSlot.firstChild);\n }\n }\n this.agGrid = new Grid(this.gridSlot, this.agGridOptions, this.gridParams);\n this.initialised = true;\n });\n }\n /**\n * Will merge templated column definitions with `columnDefs` plus localStorage's column state or `deferredColumnStates`.\n * @deprecated use `applyTemplateDefinitions` instead.\n * @param columnDefs - The column definitions to apply to the grid.\n * @param deferredColumnDefsOrState - If true, will merge the column definitions with the saved column state or the `deferredColumnStates` property on the `grid-pro-genesis-datasource` element.\n * @returns The merged column definitions.\n */\n applyTemplateDefinitions(columnDefs, deferredColumnDefsOrState = false) {\n logger.deprecated('applyTemplateDefinitions', 'Use `mergeAllColumnDefsAndStates` instead.');\n return this.mergeAllColumnDefsAndStates(columnDefs, deferredColumnDefsOrState);\n }\n /**\n * Will merge templated column definitions with `columnDefs` plus localStorage's column state or `deferredColumnStates`.\n * @public\n * @remarks This will favor the column state from the browser's local storage over the `deferredColumnStates` property on the `grid-pro-genesis-datasource` element.\n * @param columnDefs - The column definitions to apply to the grid.\n * @param deferredColumnDefsOrState - If true, will merge the column definitions with the saved column state or the `deferredColumnStates` property\n * on the `grid-pro-genesis-datasource` element. Defaults to false but `grid-pro-genesis-datasource` will set this to true.\n * @returns The merged column definitions.\n */\n mergeAllColumnDefsAndStates(columnDefs_1) {\n return __awaiter(this, arguments, void 0, function* (columnDefs, deferredColumnDefsOrState = false) {\n var _a;\n const columnDefinitionsFromMetadata = columnDefs || [];\n columnDefinitionsFromMetadata.forEach((colDefFromMetadata) => {\n if (this.headerCaseType && colDefFromMetadata.field && !colDefFromMetadata.headerName) {\n const changeCaseByType = changeCase[this.headerCaseType];\n if (changeCaseByType) {\n colDefFromMetadata.headerName = changeCaseByType(colDefFromMetadata.field);\n }\n else {\n logger.warn(`Invalid header-case-type attribute value: ${this.headerCaseType}. Please use one of the following: camelCase, capitalCase, dotCase, headerCase, noCase, paramCase, pascalCase, pathCase, sentenceCase, snakeCase.`);\n }\n }\n });\n const templateColumnDefs = Array.from(this.querySelectorAll(this.columnComponentName))\n .map((templateColumn) => templateColumn.definition)\n .map((columnDef) => {\n var _a, _b;\n // enable cell flashing for each column if unspecified on column level but enabled on grid level\n if (this.enableCellFlashing && columnDef.enableCellChangeFlash === undefined) {\n columnDef.enableCellChangeFlash = true;\n }\n /**\n * If the column has a set filter, merge filter params with metadata values.\n * If the template column explicitly sets 'values' in filterParams (even to undefined),\n * respect that choice and don't inject metadata values. This allows consumers to\n * opt out of metadata values and let AG Grid extract values from row data instead.\n */\n if (columnDef.filter === 'agSetColumnFilter') {\n const hasExplicitValues = columnDef.filterParams != null && 'values' in columnDef.filterParams;\n if (!hasExplicitValues) {\n const metadataValues = (_b = (_a = columnDefinitionsFromMetadata.find((colDef) => colDef.field === columnDef.field)) === null || _a === void 0 ? void 0 : _a.filterParams) === null || _b === void 0 ? void 0 : _b.values;\n if (metadataValues) {\n columnDef.filterParams = Object.assign(Object.assign({}, columnDef.filterParams), { values: metadataValues });\n }\n }\n }\n if (columnDef.editable) {\n if (!columnDef.cellRenderer && !columnDef.cellRendererSelector) {\n columnDef.cellRendererSelector = (params) => {\n if (!(params === null || params === void 0 ? void 0 : params.data)) {\n return undefined;\n }\n if (params.data[EDITED_COLUMN_FIELD] === columnDef.field) {\n return {\n component: GridProRendererTypes.editable,\n };\n }\n };\n }\n if (!columnDef.tooltipComponent && !columnDef.tooltipValueGetter) {\n columnDef.tooltipComponent = ErrorTooltip;\n columnDef.tooltipValueGetter = (params) => {\n if (!(params === null || params === void 0 ? void 0 : params.data)) {\n return undefined;\n }\n const error = params.data[ERROR_COLUMN_FIELD];\n if (error && error.column === columnDef.field) {\n return error.message;\n }\n };\n }\n if (!columnDef.cellClassRules) {\n columnDef.cellClassRules = {\n error: (params) => {\n var _a;\n if (!(params === null || params === void 0 ? void 0 : params.colDef) || !(params === null || params === void 0 ? void 0 : params.data)) {\n return false;\n }\n return ((_a = params.data[ERROR_COLUMN_FIELD]) === null || _a === void 0 ? void 0 : _a.column) === params.colDef.field;\n },\n };\n }\n }\n const metadataColumnDef = columnDefinitionsFromMetadata.find((colDef) => columnDef.field === colDef.field);\n return Object.assign(Object.assign({}, metadataColumnDef), columnDef);\n });\n const templateColumnKeys = templateColumnDefs.map((x) => x.field);\n const colDefsToReturn = [\n ...templateColumnDefs,\n ...(this.onlyTemplateColDefs\n ? []\n : columnDefinitionsFromMetadata.filter((g) => !templateColumnKeys.includes(g.field))),\n ];\n if (this.gridProDatasource && deferredColumnDefsOrState) {\n const savedColumnState = yield this.getSavedColumnState();\n if ((savedColumnState === null || savedColumnState === void 0 ? void 0 : savedColumnState.length) > 0) {\n return mergeAndDedupColDefWithColumnState(colDefsToReturn, savedColumnState);\n }\n else if (((_a = this.gridProDatasource.deferredColumnStates) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n return mergeAndDedupColDefWithColumnState(colDefsToReturn, this.gridProDatasource.deferredColumnStates);\n }\n }\n return colDefsToReturn;\n });\n }\n panelExists(statusPanelType, panels) {\n return panels.some((panel) => panel.statusPanel === statusPanelType);\n }\n addRowCountPanel(statusPanels, gridOptions) {\n // Row count is handled by pagination status bar component when pagination is enabled.\n // This component is only used for server-side infinite scroll (load more) scenarios\n // where pagination is disabled.\n if (this.statusBarConfig && this.statusBarConfig.rows === true) {\n const isServerSide = this.isServerSide || (gridOptions === null || gridOptions === void 0 ? void 0 : gridOptions.rowModelType) === 'serverSide';\n const isPaginationEnabled = this['_pagination'] || (gridOptions === null || gridOptions === void 0 ? void 0 : gridOptions.pagination) === true;\n if (isServerSide && !isPaginationEnabled) {\n if (!this.panelExists(GridProStatusBarTypes.rowCount, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.rowCount,\n align: 'left',\n });\n }\n }\n else if (!isServerSide) {\n const rowCountStatusPanel = 'agTotalAndFilteredRowCountComponent';\n if (!this.panelExists(rowCountStatusPanel, statusPanels)) {\n statusPanels.push({\n statusPanel: rowCountStatusPanel,\n align: 'left',\n });\n }\n }\n }\n }\n addMaxRowsPanel(statusPanels) {\n if (this.statusBarConfig && this.statusBarConfig.maxRows === true) {\n if (!this.panelExists(GridProStatusBarTypes.labelValue, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.labelValue,\n statusPanelParams: {\n label: 'Max Rows',\n value: this.gridProDatasource.maxRows || DatasourceDefaults.MAX_ROWS_250,\n hide: false,\n },\n align: 'left',\n });\n }\n }\n }\n addAggregationPanel(statusPanels) {\n if (this.statusBarConfig && this.statusBarConfig.aggregation === true) {\n if (!this.panelExists('agAggregationComponent', statusPanels)) {\n statusPanels.push({\n statusPanel: 'agAggregationComponent',\n align: 'right',\n });\n }\n }\n }\n addDatasourcePanels(statusPanels) {\n if (this.gridProDatasource) {\n const datasourceStatusPanels = this.gridProDatasource.getDatasourceStatusBarPanels(this.isServerSide, this.statusBarConfig);\n // Filter out duplicate datasource panels\n const newDatasourcePanels = datasourceStatusPanels.filter((panel) => !this.panelExists(panel.statusPanel, statusPanels));\n statusPanels.push(...newDatasourcePanels);\n }\n }\n addPaginationPanel(statusPanels) {\n if (this['_pagination']) {\n if (!this.panelExists(GridProStatusBarTypes.pagination, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.pagination,\n align: 'right',\n });\n }\n }\n }\n setupPaginationAndStatusBar(gridOptions) {\n // Keep the guard for production code, but allow override for testing\n // if (this.initialised && !allowDuplicateCheck) return;\n var _a, _b;\n if (this['_pagination']) {\n gridOptions.pagination = true;\n gridOptions.suppressScrollOnNewData = true;\n gridOptions.paginationPageSize = this.paginationPageSize;\n }\n // Set default status bar with components based on configuration\n if (this.withStatusBar && this.statusBarConfig) {\n // For duplicate checking (testing scenario), clear existing status panels to prevent duplicates\n // unless they are user-defined panels that we want to preserve\n const existingPanels = ((_a = gridOptions.statusBar) === null || _a === void 0 ? void 0 : _a.statusPanels) || [];\n const statusPanels = [...existingPanels];\n this.addRowCountPanel(statusPanels, gridOptions);\n this.addMaxRowsPanel(statusPanels);\n this.addAggregationPanel(statusPanels);\n this.addDatasourcePanels(statusPanels);\n if (this['_pagination']) {\n gridOptions.suppressPaginationPanel = true;\n this.addPaginationPanel(statusPanels);\n }\n const userDefinedStatusPanels = ((_b = gridOptions.statusBar) === null || _b === void 0 ? void 0 : _b.statusPanels) || [];\n const newUserDefinedPanels = userDefinedStatusPanels.filter((panel) => !this.panelExists(panel.statusPanel, statusPanels));\n statusPanels.push(...newUserDefinedPanels);\n gridOptions.statusBar = {\n statusPanels: statusPanels,\n };\n }\n }\n /**\n * Handles column sizing based on sizeColumnsToContent and sizeColumnsToFit attributes\n * @private\n */\n handleColumnSizing() {\n if (!this.sizeColumnsToContent && !this.sizeColumnsToFit)\n return;\n if (this.sizeColumnsToContent && this.sizeColumnsToFit && this.columnApi && this.gridApi) {\n this.handleBothSizingModes();\n }\n else {\n this.handleIndividualSizingModes();\n }\n }\n /**\n * Handles when both sizeColumnsToContent and sizeColumnsToFit are enabled\n * @private\n */\n handleBothSizingModes() {\n const totalColumnWidth = this.calculateTotalColumnWidth();\n const gridWidth = this.getGridWidth();\n if (totalColumnWidth > gridWidth) {\n if (!this.columnApi)\n return;\n this.columnApi.autoSizeAllColumns();\n }\n else {\n if (!this.gridApi)\n return;\n this.gridApi.sizeColumnsToFit();\n }\n }\n /**\n * Handles individual sizing modes when only one is enabled\n * @private\n */\n handleIndividualSizingModes() {\n if (this.sizeColumnsToContent && this.columnApi) {\n this.columnApi.autoSizeAllColumns();\n }\n if (this.sizeColumnsToFit && this.gridApi) {\n this.gridApi.sizeColumnsToFit();\n }\n }\n /**\n * Calculates the total width of all columns\n * @private\n */\n calculateTotalColumnWidth() {\n if (!this.columnApi) {\n return 0;\n }\n const allColumns = this.columnApi.getAllGridColumns();\n const currentColumnCount = allColumns.length;\n // Check if cache is still valid (same number of columns)\n if (this.cachedTotalColumnWidth !== null && this.columnCount === currentColumnCount) {\n return this.cachedTotalColumnWidth;\n }\n // Calculate and cache the total width\n this.cachedTotalColumnWidth = allColumns.reduce((sum, col) => sum + (col.getActualWidth() || 0), 0);\n this.columnCount = currentColumnCount;\n return this.cachedTotalColumnWidth;\n }\n /**\n * Invalidates the cached column width calculation\n * @private\n * @remarks This method is called automatically when column changes occur (resize, move, pin, etc.)\n * to ensure the cached width calculation remains accurate.\n */\n invalidateColumnWidthCache() {\n this.cachedTotalColumnWidth = null;\n this.columnCount = 0;\n }\n /**\n * Gets the available grid width with fallbacks\n * @private\n */\n getGridWidth() {\n const gridElement = this;\n let gridWidth = (gridElement === null || gridElement === void 0 ? void 0 : gridElement.clientWidth) || 0;\n if (gridWidth === 0 && this.gridSlot) {\n gridWidth = this.gridSlot.clientWidth || 0;\n }\n if (gridWidth === 0) {\n gridWidth = this.clientWidth || 0;\n }\n return gridWidth;\n }\n get observedAttributes() {\n // allow properties to be supplied either lowercased or kebab-cased\n // this allows the user to either supply (for example) enableSorting or enabled-sorting\n // properties lowercased\n const lowerCasedPropertyNames = AG_PROPERTIES.map((property) => property.toLowerCase());\n // properties kebab-cased\n const kebabCasePropertyNames = AG_PROPERTIES.map((property) => convertToKebabCase(property));\n return lowerCasedPropertyNames.concat(kebabCasePropertyNames);\n }\n agAttributeChangedCallback(attName, oldValue, newValue) {\n if (oldValue === newValue) {\n return;\n }\n const gridPropertyName = this.agPropertiesMap[attName];\n if (gridPropertyName) {\n // for properties set before gridOptions is called\n this.agAttributes[gridPropertyName] = newValue;\n if (this.initialised) {\n // for subsequent (post gridOptions) changes\n const changeObject = {};\n changeObject[gridPropertyName] = { currentValue: newValue };\n ComponentUtil.processOnChange(changeObject, this.gridApi);\n }\n }\n }\n globalEventListener(eventType, event) {\n const eventLowerCase = eventType.toLowerCase();\n const browserEvent = new Event(eventLowerCase);\n const browserEventNoType = browserEvent;\n browserEventNoType.agGridDetails = event;\n // for when defining events via myGrid.addEventListener('columnresized', function (event) {...\n this.dispatchEvent(browserEvent);\n // for when defining events via myGrid.oncolumnresized = function (event) {....\n const callbackMethod = 'on' + eventLowerCase;\n if (typeof this[callbackMethod] === 'function') {\n this[callbackMethod](browserEvent);\n }\n }\n insertFontFace(newValue) {\n const fontFaceRule = agThemeFontFaceMap[newValue] || this.gridFontFace;\n this.destroyFontFace();\n const newDestroy = insertDocumentCSSRule(fontFaceRule, agThemeFontsId(newValue));\n if (newDestroy) {\n this.fontFaceDestroy = newDestroy;\n }\n }\n destroyFontFace() {\n if (this.fontFaceDestroy) {\n this.fontFaceDestroy();\n this.fontFaceDestroy = null;\n }\n }\n}\n__decorate([\n observable\n], GridPro.prototype, \"columnApi\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridApi\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridErrorItems\", void 0);\n__decorate([\n StatePersistence\n], GridPro.prototype, \"statePersistence\", void 0);\n__decorate([\n attr({ attribute: 'auto-cell-renderer-by-type', mode: 'boolean' })\n], GridPro.prototype, \"autoCellRendererByType\", void 0);\n__decorate([\n attr({ attribute: 'only-template-col-defs', mode: 'boolean' })\n], GridPro.prototype, \"onlyTemplateColDefs\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'grid-autosizing' })\n], GridPro.prototype, \"gridAutosizingEnabled\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'size-columns-to-content' })\n], GridPro.prototype, \"sizeColumnsToContent\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'size-columns-to-fit' })\n], GridPro.prototype, \"sizeColumnsToFit\", void 0);\n__decorate([\n attr({ attribute: 'add-index' })\n], GridPro.prototype, \"addIndex\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-add' })\n], GridPro.prototype, \"asyncAdd\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-remove' })\n], GridPro.prototype, \"asyncRemove\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-update' })\n], GridPro.prototype, \"asyncUpdate\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enable-cell-flashing' })\n], GridPro.prototype, \"enableCellFlashing\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enabled-row-flashing' })\n], GridPro.prototype, \"enabledRowFlashing\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enable-row-flashing' })\n], GridPro.prototype, \"enableRowFlashing\", void 0);\n__decorate([\n attr({ attribute: 'persist-column-state-key' })\n], GridPro.prototype, \"persistColumnStateKey\", void 0);\n__decorate([\n attr({ attribute: 'persist-filter-model-key' })\n], GridPro.prototype, \"persistFilterModelKey\", void 0);\n__decorate([\n attr({ attribute: 'default-column-config' })\n], GridPro.prototype, \"defaultColumnConfig\", void 0);\n__decorate([\n attr({ attribute: 'header-case-type' })\n], GridPro.prototype, \"headerCaseType\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"rowData\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridFontFace\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"columnComponentName\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"eventsAndCallbacks\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"headerHeight\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"rowHeight\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"theme\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"classNames\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"agGrid\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridSlot\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"themeMode\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridComponents\", void 0);\n__decorate([\n attr({ mode: 'boolean' })\n], GridPro.prototype, \"pagination\", void 0);\n__decorate([\n attr({ attribute: 'pagination-page-size' })\n], GridPro.prototype, \"paginationPageSize\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"statusBarConfig\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'with-status-bar' })\n], GridPro.prototype, \"withStatusBar\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"customErrorHandlerTemplate\", void 0);\n__decorate([\n GridOptionsConfig\n], GridPro.prototype, \"gridOptionsConfig\", void 0);\n/**\n * GridPro shadow root options.\n * @public\n * @remarks\n * For extensibility, this can be used to set the shadow root mode and delegatesFocus\n */\nexport const foundationGridProShadowOptions = undefined;\n/**\n * Grid Pro default configuration.\n * @public\n */\nexport const defaultGridProConfig = {\n shadowOptions: undefined,\n};\n/**\n * A function that returns a Foundation Grid Pro registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro\\>\n */\nexport const foundationGridPro = GridPro.compose(Object.assign({ baseName: 'grid-pro', styles,\n template, shadowOptions: foundationGridProShadowOptions }, defaultGridProConfig));\n","import { css } from '@microsoft/fast-element';\nimport { errorHandlerDialogStyles } from './datasource/error-handler.dialog';\nimport { agExternalStockStyles } from './external';\n/**\n * The Grid Pro styles.\n * @public\n * @remarks this is the default CSS, bundles Alpine/Balham/Material AG themes.\n */\nexport const foundationGridProStyles = css `\n ${agExternalStockStyles}\n ${errorHandlerDialogStyles}\n :host {\n --datasource-error-background-color: var(--neutral-layer-4);\n --datasource-error-background-opacity: 0.5;\n --datasource-error-dialog-max-width: 50%;\n --datasource-error-dialog-min-width: auto;\n --ag-status-bar-height: 32.5px;\n\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n :host([ds-disconnected]) {\n display: block;\n }\n\n :host([ds-disconnected])::part(grid) {\n cursor: not-allowed;\n opacity: 40%;\n pointer-events: none;\n }\n\n .ag-side-bar,\n .ag-menu {\n --ag-subheader-background-color: var(--ag-background-color);\n --ag-control-panel-background-color: var(--ag-background-color);\n }\n\n .ag-cell-inline-editing {\n height: inherit !important;\n }\n\n .hidden {\n display: none;\n }\n\n .error {\n border-color: var(--error-color) !important;\n }\n\n .ag-status-bar {\n height: var(--ag-status-bar-height);\n }\n\n .ag-status-name-value {\n padding-top: var(--ag-grid-size);\n padding-bottom: var(--ag-grid-size);\n }\n\n /* Custom styling for the unsort icon (sortNone) - only for sortable columns */\n .ag-header-cell.ag-header-cell-sortable .ag-icon-none {\n opacity: 100%;\n color: var(--rapid-ag-header-foreground-color, var(--ag-foreground-color, #fff));\n font-size: calc(var(--ag-icon-size, 12px) * 1.2);\n font-weight: bold;\n }\n\n .ag-header-cell.ag-header-cell-sortable:hover .ag-icon-none {\n opacity: 100%;\n color: var(--rapid-ag-header-foreground-color, var(--ag-foreground-color, #fff));\n transform: scale(1.1);\n transition: transform 0.2s ease;\n }\n`;\n","import { html, ref } from '@microsoft/fast-element';\nimport { getErrorHandlerDialogTemplate } from './datasource/error-handler.dialog';\n/**\n * Get a Design System prefixed The Grid Pro template.\n * @param prefix - The design system prefix to use. Defaults to 'foundation'.\n * @returns A grid Pro template prefixed with the correct design system.\n * @public\n */\nexport const getGridProTemplate = (prefix = 'foundation') => html `\n <template>\n <span part=\"grid\" data-ag-theme-mode=${(x) => x.themeMode} class=\"${(x) => x.classNames}\">\n <slot name=\"grid\" ${ref('gridSlot')}></slot>\n <slot></slot>\n </span>\n ${(x) => x.customErrorHandlerTemplate\n ? x.customErrorHandlerTemplate(prefix, x.gridErrorItems.filter(({ type }) => type === 'datasource'))\n : getErrorHandlerDialogTemplate(prefix, x.gridErrorItems.filter(({ type }) => type === 'datasource'))}\n </template>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: <foundation-grid-pro>\n */\nexport const gridProTemplate = getGridProTemplate();\n","import { CSSVarsTokenMapper } from '@genesislcap/foundation-ui';\nimport { css } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\n/**\n * All official AG CSS variables\n * @public\n */\nexport var AgGridCSSVars;\n(function (AgGridCSSVars) {\n AgGridCSSVars[\"foregroundColor\"] = \"--ag-foreground-color\";\n AgGridCSSVars[\"dataColor\"] = \"--ag-data-color\";\n AgGridCSSVars[\"secondaryForegroundColor\"] = \"--ag-secondary-foreground-color\";\n AgGridCSSVars[\"headerForegroundColor\"] = \"--ag-header-foreground-color\";\n AgGridCSSVars[\"disabledForegroundColor\"] = \"--ag-disabled-foreground-color\";\n AgGridCSSVars[\"backgroundColor\"] = \"--ag-background-color\";\n AgGridCSSVars[\"headerBackgroundColor\"] = \"--ag-header-background-color\";\n AgGridCSSVars[\"subheaderBackgroundColor\"] = \"--ag-subheader-background-color\";\n AgGridCSSVars[\"subheaderToolbarBackgroundColor\"] = \"--ag-subheader-toolbar-background-color\";\n AgGridCSSVars[\"controlPanelBackgroundColor\"] = \"--ag-control-panel-background-color\";\n AgGridCSSVars[\"selectedRowBackgroundColor\"] = \"--ag-selected-row-background-color\";\n AgGridCSSVars[\"oddRowBackgroundColor\"] = \"--ag-odd-row-background-color\";\n AgGridCSSVars[\"rowHoverColor\"] = \"--ag-row-hover-color\";\n AgGridCSSVars[\"rangeSelectionBorderColor\"] = \"--ag-range-selection-border-color\";\n AgGridCSSVars[\"rangeSelectionBackgroundColor\"] = \"--ag-range-selection-background-color\";\n AgGridCSSVars[\"selectedTabUnderlineColor\"] = \"--ag-selected-tab-underline-color\";\n AgGridCSSVars[\"rangeSelectionChartCategoryBackgroundColor\"] = \"--ag-range-selection-chart-category-background-color\";\n AgGridCSSVars[\"rangeSelectionChartBackgroundColor\"] = \"--ag-range-selection-chart-background-color\";\n AgGridCSSVars[\"headerCellHoverBackgroundColor\"] = \"--ag-header-cell-hover-background-color\";\n AgGridCSSVars[\"headerCellMovingBackgroundColor\"] = \"--ag-header-cell-moving-background-color\";\n AgGridCSSVars[\"chipBackgroundColor\"] = \"--ag-chip-background-color\";\n AgGridCSSVars[\"borderColor\"] = \"--ag-border-color\";\n AgGridCSSVars[\"secondaryBorderColor\"] = \"--ag-secondary-border-color\";\n AgGridCSSVars[\"rowBorderColor\"] = \"--ag-row-border-color\";\n AgGridCSSVars[\"headerColumnSeparatorColor\"] = \"--ag-header-column-separator-color\";\n AgGridCSSVars[\"headerColumnResizeHandleColor\"] = \"--ag-header-column-resize-handle-color\";\n AgGridCSSVars[\"inputBorderColor\"] = \"--ag-input-border-color\";\n AgGridCSSVars[\"inputDisabledBorderColor\"] = \"--ag-input-disabled-border-color\";\n AgGridCSSVars[\"inputDisabledBackgroundColor\"] = \"--ag-input-disabled-background-color\";\n AgGridCSSVars[\"checkboxBackgroundColor\"] = \"--ag-checkbox-background-color\";\n AgGridCSSVars[\"checkboxCheckedColor\"] = \"--ag-checkbox-checked-color\";\n AgGridCSSVars[\"checkboxUncheckedColor\"] = \"--ag-checkbox-unchecked-color\";\n AgGridCSSVars[\"checkboxIndeterminateColor\"] = \"--ag-checkbox-indeterminate-color\";\n AgGridCSSVars[\"toggleButtonOffBorderColor\"] = \"--ag-toggle-button-off-border-color\";\n AgGridCSSVars[\"toggleButtonOffBackgroundColor\"] = \"--ag-toggle-button-off-background-color\";\n AgGridCSSVars[\"toggleButtonOnBorderColor\"] = \"--ag-toggle-button-on-border-color\";\n AgGridCSSVars[\"toggleButtonOnBackgroundColor\"] = \"--ag-toggle-button-on-background-color\";\n AgGridCSSVars[\"toggleButtonSwitchBackgroundColor\"] = \"--ag-toggle-button-switch-background-color\";\n AgGridCSSVars[\"toggleButtonSwitchBorderColor\"] = \"--ag-toggle-button-switch-border-color\";\n AgGridCSSVars[\"minichartSelectedChartColor\"] = \"--ag-minichart-selected-chart-color\";\n AgGridCSSVars[\"minichartSelectedPageColor\"] = \"--ag-minichart-selected-page-color\";\n AgGridCSSVars[\"modalOverlayBackgroundColor\"] = \"--ag-modal-overlay-background-color\";\n AgGridCSSVars[\"inputFocusBoxShadow\"] = \"--ag-input-focus-box-shadow\";\n AgGridCSSVars[\"inputFocusBorderColor\"] = \"--ag-input-focus-border-color\";\n})(AgGridCSSVars || (AgGridCSSVars = {}));\n/**\n * The available Grid Pro themes.\n * @public\n */\nexport var AgGridTheme;\n(function (AgGridTheme) {\n AgGridTheme[\"alpine\"] = \"ag-theme-alpine\";\n AgGridTheme[\"alpineDark\"] = \"ag-theme-alpine-dark\";\n AgGridTheme[\"balham\"] = \"ag-theme-balham\";\n AgGridTheme[\"balhamDark\"] = \"ag-theme-balham-dark\";\n AgGridTheme[\"material\"] = \"ag-theme-material\";\n})(AgGridTheme || (AgGridTheme = {}));\n/**\n * Generates the class name for a given Grid Pro theme name.\n * @param themeName - the Grid Pro theme name\n * @returns the class name for the Grid Pro token map\n * @public\n * @example The result of this will be a class name that is applied to the grid part of GridPro template (actual content of the class comes from agThemeTokenMapCSS):\n * ```html\n * <span part=\"grid\" class=\"ag-theme-genesis-rapid-dark\">\n * ```\n */\nexport const agThemeTokenMapClassname = (themeName) => `${themeName}-token-map`;\n/**\n * Generates the id name for custom Grid Pro fonts.\n * @param themeName - the Grid Pro theme name\n * @returns the id name for the Grid Pro fonts\n * @public\n * @example The result of this is used in the id of style tag:\n * ```html\n * <style id=\"ag-theme-alpine-fonts\"></style>\n * ```\n */\nexport const agThemeFontsId = (themeName) => `${themeName}-fonts`;\n/**\n * Generates the CSS for a given GridPro theme name and token map\n * @param themeName - the GridPro theme name\n * @param tokenMap - a map of CSS variables {@link @genesislcap/grid-pro#AgGridCSSVars} and custom token values\n * @returns the CSS for the Grid Pro token map\n * @public\n * @example\n * ```ts\n * export const agThemeGenesisRapidTokens = {\n * backgroundColor: create<Swatch>('rapid-ag-background-color').withDefault((elem: HTMLElement) =>\n * baseLayerLuminance.getValueFor(elem) === StandardLuminance.LightMode\n * ? lightColors.backgroundSwatch\n * : darkColors.backgroundSwatch\n * ),\n * foregroundColor: create<Swatch>('rapid-ag-foreground-color').withDefault((elem: HTMLElement) =>\n * baseLayerLuminance.getValueFor(elem) === StandardLuminance.LightMode\n * ? lightColors.foregroundSwatch\n * : darkColors.foregroundSwatch\n * ),\n * };\n * export const agThemeGenesisRapidTokenMap: CSSVarTokenMap<AgGridCSSVars | string> = {\n * [AgGridCSSVars.backgroundColor]: agThemeGenesisRapidTokens.backgroundColor,\n * [AgGridCSSVars.foregroundColor]: agThemeGenesisRapidTokens.foregroundColor,\n * };\n * ```\n */\nexport const agThemeTokenMapCSS = (themeName, tokenMap) => css `\n .${agThemeTokenMapClassname(themeName)} {\n ${new CSSVarsTokenMapper(tokenMap)}\n }\n`;\n/**\n * The available Grid Pro Renderer Types\n * @public\n */\nexport var GridProRendererTypes;\n(function (GridProRendererTypes) {\n GridProRendererTypes[\"action\"] = \"action\";\n GridProRendererTypes[\"actionsMenu\"] = \"actionsMenu\";\n GridProRendererTypes[\"boolean\"] = \"boolean\";\n GridProRendererTypes[\"editable\"] = \"editable\";\n GridProRendererTypes[\"icon\"] = \"icon\";\n GridProRendererTypes[\"text\"] = \"text\";\n GridProRendererTypes[\"select\"] = \"select\";\n GridProRendererTypes[\"statusPill\"] = \"statusPill\";\n GridProRendererTypes[\"dateEditor\"] = \"dateEditor\";\n GridProRendererTypes[\"selectEditor\"] = \"selectEditor\";\n GridProRendererTypes[\"numberEditor\"] = \"numberEditor\";\n GridProRendererTypes[\"stringEditor\"] = \"stringEditor\";\n GridProRendererTypes[\"multiselectEditor\"] = \"multiselectEditor\";\n})(GridProRendererTypes || (GridProRendererTypes = {}));\n/**\n * The available Grid Pro Status Bar Types\n * @public\n * @remarks\n * These status bar components require AG Grid Enterprise module to be enabled.\n * Status bar components will only be displayed if the Enterprise module is available.\n * @see https://www.ag-grid.com/javascript-data-grid/component-status-bar/\n */\nexport var GridProStatusBarTypes;\n(function (GridProStatusBarTypes) {\n GridProStatusBarTypes[\"labelValue\"] = \"labelValue\";\n GridProStatusBarTypes[\"pagination\"] = \"pagination\";\n GridProStatusBarTypes[\"loadMore\"] = \"loadMore\";\n GridProStatusBarTypes[\"reload\"] = \"reload\";\n GridProStatusBarTypes[\"rowCount\"] = \"rowCount\";\n})(GridProStatusBarTypes || (GridProStatusBarTypes = {}));\n/**\n * Event fired when grid is ready\n * @public\n * @deprecated - Use `Events.EVENT_GRID_READY` from `@ag-grid-community/core` instead\n * @privateRemarks\n * This will be removed when we do the AG Upgrade.\n */\nexport const GRID_READY_EVENT = 'onGridReady';\n/**\n * Key used to store currently edited column when it being synced with server side data\n * @public\n */\nexport const EDITED_COLUMN_FIELD = '__editedColumn';\n/**\n * Key used to store error details (column, message) when inline edit fails sync with server side data\n * @public\n */\nexport const ERROR_COLUMN_FIELD = '__errorColumn';\n/**\n * Default grid options\n * @public\n */\nexport const defaultGridOptionsConfig = {};\n/**\n * Grid options config used to inject into grids in application\n * @internal\n */\nexport const GridOptionsConfig = DI.createInterface((x) => x.instance(defaultGridOptionsConfig));\n/**\n * The available Grid Pro header case types\n * @public\n */\nexport var GridProCaseType;\n(function (GridProCaseType) {\n GridProCaseType[\"camelCase\"] = \"camelCase\";\n GridProCaseType[\"capitalCase\"] = \"capitalCase\";\n GridProCaseType[\"dotCase\"] = \"dotCase\";\n GridProCaseType[\"headerCase\"] = \"headerCase\";\n GridProCaseType[\"noCase\"] = \"noCase\";\n GridProCaseType[\"paramCase\"] = \"paramCase\";\n GridProCaseType[\"pascalCase\"] = \"pascalCase\";\n GridProCaseType[\"pathCase\"] = \"pathCase\";\n GridProCaseType[\"sentenceCase\"] = \"sentenceCase\";\n GridProCaseType[\"snakeCase\"] = \"snakeCase\";\n})(GridProCaseType || (GridProCaseType = {}));\n/**\n * Default status bar configuration\n * @public\n */\nexport const DEFAULT_STATUS_BAR_CONFIG = {\n rows: true,\n maxRows: false,\n aggregation: true,\n loadMore: {\n tooltip: 'Load more rows from server',\n },\n reload: {\n tooltip: 'Reload the datasource.',\n },\n};\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Session } from '@genesislcap/foundation-comms';\n/**\n * Implementation for the Local Storage State Persistence interface.\n * @public\n */\nexport class LocalStorageStatePersistence {\n getColumnState(persistColumnStateKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const localStorageGridOptions = this.session.getLocalStorageItem('gridOptions');\n if (localStorageGridOptions) {\n const allGridOptions = JSON.parse(localStorageGridOptions);\n if (persistColumnStateKey in allGridOptions) {\n return JSON.parse(allGridOptions[persistColumnStateKey]);\n }\n }\n return [];\n });\n }\n saveColumnState(persistColumnStateKey, columnState) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n existingOptions[persistColumnStateKey] = JSON.stringify(columnState);\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n deleteColumnState(persistColumnStateKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n delete existingOptions[persistColumnStateKey];\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n getFilterModel(persistFilterModelKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const localStorageGridOptions = this.session.getLocalStorageItem('gridOptions');\n if (localStorageGridOptions) {\n const allGridOptions = JSON.parse(localStorageGridOptions);\n if (persistFilterModelKey in allGridOptions) {\n return JSON.parse(allGridOptions[persistFilterModelKey]);\n }\n }\n return {};\n });\n }\n saveFilterModel(persistFilterModelKey, filterModel) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n existingOptions[persistFilterModelKey] = JSON.stringify(filterModel);\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n}\n__decorate([\n Session\n], LocalStorageStatePersistence.prototype, \"session\", void 0);\n","import { DI } from '@microsoft/fast-foundation';\nimport { LocalStorageStatePersistence } from './local-state';\n/**\n * The DI token for the StatePersistence interface.\n * @internal\n */\nexport const StatePersistence = DI.createInterface((x) => x.singleton(LocalStorageStatePersistence));\n","/**\n * Label Value Status Bar Component\n * @public\n */\nexport class LabelValueStatusBarComponent {\n init(params) {\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-name-value', 'ag-status-panel');\n this.element.setAttribute('data-test-id', 'grid-label-value-panel');\n this.element.setAttribute('role', 'status');\n this.currentParams = params;\n this.updateDisplay();\n }\n updateParams(params) {\n this.currentParams = Object.assign(Object.assign({}, this.currentParams), params);\n this.updateDisplay();\n }\n updateDisplay() {\n if (!this.element)\n return;\n if (this.currentParams.hide) {\n this.element.style.display = 'none';\n return;\n }\n else {\n this.element.style.display = '';\n }\n // Set accessible label for the entire component\n this.element.setAttribute('aria-label', `${this.currentParams.label}: ${this.currentParams.value}`);\n // Create or update label element\n if (!this.labelElement) {\n this.labelElement = document.createElement('span');\n this.labelElement.setAttribute('data-test-id', 'grid-label-value-label');\n this.labelElement.setAttribute('aria-hidden', 'true');\n this.element.appendChild(this.labelElement);\n }\n this.labelElement.innerHTML = `${this.currentParams.label}: `;\n // Create or update value element\n if (!this.valueElement) {\n this.valueElement = document.createElement('span');\n this.valueElement.classList.add('ag-status-name-value-value');\n this.valueElement.setAttribute('data-test-id', 'grid-label-value-value');\n this.valueElement.setAttribute('aria-hidden', 'true');\n this.element.appendChild(this.valueElement);\n }\n this.valueElement.innerHTML = this.currentParams.value;\n }\n getGui() {\n return this.element;\n }\n destroy() { }\n}\n","import { __awaiter } from \"tslib\";\nimport { delay, getCurrentDesignSystemPrefix } from '@genesislcap/foundation-utils';\nconst LOADING_DELAY = 500;\n/**\n * A status bar component that shows a \"Load More\" button when more rows are available\n * @public\n */\nexport class LoadMoreStatusBarComponent {\n constructor() {\n this.buttonLabel = 'Load More';\n this.isLoading = false;\n this.isLeftAligned = false;\n }\n init(params) {\n var _a, _b, _c;\n this.params = params;\n this.gridApi = params.api;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-panel', 'ag-load-more-panel');\n this.element.setAttribute('data-test-id', 'grid-load-more-panel');\n this.element.setAttribute('role', 'region');\n this.element.setAttribute('aria-label', 'Load more data controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n // Determine alignment based on pagination status\n // When pagination is enabled, load more is aligned left, otherwise right\n this.isLeftAligned = ((_c = (_b = (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.gridOptionsService) === null || _b === void 0 ? void 0 : _b.gridOptions) === null || _c === void 0 ? void 0 : _c.pagination) || false;\n this.element.style.justifyContent = this.isLeftAligned ? 'flex-start' : 'flex-end';\n // Only add padding on the side where the button is\n this.element.style.paddingLeft = 'var(--ag-grid-size)';\n this.element.style.paddingRight = 'var(--ag-grid-size)';\n this.element.style.height = 'var(--ag-status-bar-height)';\n // Detect the current design system prefix (rapid or zero)\n this.designSystemPrefix = getCurrentDesignSystemPrefix(this.element, 'zero');\n this.createProgressRing();\n this.createLoadMoreButton();\n this.updateButtonVisibility();\n // Remove all children first to ensure correct ordering\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n // Add elements in the correct order based on alignment\n if (this.isLeftAligned) {\n // Left-aligned: Button first, then progress ring\n this.element.appendChild(this.loadMoreButton);\n this.element.appendChild(this.progressRing);\n }\n else {\n // Right-aligned: Progress ring first, then button\n this.element.appendChild(this.progressRing);\n this.element.appendChild(this.loadMoreButton);\n }\n }\n createProgressRing() {\n // Create the progress ring with the appropriate design system prefix\n this.progressRing = document.createElement(`${this.designSystemPrefix}-progress-ring`);\n this.progressRing.setAttribute('data-test-id', 'grid-load-more-progress');\n this.progressRing.setAttribute('aria-label', 'Loading more data');\n // Set styles for the progress ring\n this.progressRing.style.width = '20px';\n this.progressRing.style.height = '20px';\n // Different margin based on alignment - when left-aligned, progress ring goes after button\n this.progressRing.style.margin = this.isLeftAligned ? '0 0 0 8px' : '0 8px 0 0';\n this.progressRing.style.display = 'none'; // Hidden by default\n }\n createLoadMoreButton() {\n var _a, _b;\n // Create the button with the appropriate design system prefix\n this.loadMoreButton = document.createElement(`${this.designSystemPrefix}-button`);\n this.loadMoreButton.setAttribute('data-test-id', 'grid-load-more-button');\n // Set button appearance - use custom appearance if provided, otherwise default to 'outline'\n const appearance = ((_a = this.params) === null || _a === void 0 ? void 0 : _a.appearance) || 'outline';\n this.loadMoreButton.setAttribute('appearance', appearance);\n // Set button label - use default\n this.loadMoreButton.textContent = this.buttonLabel;\n // Set button styles - improve sizing to match UI better\n this.loadMoreButton.style.margin = '2px 8px';\n this.loadMoreButton.style.minWidth = '120px';\n this.loadMoreButton.style.textAlign = 'center';\n this.loadMoreButton.style.height = '24px';\n this.loadMoreButton.style.lineHeight = '20px';\n // Add native tooltip if provided\n if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) {\n this.loadMoreButton.setAttribute('title', this.params.tooltip);\n this.loadMoreButton.setAttribute('aria-describedby', 'grid-load-more-tooltip');\n }\n // Set initial ARIA attributes - use tooltip as aria-label if available, otherwise use default\n this.updateAriaLabel();\n this.loadMoreButton.setAttribute('role', 'button');\n // Add event listener for the load more action\n this.clickHandler = () => __awaiter(this, void 0, void 0, function* () {\n if (this.isLoading)\n return; // Prevent multiple clicks\n try {\n this.showLoading(true);\n yield delay(LOADING_DELAY);\n // Execute the load more action\n if (this.params.onLoadMore) {\n this.params.onLoadMore();\n }\n // After the action completes, hide the loading state\n // this.showLoading(false);\n }\n catch (error) {\n // In case of error, ensure loading state is hidden\n this.showLoading(false);\n }\n });\n this.loadMoreButton.addEventListener('click', this.clickHandler);\n }\n /**\n * Update the aria-label based on current state and tooltip\n */\n updateAriaLabel() {\n var _a, _b;\n let ariaLabel;\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip) {\n // Use tooltip as primary aria-label\n ariaLabel = this.params.tooltip;\n }\n else {\n // Fall back to descriptive labels based on state\n if (this.isLoading) {\n ariaLabel = 'Loading more data';\n }\n else if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.moreRows) {\n ariaLabel = 'Load more rows from server';\n }\n else {\n ariaLabel = 'No more rows available';\n }\n }\n this.loadMoreButton.setAttribute('aria-label', ariaLabel);\n }\n /**\n * Show or hide the loading state\n */\n showLoading(loading) {\n var _a;\n this.isLoading = loading;\n if (loading) {\n // Show loading state\n this.progressRing.style.display = 'inline-block';\n this.loadMoreButton.setAttribute('disabled', 'true');\n this.loadMoreButton.textContent = 'Loading...';\n }\n else {\n // Hide loading state\n this.progressRing.style.display = 'none';\n // Reset button state based on moreRows parameter\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.moreRows) {\n this.loadMoreButton.textContent = 'Load More';\n this.loadMoreButton.removeAttribute('disabled');\n }\n else {\n this.loadMoreButton.textContent = 'No More Rows';\n this.loadMoreButton.setAttribute('disabled', 'true');\n }\n }\n // Update aria-label to reflect current state\n this.updateAriaLabel();\n }\n updateButtonVisibility() {\n // If we don't have params or during loading, don't update\n if (!this.params || this.isLoading) {\n return;\n }\n // Reset loading state (safeguard)\n this.progressRing.style.display = 'none';\n // If we have more rows, enable the button\n if (this.params.moreRows) {\n this.loadMoreButton.style.display = 'inline-flex';\n this.loadMoreButton.textContent = 'Load More';\n this.loadMoreButton.removeAttribute('disabled');\n }\n else {\n // No more rows available\n this.loadMoreButton.style.display = 'inline-flex';\n this.loadMoreButton.textContent = 'No More Rows';\n this.loadMoreButton.setAttribute('disabled', 'true');\n }\n // Update aria-label to reflect current state\n this.updateAriaLabel();\n }\n updateParams(params) {\n var _a, _b;\n const prevParams = this.params;\n this.params = Object.assign(Object.assign({}, this.params), params);\n // If tooltip changed, update the title attribute\n if ((prevParams === null || prevParams === void 0 ? void 0 : prevParams.tooltip) !== ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip) && ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip)) {\n this.loadMoreButton.setAttribute('title', this.params.tooltip);\n }\n // If we were loading, but got an update that says no more rows,\n // we need to stop the loading state immediately\n if (this.isLoading) {\n this.showLoading(false);\n }\n this.updateButtonVisibility();\n }\n getGui() {\n return this.element;\n }\n destroy() {\n // Clean up event listeners\n if (this.loadMoreButton && this.clickHandler) {\n this.loadMoreButton.removeEventListener('click', this.clickHandler);\n }\n }\n}\n","/**\n * Pagination Status Bar Component for AG Grid\n * Displays pagination controls and information about current page and total rows\n * @public\n */\nexport class PaginationStatusBarComponent {\n init(params) {\n this.api = params.api;\n this.element = document.createElement('div');\n this.element.className = 'ag-status-panel';\n this.element.setAttribute('data-test-id', 'grid-pagination-panel');\n this.element.setAttribute('role', 'navigation');\n this.element.setAttribute('aria-label', 'Pagination controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n this.element.style.justifyContent = 'flex-end';\n this.element.style.height = 'var(--ag-status-bar-height)';\n this.createPaginationPanel();\n // Initial update\n this.updateDisplay();\n // Listen to pagination changes\n this.paginationChangedHandler = () => {\n this.updateDisplay();\n };\n this.api.addEventListener('paginationChanged', this.paginationChangedHandler);\n }\n getGui() {\n return this.element;\n }\n createPaginationPanel() {\n // Create the main pagination panel\n this.paginationPanel = document.createElement('div');\n this.paginationPanel.className = 'ag-paging-panel ag-unselectable';\n this.paginationPanel.setAttribute('id', 'ag-pagination-clone');\n this.paginationPanel.setAttribute('data-test-id', 'grid-pagination-controls');\n // Row summary panel\n this.paginationSummaryPanel = document.createElement('span');\n this.paginationSummaryPanel.className = 'ag-paging-row-summary-panel';\n this.paginationSummaryPanel.setAttribute('role', 'status');\n this.paginationSummaryPanel.setAttribute('data-test-id', 'grid-pagination-summary');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary');\n // First page button\n this.firstPageButton = this.createPaginationButton('btFirst', 'ag-paging-button ag-disabled', 'First Page', true);\n this.firstPageButton.setAttribute('data-test-id', 'grid-pagination-first');\n // Previous page button\n this.prevPageButton = this.createPaginationButton('btPrevious', 'ag-paging-button ag-disabled', 'Previous Page', true);\n this.prevPageButton.setAttribute('data-test-id', 'grid-pagination-previous');\n // Create the description panel\n this.descriptionPanel = document.createElement('span');\n this.descriptionPanel.className = 'ag-paging-description';\n this.descriptionPanel.setAttribute('role', 'status');\n this.descriptionPanel.setAttribute('data-test-id', 'grid-pagination-description');\n this.descriptionPanel.setAttribute('aria-label', 'Current page information');\n // Page information elements\n this.pageStartDisplay = document.createElement('span');\n this.pageStartDisplay.className = 'ag-paging-number';\n this.pageStartDisplay.setAttribute('id', 'ag-pagination-clone-start-page');\n this.pageStartDisplay.setAttribute('data-test-id', 'grid-pagination-page-label');\n this.pageStartDisplay.textContent = 'Page';\n this.pageNumberDisplay = document.createElement('span');\n this.pageNumberDisplay.className = 'ag-paging-number';\n this.pageNumberDisplay.setAttribute('id', 'ag-pagination-clone-start-page-number');\n this.pageNumberDisplay.setAttribute('ref', 'lbCurrent');\n this.pageNumberDisplay.setAttribute('data-test-id', 'grid-pagination-current-page');\n this.pageNumberDisplay.setAttribute('aria-label', 'Current page number');\n this.pageNumberDisplay.textContent = '1';\n this.pageOfDisplay = document.createElement('span');\n this.pageOfDisplay.className = 'ag-paging-number';\n this.pageOfDisplay.setAttribute('id', 'ag-pagination-clone-of-page');\n this.pageOfDisplay.setAttribute('data-test-id', 'grid-pagination-of-label');\n this.pageOfDisplay.textContent = 'of';\n this.pageNumberTotalDisplay = document.createElement('span');\n this.pageNumberTotalDisplay.className = 'ag-paging-number';\n this.pageNumberTotalDisplay.setAttribute('id', 'ag-pagination-clone-of-page-number');\n this.pageNumberTotalDisplay.setAttribute('ref', 'lbTotal');\n this.pageNumberTotalDisplay.setAttribute('data-test-id', 'grid-pagination-total-pages');\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'Total number of pages');\n this.pageNumberTotalDisplay.textContent = '1';\n // Next page button\n this.nextPageButton = this.createPaginationButton('btNext', 'ag-paging-button', 'Next Page', false);\n this.nextPageButton.setAttribute('data-test-id', 'grid-pagination-next');\n // Last page button\n this.lastPageButton = this.createPaginationButton('btLast', 'ag-paging-button', 'Last Page', false);\n this.lastPageButton.setAttribute('data-test-id', 'grid-pagination-last');\n // Assemble the description panel\n this.descriptionPanel.appendChild(this.pageStartDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageNumberDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageOfDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageNumberTotalDisplay);\n // Assemble the pagination panel\n this.paginationPanel.appendChild(this.paginationSummaryPanel);\n this.paginationPanel.appendChild(this.firstPageButton);\n this.paginationPanel.appendChild(this.prevPageButton);\n this.paginationPanel.appendChild(this.descriptionPanel);\n this.paginationPanel.appendChild(this.nextPageButton);\n this.paginationPanel.appendChild(this.lastPageButton);\n // Add to main container\n this.element.appendChild(this.paginationPanel);\n // Add event listeners with keyboard support\n this.addPaginationEventListeners();\n }\n addPaginationEventListeners() {\n // Click event listeners\n this.firstPageButton.addEventListener('click', () => this.goToPage('first'));\n this.prevPageButton.addEventListener('click', () => this.goToPage('previous'));\n this.nextPageButton.addEventListener('click', () => this.goToPage('next'));\n this.lastPageButton.addEventListener('click', () => this.goToPage('last'));\n // Keyboard event listeners for accessibility\n this.firstPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('first');\n }\n });\n this.prevPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('previous');\n }\n });\n this.nextPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('next');\n }\n });\n this.lastPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('last');\n }\n });\n }\n createPaginationButton(ref, className, ariaLabel, disabled) {\n const button = document.createElement('div');\n button.setAttribute('ref', ref);\n button.className = className;\n button.setAttribute('role', 'button');\n button.setAttribute('aria-label', ariaLabel);\n button.setAttribute('tabindex', disabled ? '-1' : '0');\n if (disabled) {\n button.setAttribute('aria-disabled', 'true');\n }\n const iconSpan = document.createElement('span');\n iconSpan.className = `ag-icon ag-icon-${ref.substring(2).toLowerCase()}`;\n iconSpan.setAttribute('unselectable', 'on');\n iconSpan.setAttribute('role', 'presentation');\n button.appendChild(iconSpan);\n return button;\n }\n goToPage(page) {\n var _a;\n const apiAny = this.api;\n const methodMap = {\n first: ['paginationGoToFirstPage', 'goToFirstPage'],\n previous: ['paginationGoToPreviousPage', 'goToPreviousPage'],\n next: ['paginationGoToNextPage', 'goToNextPage'],\n last: ['paginationGoToLastPage', 'goToLastPage'],\n };\n const [directMethod, proxyMethod] = methodMap[page];\n if (typeof apiAny[directMethod] === 'function') {\n apiAny[directMethod]();\n }\n else if (typeof ((_a = apiAny.paginationProxy) === null || _a === void 0 ? void 0 : _a[proxyMethod]) === 'function') {\n apiAny.paginationProxy[proxyMethod]();\n }\n }\n updateDisplay() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n // Use compatibility layer for v34 pagination API\n const apiAny = this.api;\n const currentPage = ((_e = (_b = (_a = apiAny.paginationGetCurrentPage) === null || _a === void 0 ? void 0 : _a.call(apiAny)) !== null && _b !== void 0 ? _b : (_d = (_c = apiAny.paginationProxy) === null || _c === void 0 ? void 0 : _c.getCurrentPage) === null || _d === void 0 ? void 0 : _d.call(_c)) !== null && _e !== void 0 ? _e : 0) + 1; // 1-based for display\n const totalPages = (_k = (_g = (_f = apiAny.paginationGetTotalPages) === null || _f === void 0 ? void 0 : _f.call(apiAny)) !== null && _g !== void 0 ? _g : (_j = (_h = apiAny.paginationProxy) === null || _h === void 0 ? void 0 : _h.getTotalPages) === null || _j === void 0 ? void 0 : _j.call(_h)) !== null && _k !== void 0 ? _k : 1;\n const pageSize = (_m = (_l = apiAny.paginationGetPageSize) === null || _l === void 0 ? void 0 : _l.call(apiAny)) !== null && _m !== void 0 ? _m : (_p = (_o = apiAny.paginationProxy) === null || _o === void 0 ? void 0 : _o.getPageSize) === null || _p === void 0 ? void 0 : _p.call(_o);\n const rowCount = (_r = (_q = apiAny.paginationGetRowCount) === null || _q === void 0 ? void 0 : _q.call(apiAny)) !== null && _r !== void 0 ? _r : (_t = (_s = apiAny.paginationProxy) === null || _s === void 0 ? void 0 : _s.getMasterRowCount) === null || _t === void 0 ? void 0 : _t.call(_s);\n // Check if we're in server-side mode and if the total count is uncertain\n // Add null checks for test environment compatibility\n const isServerSide = ((_x = (_w = (_v = (_u = this.api).getModel) === null || _v === void 0 ? void 0 : _v.call(_u)) === null || _w === void 0 ? void 0 : _w.getType) === null || _x === void 0 ? void 0 : _x.call(_w)) === 'serverSide';\n const hasUncertainTotal = isServerSide && apiAny.paginationIsLastPageFound && !apiAny.paginationIsLastPageFound();\n // Update the page numbers\n this.pageNumberDisplay.textContent = currentPage.toString();\n this.pageNumberTotalDisplay.textContent = hasUncertainTotal ? 'more' : totalPages.toString();\n // Update accessibility attributes when showing \"more\"\n if (hasUncertainTotal) {\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'More pages available');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary with more data available');\n }\n else {\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'Total number of pages');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary');\n }\n // Update the row summary panel\n const startRow = (currentPage - 1) * pageSize + 1;\n const endRow = Math.min(currentPage * pageSize, rowCount);\n const totalDisplay = hasUncertainTotal ? 'more' : rowCount.toString();\n this.paginationSummaryPanel.textContent = `${rowCount > 0 ? startRow : 0} to ${endRow} of ${totalDisplay}`;\n // Update button states\n const isFirstPage = currentPage === 1;\n const isLastPage = hasUncertainTotal ? false : currentPage >= totalPages;\n this.updateButtonState(this.firstPageButton, isFirstPage);\n this.updateButtonState(this.prevPageButton, isFirstPage);\n this.updateButtonState(this.nextPageButton, isLastPage);\n // Disable \"last page\" button when we don't know the total (showing \"more\")\n this.updateButtonState(this.lastPageButton, hasUncertainTotal || isLastPage);\n // Update last page button accessibility when uncertain total\n if (hasUncertainTotal) {\n this.lastPageButton.setAttribute('aria-label', 'Last page unavailable - total number of pages unknown');\n this.lastPageButton.setAttribute('title', 'Cannot jump to last page when total is unknown');\n }\n else {\n this.lastPageButton.setAttribute('aria-label', 'Last Page');\n this.lastPageButton.removeAttribute('title');\n }\n }\n updateButtonState(button, disabled) {\n if (disabled) {\n button.classList.add('ag-disabled');\n button.setAttribute('aria-disabled', 'true');\n button.setAttribute('tabindex', '-1');\n }\n else {\n button.classList.remove('ag-disabled');\n button.setAttribute('aria-disabled', 'false');\n button.setAttribute('tabindex', '0');\n }\n }\n destroy() {\n // Remove event listeners\n if (this.api && this.paginationChangedHandler) {\n this.api.removeEventListener('paginationChanged', this.paginationChangedHandler);\n }\n this.api = null;\n this.paginationChangedHandler = null;\n }\n}\n","import { __awaiter } from \"tslib\";\nimport { delay, getCurrentDesignSystemPrefix } from '@genesislcap/foundation-utils';\n// Delay in milliseconds to keep the icon in disabled state for visual feedback\nconst RELOAD_DELAY = 500;\n/**\n * A status bar component that shows a refresh icon to reload the grid data\n * @public\n */\nexport class ReloadStatusBarComponent {\n constructor() {\n this.isReloading = false;\n }\n init(params) {\n this.params = params;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-panel', 'ag-reload-panel');\n this.element.setAttribute('data-test-id', 'grid-reload-panel');\n this.element.setAttribute('role', 'region');\n this.element.setAttribute('aria-label', 'Reload data controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n this.element.style.justifyContent = 'center';\n this.element.style.paddingLeft = 'var(--ag-grid-size)';\n this.element.style.height = 'var(--ag-status-bar-height)';\n // Detect the current design system prefix (rapid or zero)\n this.designSystemPrefix = getCurrentDesignSystemPrefix(this.element, 'zero');\n this.createRefreshIcon();\n this.createProgressRing();\n // Initially show the icon, hide the progress ring\n this.element.appendChild(this.refreshIcon);\n this.element.appendChild(this.progressRing);\n this.progressRing.style.display = 'none';\n }\n createProgressRing() {\n // Create the progress ring with the appropriate design system prefix\n this.progressRing = document.createElement(`${this.designSystemPrefix}-progress-ring`);\n this.progressRing.setAttribute('data-test-id', 'grid-reload-progress');\n this.progressRing.setAttribute('aria-label', 'Reloading data');\n // Set styles for the progress ring\n this.progressRing.style.width = '20px';\n this.progressRing.style.height = '20px';\n this.progressRing.style.margin = '4px';\n this.progressRing.style.display = 'none'; // Hidden by default\n }\n createRefreshIcon() {\n var _a, _b, _c, _d;\n // For design systems that support icons\n if (this.designSystemPrefix === 'zero' || this.designSystemPrefix === 'rapid') {\n this.refreshIcon = document.createElement(`${this.designSystemPrefix}-icon`);\n // Use custom icon if provided, otherwise default to 'refresh'\n const iconName = ((_a = this.params) === null || _a === void 0 ? void 0 : _a.icon) || 'refresh';\n this.refreshIcon.setAttribute('name', iconName);\n this.refreshIcon.setAttribute('aria-label', ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) || 'Reload grid data');\n }\n else {\n // Fallback for systems without icon components\n this.refreshIcon = document.createElement('div');\n this.refreshIcon.textContent = '↻'; // Unicode refresh symbol\n this.refreshIcon.setAttribute('aria-label', ((_c = this.params) === null || _c === void 0 ? void 0 : _c.tooltip) || 'Reload grid data');\n }\n // Add accessibility attributes\n this.refreshIcon.setAttribute('data-test-id', 'grid-reload-button');\n this.refreshIcon.setAttribute('role', 'button');\n this.refreshIcon.setAttribute('tabindex', '0');\n // Set common styles for the icon - make it larger\n this.refreshIcon.style.cursor = 'pointer';\n this.refreshIcon.style.width = '28px';\n this.refreshIcon.style.height = '28px';\n this.refreshIcon.style.display = 'flex';\n this.refreshIcon.style.alignItems = 'center';\n this.refreshIcon.style.justifyContent = 'center';\n this.refreshIcon.style.fontSize = '20px'; // Increase text size for fallback icon\n // Add native tooltip if provided\n if ((_d = this.params) === null || _d === void 0 ? void 0 : _d.tooltip) {\n this.refreshIcon.setAttribute('title', this.params.tooltip);\n }\n // Add hover effect\n this.mouseoverHandler = () => {\n if (!this.isReloading) {\n this.refreshIcon.style.opacity = '0.7';\n }\n };\n this.refreshIcon.addEventListener('mouseover', this.mouseoverHandler);\n this.mouseoutHandler = () => {\n if (!this.isReloading) {\n this.refreshIcon.style.opacity = '1';\n }\n };\n this.refreshIcon.addEventListener('mouseout', this.mouseoutHandler);\n // Add click event listener\n this.clickHandler = () => __awaiter(this, void 0, void 0, function* () {\n if (this.isReloading)\n return; // Prevent multiple clicks\n try {\n this.showReloading(true);\n yield delay(RELOAD_DELAY);\n // Execute the reload action if provided\n if (this.params.onReload) {\n this.params.onReload();\n }\n // Reset the icon state\n this.showReloading(false);\n }\n catch (error) {\n // In case of error, ensure icon state is reset\n this.showReloading(false);\n }\n });\n this.refreshIcon.addEventListener('click', this.clickHandler);\n // Add keyboard support for accessibility\n this.refreshIcon.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n // Trigger the same click handler\n this.clickHandler(new MouseEvent('click'));\n }\n });\n }\n /**\n * Show or hide the reloading state\n */\n showReloading(reloading) {\n this.isReloading = reloading;\n if (reloading) {\n // Hide the icon and show the progress ring\n this.refreshIcon.style.display = 'none';\n this.progressRing.style.display = 'inline-block';\n }\n else {\n // Show the icon and hide the progress ring\n this.refreshIcon.style.display = 'inline-flex';\n this.progressRing.style.display = 'none';\n }\n }\n updateParams(params) {\n var _a, _b;\n const prevParams = this.params;\n this.params = Object.assign(Object.assign({}, this.params), params);\n // If tooltip changed, update the title attribute and aria-label\n if ((prevParams === null || prevParams === void 0 ? void 0 : prevParams.tooltip) !== ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip)) {\n if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) {\n this.refreshIcon.setAttribute('title', this.params.tooltip);\n this.refreshIcon.setAttribute('aria-label', this.params.tooltip);\n }\n else {\n this.refreshIcon.removeAttribute('title');\n this.refreshIcon.setAttribute('aria-label', 'Reload grid data');\n }\n }\n }\n getGui() {\n return this.element;\n }\n destroy() {\n // Clean up event listeners\n if (this.refreshIcon) {\n this.refreshIcon.removeEventListener('mouseover', this.mouseoverHandler);\n this.refreshIcon.removeEventListener('mouseout', this.mouseoutHandler);\n this.refreshIcon.removeEventListener('click', this.clickHandler);\n }\n }\n}\n","/**\n * Row Count Status Bar Component for Server-Side Infinite Scroll\n * Displays current row count information for server-side grids without pagination.\n * For pagination scenarios, use PaginationStatusBarComponent instead.\n * @public\n */\nexport class RowCountStatusBarComponent {\n init(params) {\n this.api = params.api;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-name-value', 'ag-status-panel');\n this.element.setAttribute('data-test-id', 'grid-row-count-panel');\n this.element.setAttribute('role', 'status');\n const labelElement = document.createElement('span');\n labelElement.setAttribute('data-test-id', 'grid-row-count-label');\n labelElement.setAttribute('aria-hidden', 'true');\n labelElement.innerHTML = 'Rows: ';\n this.rowCountDisplay = document.createElement('span');\n this.rowCountDisplay.classList.add('ag-status-name-value-value');\n this.rowCountDisplay.setAttribute('data-test-id', 'grid-row-count-value');\n this.rowCountDisplay.setAttribute('aria-hidden', 'true');\n this.element.appendChild(labelElement);\n this.element.appendChild(this.rowCountDisplay);\n this.updateDisplay();\n this.modelUpdatedHandler = () => {\n this.updateDisplay();\n };\n this.api.addEventListener('modelUpdated', this.modelUpdatedHandler);\n this.api.addEventListener('rowDataUpdated', this.modelUpdatedHandler);\n }\n updateDisplay() {\n var _a, _b, _c;\n if (!this.api || !this.rowCountDisplay)\n return;\n const apiAny = this.api;\n const rowCount = (_c = (_b = (_a = this.api).getDisplayedRowCount) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : 0;\n // Check if total count is uncertain (more data available)\n // Only show uncertain total if we have rows and there might be more\n const hasMoreRows = apiAny.paginationIsLastPageFound !== undefined && !apiAny.paginationIsLastPageFound();\n const hasUncertainTotal = hasMoreRows && rowCount > 0;\n const displayText = hasUncertainTotal ? `${rowCount - 1}+` : rowCount.toString();\n this.rowCountDisplay.textContent = displayText;\n const ariaLabel = hasUncertainTotal\n ? `Row count: ${rowCount} or more rows`\n : `Row count: ${rowCount} rows`;\n this.element.setAttribute('aria-label', ariaLabel);\n }\n getGui() {\n return this.element;\n }\n destroy() {\n if (this.api && this.modelUpdatedHandler) {\n this.api.removeEventListener('modelUpdated', this.modelUpdatedHandler);\n this.api.removeEventListener('rowDataUpdated', this.modelUpdatedHandler);\n }\n this.api = null;\n this.modelUpdatedHandler = null;\n }\n}\n","/**\n * Tooltip for errors that happen while syncing data with server after inline editing\n * @internal\n */\nexport class ErrorTooltip {\n init(params) {\n const eGui = (this.eGui = document.createElement('div'));\n const message = params.value;\n eGui.classList.add('custom-tooltip');\n eGui.style['background-color'] = '#f14376';\n eGui.style['border'] = '1px inside';\n eGui.style['border-color'] = '#2e3339';\n eGui.style['border-radius'] = '4px';\n eGui.style['padding'] = '5px';\n eGui.style['box-shadow'] = '0px 4px 10px 0px rgba(0, 0, 0, 0.25);';\n eGui.innerHTML = `<span style='color: #000000; font-size: 10px'>${message}</span>`;\n }\n getGui() {\n return this.eGui;\n }\n}\n","/**\n * Converts a ColDef to a ColumnState\n * @param colDef - The column definition to convert\n * @returns The corresponding ColumnState\n * @public\n */\nexport function convertColDefToColumnState(colDef) {\n return {\n colId: colDef.field || colDef.colId || '',\n hide: colDef.hide || false,\n width: colDef.width || null,\n pinned: colDef.pinned || null,\n sort: colDef.sort || null,\n sortIndex: colDef.sortIndex || null,\n aggFunc: colDef.aggFunc || null,\n rowGroup: colDef.rowGroup || false,\n rowGroupIndex: colDef.rowGroupIndex || null,\n pivot: colDef.pivot || false,\n pivotIndex: colDef.pivotIndex || null,\n flex: colDef.flex || null,\n };\n}\nconst allowedColumnStateKeys = Object.keys(convertColDefToColumnState({}));\n/**\n * Sanitizes persisted column state by removing unsupported keys.\n * @remarks Some AG Grid versions include legacy properties (e.g. `sortType`) that should not\n * be copied onto ColDefs during state merge.\n * @public\n */\nexport function sanitizeColumnState(columnState) {\n if (!Array.isArray(columnState)) {\n return [];\n }\n return columnState.map((state) => {\n const sanitizedState = {};\n const mutableSanitizedState = sanitizedState;\n for (const key of allowedColumnStateKeys) {\n const value = state[key];\n if (value !== undefined) {\n mutableSanitizedState[key] = value;\n }\n }\n return sanitizedState;\n });\n}\n/**\n * Converts an array of ColDef to an array of ColumnState\n * @param colDefs - The column definitions to convert\n * @returns The corresponding ColumnState array\n * @public\n */\nexport function convertColDefsToColumnStates(colDefs) {\n return colDefs.map(convertColDefToColumnState);\n}\n/**\n * Merges two arrays, one of `ColDef` and one of `ColumnState`, and deduplicates them.\n * @remarks ColDef uses `field` and ColumnState uses `colId` to identify columns.\n * @privateRemarks For restoring saved `ColumnState` but also keep custom renderers and other `ColDef` properties.\n * @public\n */\nexport function mergeAndDedupColDefWithColumnState(colDefs, columnStates) {\n const sanitizedColumnStates = sanitizeColumnState(columnStates);\n const merged = {};\n const deduplicated = [];\n const fieldProp = 'field';\n const colIdProp = 'colId';\n sanitizedColumnStates.forEach((state) => {\n const matchingColDef = colDefs.find((item) => item[fieldProp] === state[colIdProp] ||\n (item[colIdProp] && item[colIdProp] === state[colIdProp]));\n if (matchingColDef) {\n const colDefStateMerge = Object.assign(Object.assign({}, matchingColDef), state);\n merged[matchingColDef[fieldProp]] = colDefStateMerge;\n deduplicated.push(colDefStateMerge);\n }\n });\n colDefs.forEach((def) => {\n if (!merged.hasOwnProperty(def[fieldProp])) {\n const newObj = Object.assign({}, def);\n merged[def[fieldProp]] = newObj;\n deduplicated.push(newObj);\n }\n });\n return deduplicated;\n}\n","/**\n * Extracts a user-friendly error message from a given error detail.\n * @param detail - The error detail, which can be a string, array, or object.\n * @returns A user-friendly error message.\n * @public\n */\nexport const extractErrorMessage = (detail) => {\n if (!detail)\n return '';\n if (typeof detail === 'string')\n return detail;\n if (Array.isArray(detail)) {\n return detail.map(extractErrorMessage).join(', ');\n }\n if (typeof detail === 'object') {\n if ('message' in detail && typeof detail.message === 'string')\n return detail.message;\n if ('TEXT' in detail && typeof detail.TEXT === 'string')\n return detail.TEXT;\n return JSON.stringify(detail);\n }\n return String(detail);\n};\n","import { createLogger } from '@genesislcap/foundation-logger';\n/**\n * Logger for the grid-pro package\n * @public\n */\nexport const logger = createLogger('grid-pro');\n","/**\n * Get the keys of the Metadata indexes map\n * @remarks This function will return a flat string array of all the keys in the \"metadata indexes\" map\n * @param data - the map data to have the keys extracted from\n * @returns the keys of the map\n * @public\n */\nexport function getAvailableIndexes(data) {\n const availabeIndexes = [];\n for (const [key] of data) {\n if (key) {\n availabeIndexes.push(key);\n }\n }\n return availabeIndexes;\n}\n/**\n * Get the values of the Metadata indexes map\n * @remarks This function will return a flat string array of all the values in the \"metadata indexes\" map\n * @param data - the map data to have the values extracted from\n * @returns the values of the map\n * @public\n */\nexport function getAvailableIndexFields(data) {\n const availableIndexFields = [];\n function traverse(items) {\n for (const item of items) {\n if (item !== null) {\n availableIndexFields.push(item);\n }\n }\n }\n for (const [key, value] of data) {\n if (key !== null && value !== null) {\n traverse(value);\n }\n }\n return availableIndexFields;\n}\n","/**\n * Convert string values from 'camelCase' to 'kebab-case'\n * @param value - The value to convert to Kebab case.\n * @returns The Kebab case result.\n * @public\n */\nexport const convertToKebabCase = (value) => value.replace(/([a-z])([A-Z])|\\s+/g, '$1-$2').toLowerCase();\n","import { __classPrivateFieldGet, __classPrivateFieldSet } from \"tslib\";\n/** @internal **/\nconst CLEANUP_TIMEOUT_MS = 10000;\n/**\n * @beta\n * Mixin class to expose `shouldRunConnect` and `shouldRunDisconnect`\n *\n * @remarks These can be used to control what lifecycle functionality is ran when the elements\n * are part of a custom layout. The class itself handles all events\n * @privateRemarks\n * #_ syntax is used for a javascript private method/variable\n * we can't use private/protected from typescript in an anonymous class like this\n */\nexport const LifecycleMixin = (Base) => { var _instances, __container, __latestTokenCode, __hasFirstLoaded, __cleanupTimeout, __shouldForceLifecycle, __blockLifecycleDueToTokenChange, __tryFindContainingLayout, _a; return _a = class extends Base {\n constructor(...args) {\n super(args);\n _instances.add(this);\n /** @internal **/\n __container.set(this, { _key: 'dom' });\n /**\n * If the token changes we suggest blocking the lifecycle methods\n * @internal\n **/\n __latestTokenCode.set(this, '');\n /**\n * Track first loaded to allow us to always run the connect lifecycle on the first load\n * @internal\n **/\n __hasFirstLoaded.set(this, false);\n /**\n * When you request to delete an item from the layout it will be removed from the DOM,\n * but the lifecycle might be blocked due to the same mechanism that we block the other\n * items.\n * This would block cleanup of the item, so we need to force a disconnection after a timeout\n * if this item hasn't reconnected within `CLEANUP_TIMEOUT_MS`.\n * @internal\n **/\n __cleanupTimeout.set(this, void 0);\n /**\n * Used to force lifecycle to run even if the token has changed, such as in instances where\n * we are forcing a disconnection due to this item being remove from the layout.\n * @internal\n **/\n __shouldForceLifecycle.set(this, false);\n }\n /**\n * @privateRemarks\n * Rather than using the basic implementation of cloning we run a copy constructor (deepClone)\n * and then manually clone the children too so they can intercept with an overriden cloneNode\n * if they want to\n */\n cloneNode(deep) {\n const thisClone = this.deepClone();\n if (deep) {\n Array.from(this.childNodes).forEach((child) => {\n thisClone.appendChild(child.cloneNode(true));\n });\n }\n return thisClone;\n }\n /**\n * @privateRemarks\n * Basic implementation of a copy constructor which creates a new element of the same class\n * and copies all attributes over.\n * None-trivial elements will likely want to override this function, call it using super.deepClone(),\n * and then perform extra setup such as copying properties, setting up event listeners\n */\n deepClone() {\n const copy = document.createElement(this.tagName.toLowerCase());\n this.getAttributeNames().forEach((at) => copy.setAttribute(at, this.getAttribute(at)));\n return copy;\n }\n /**\n * @beta\n * @returns - boolean controlling whether to run all disconnectedCallback lifecycle functionality\n */\n get shouldRunDisconnect() {\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'dom') {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'foundation-layout-cache') {\n return false;\n }\n // _key === 'foundation-layout'\n return !(__classPrivateFieldGet(this, __container, \"f\").dragging ||\n !__classPrivateFieldGet(this, __container, \"f\").hasFirstLoaded ||\n __classPrivateFieldGet(this, _instances, \"m\", __blockLifecycleDueToTokenChange).call(this, 'disconnect'));\n }\n /**\n * @beta\n * @returns - boolean controlling whether to run all connectedCallback lifecycle functionality\n * @privateRemarks\n * For now its just the same logic as shouldRunDisconnect\n */\n get shouldRunConnect() {\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'dom') {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'foundation-layout-cache') {\n return false;\n }\n // _key === 'foundation-layout'\n let connectionType = 'reconnect';\n if (__classPrivateFieldGet(this, __hasFirstLoaded, \"f\") === false) {\n __classPrivateFieldSet(this, __hasFirstLoaded, true, \"f\");\n connectionType = 'connect';\n }\n return !(__classPrivateFieldGet(this, __container, \"f\").dragging ||\n !__classPrivateFieldGet(this, __container, \"f\").hasFirstLoaded ||\n __classPrivateFieldGet(this, _instances, \"m\", __blockLifecycleDueToTokenChange).call(this, connectionType));\n }\n connectedCallback() {\n super.connectedCallback();\n if (__classPrivateFieldGet(this, __container, \"f\")._key !== 'foundation-layout') {\n __classPrivateFieldSet(this, __container, __classPrivateFieldGet(this, _instances, \"m\", __tryFindContainingLayout).call(this, this), \"f\");\n }\n }\n },\n __container = new WeakMap(),\n __latestTokenCode = new WeakMap(),\n __hasFirstLoaded = new WeakMap(),\n __cleanupTimeout = new WeakMap(),\n __shouldForceLifecycle = new WeakMap(),\n _instances = new WeakSet(),\n __blockLifecycleDueToTokenChange = function __blockLifecycleDueToTokenChange(lifecycleType) {\n var _b, _c;\n if (__classPrivateFieldGet(this, __container, \"f\")._key !== 'foundation-layout') {\n throw new Error('LifecycleMixin: should not be checking a token change if container not in the layout');\n }\n const tokensDifferent = __classPrivateFieldGet(this, __latestTokenCode, \"f\") !== __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken;\n let result = false;\n if (lifecycleType === 'connect') {\n // We always want to allow a first connection in the layout\n __classPrivateFieldSet(this, __latestTokenCode, (_b = __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken) !== null && _b !== void 0 ? _b : '', \"f\");\n }\n else if (lifecycleType === 'disconnect') {\n result = tokensDifferent;\n __classPrivateFieldSet(this, __cleanupTimeout, setTimeout(() => {\n __classPrivateFieldSet(this, __shouldForceLifecycle, result, \"f\");\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n this.disconnectedCallback();\n }\n }, CLEANUP_TIMEOUT_MS), \"f\");\n }\n else if (lifecycleType === 'reconnect') {\n result = tokensDifferent;\n __classPrivateFieldSet(this, __latestTokenCode, (_c = __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken) !== null && _c !== void 0 ? _c : '', \"f\");\n clearTimeout(__classPrivateFieldGet(this, __cleanupTimeout, \"f\"));\n }\n return result;\n },\n __tryFindContainingLayout = function __tryFindContainingLayout(e) {\n var _b;\n /**\n * This is a special case where the element is part of the layout cache\n * signified by a symbol put on the document cache root\n */\n if (e.getRootNode()[layoutCacheDocument] === true) {\n return { _key: 'foundation-layout-cache' };\n }\n /**\n * If this happens we have found the root of the document\n * without finding a containing FoundationLayout\n * hence, this item is not in a custom layout\n */\n if (e.getRootNode() instanceof Document || !((_b = e.getRootNode()) === null || _b === void 0 ? void 0 : _b.host)) {\n return { _key: 'dom' };\n }\n const shadowHost = e.getRootNode().host;\n if (shadowHost.class === 'FoundationLayoutMain') {\n const layoutHost = shadowHost;\n layoutHost._key = 'foundation-layout';\n return layoutHost;\n }\n return __classPrivateFieldGet(this, _instances, \"m\", __tryFindContainingLayout).call(this, shadowHost);\n },\n _a; };\n/**\n * Stored on the layout's internal cache to signify that the document is not part of the DOM\n * @public\n */\nexport const layoutCacheDocument = Symbol('layout-cache-document');\n","/**\n * Delay for a given number of milliseconds\n * @param ms - The number of milliseconds to delay\n * @returns A promise that resolves after the given number of milliseconds\n * @public\n * @example\n * ```ts\n * await delay(1000);\n * console.log('1 second later');\n * ```\n */\nexport const delay = (ms) => new Promise((resolve) => {\n setTimeout(resolve, ms);\n});\n","import { logger } from './logger';\n/**\n * Inserts a CSS rule into the document by creating a new style element or using an existing one with the specified ID.\n * Returns a function that can be called to remove the rule from the document.\n * @public\n * @param cssRule - The CSS rule to insert.\n * @param styleElementId - The ID of the style element to use or create.\n * @returns A function that removes the rule from the document.\n */\nexport const insertDocumentCSSRule = (cssRule, styleElementId) => {\n var _a;\n let styleElement = document.getElementById(styleElementId);\n if (styleElement) {\n logger.debug(`\n An element with the id of '${styleElementId}' already exists and likely has the css rules applied.\n `);\n return;\n }\n const headElement = (_a = document.head) !== null && _a !== void 0 ? _a : document.getElementsByTagName('head')[0];\n styleElement = document.createElement('style');\n styleElement.id = styleElementId;\n headElement.appendChild(styleElement);\n // Check if the CSS rule contains multiple rules (contains multiple closing braces)\n const ruleCount = (cssRule.match(/}/g) || []).length;\n if (ruleCount > 1) {\n // Multiple rules: use textContent to avoid insertRule limitations\n styleElement.textContent = cssRule;\n return () => {\n if (!styleElement) {\n return;\n }\n headElement.removeChild(styleElement);\n };\n }\n else {\n // Single rule: use insertRule for consistency with existing behavior\n const styleIndex = styleElement.sheet.insertRule(cssRule);\n return () => {\n if (!styleElement) {\n return;\n }\n styleElement.sheet.deleteRule(styleIndex);\n headElement.removeChild(styleElement);\n };\n }\n};\n/**\n * Inserts a CSS link into the document if it doesn't already exist.\n * @public\n * @param href - The URL of the CSS file to insert.\n */\nexport const insertDocumentLink = (href) => {\n const links = document.head.querySelectorAll('link');\n // Already been injected\n for (const index in links)\n if (links[index].href === href)\n return;\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n document.head.appendChild(link);\n};\n/**\n * Recursively gather all elements including those in shadow DOM\n * @public\n */\nexport function getAllElements(root) {\n const elements = [];\n const processedShadowRoots = new Set();\n function collectElements(node) {\n // Get all elements in the current node\n const nodeElements = Array.from(node.querySelectorAll('*'));\n elements.push(...nodeElements);\n // Process shadow roots\n nodeElements.forEach((el) => {\n if (el.shadowRoot && !processedShadowRoots.has(el.shadowRoot)) {\n processedShadowRoots.add(el.shadowRoot);\n collectElements(el.shadowRoot);\n }\n });\n }\n collectElements(root);\n return elements;\n}\n","import { createLogger } from '@genesislcap/foundation-logger';\n/**\n * Logger for the foundation-utils package\n * @public\n */\nexport const logger = createLogger('foundation-utils');\n"],"names":["DateEditor","FoundationElement","init","params","this","value","dateFormat","withTime","inputType","actualWidth","column","getActualWidth","getGui","refresh","getValue","isPopup","changeHandler","event","dateValue","target","control","valueAsNumber","isNaN","undefined","afterGuiAttached","input","focus","isCancelBeforeStart","data","observable","prototype","agDateEditorStyles","css","getDateEditorTemplate","prefix","html","ref","x","format","c","foundationDateEditor","compose","baseName","styles","template","MultiselectEditor","selectedOptions","selectedOptionsCallback","then","split","destroy","detail","agMultiselectEditorStyles","getMultiselectEditorTemplate","designSystem","async","allOptionsResourceName","valueField","labelField","datasourceOptions","foundationMultiselectEditor","NumberEditor","parseFloat","onChange","agNumberEditorStyles","getNumberEditorTemplate","withFormatting","formatOptions","String","placeholder","disabled","foundationNumberEditor","SelectEditor","combobox","open","_a","agSelectEditorStyles","getSelectEditorTemplate","position","allowCustomOptions","values","foundationSelectEditor","StringEditor","agStringEditorStyles","getStringEditorTemplate","foundationStringEditor","ActionRenderer","eGridCell","addEventListener","key","ENTER","clickHandler","isDisabled","error","actionClick","pendingAction","dataTestId","_b","uniqueFieldName","create","DesignToken","actionHeightMultiplier","withDefault","agActionRendererStyles","foundationGridProActionRenderer","actionButtonStyle","appearance","actionName","ActionsMenuRenderer","foundationGridProActionsMenuRenderer","headerName","getActionsMenuDef","actions","overrideDef","customActionsOpenerName","isVertical","buttonAppearance","actionsMenuDef","cellRenderer","actionsMenu","cellRendererParams","buttonText","cellStyle","border","overflow","field","width","Object","assign","BooleanRenderer","colDef","editable","selected","userInputHandler","e","MouseEvent","type","button","KeyboardEvent","api","getEditingCells","find","cell","rowIndex","node","getInstanceId","eventStarted","getColDef","rowPinned","dispatchEvent","valueChanged","setDataValue","eventStopped","oldValue","newValue","getDataTestId","agBooleanRendererStyles","getAgBooleanRendererTemplate","checkboxComponent","foundationAgBooleanRenderer","EditableRenderer","valueFormatted","formatValue","agEditableRendererStyles","getAgEditableRendererTemplate","foundationAgEditableRenderer","agIconRendererStyles","hasIconSrc","iconSrc","length","hasIconName","iconName","getIconRendererTemplate","iconComponent","showHover","_c","when","iconHeight","iconColor","classes","iconSize","variant","secondaryIcon","secondaryIconColor","IconRenderer","foundationIconRenderer","SelectRenderer","constructor","super","arguments","selectionChanged","onSelect","accessor","agSelectRendererStyles","getSelectRendererTemplate","selectComponent","optionComponent","defaultValue","repeat","options","name","parent","tooltip","displayName","foundationAgSelectRenderer","agStatusPillRendererStyles","getStatusPillRendererTemplate","backgroundColor","iconInitial","iconInitialBackgroundColor","textColor","text","dateCountdownUnit","dateCountdown","dateCountdownCompletedMessage","hideWhenCountdownCompleted","dateCountdownVisibleAfter","StatusPillRenderer","foundationStatusPillRenderer","AgTextFieldRenderer","textValue","textChanged","includes","textField","caretPos","selectionStart","stopPropagation","textFieldRendererStyles","getTextFieldRendererTemplate","textComponent","suffix","hideAffixFromScreenReader","maxLength","foundationAgTextFieldRenderer","AgTextRenderer","textRendererStyles","getTextRendererTemplate","foundationAgTextRenderer","setValueWithAccessor","indexOf","accessorPieces","currentObject","fieldPiece","shift","GridProCell","connectedCallback","wrapperGridProColumn","parentElement","renderer","definition","rendererParams","slottedAgRendererChanged","customElement","CellTemplate","slotted","GridProColumn","slottedAgCellChanged","deepClone","copy","keys","forEach","bind","structuredClone","ColumnTemplate","criteriaDelimiter","criteriaJoin","GenesisGridDatasourceElement","isSnapshot","maxRows","MAX_ROWS_250","maxView","MAX_VIEW_1000","movingView","reverse","disablePolling","offset","DEFAULT_REQ_REP_OFFSET","pollingInterval","REQ_REP_POLLING_INTERVAL_MS","pollTriggerEvents","requestAutoSetup","restartOnReconnection","criteriaFromFilters","Map","update","rowId","rowIdAttr","isRequestServer","REQUEST_SERVER_ROW_ID","DATASERVER_ROW_ID","hasDefaultRowId","defaultRowIdByResourceType","criteria","buildCriteria","orderBy","resourceName","viewNumber","fields","request","concat","Array","from","normalisedCriteria","join","setFilter","fieldName","newFilter","set","next","removeFilter","delete","datasource","status","REQUEST_SERVER","datasourceStatusChanged","prev","handleErrors","errors","message","isArray","map","item","TEXT","$emit","clearErrors","connected","initializeDatasource","options_1","fetchMeta","startStream","connect","isConnected","getMetadata","catch","host","errorMessage","errorType","Error","OperationType","attr","mode","attribute","converter","nullableNumberConverter","volatile","GridProBaseDatasource","dataSubWasLoggedOff","keepColDefsOnClearRowData","rowData","transactionData","add","remove","_isDisconnected","subscribeToConnection","isConnected$","connectionSub","unsubscribe","subscribe","isDisconnected","setDisconnected","reloadResourceData","unsubscribeFromConnection","generateColumnDefsFromMetadata","fieldsMetadata","getFilterParamsByFieldType","getFilterByFieldType","flatMap","colDefBase","filterParams","STRING","cellEditor","stringEditor","NUMBER","numberEditor","BOOLEAN","boolean","DATE","valueFormatter","dateEditor","DATETIME","cellEditorParams","ENUM","enumOptions","selectEditor","option","label","warn","filter","handleStreamInserts","insertedRows","addIndex","currentAddIndex","insertData","has","existingData","get","updatedRow","push","handleStreamDeletes","deletedRows","deleteData","rowToBeDeleted","fromEntries","obj","handleStreamUpdates","updatedRows","updateData","rowToBeUpdated","applyAllTransactions","_d","_e","_f","loadingFinished","size","noDataAvailable","applyMappedTransaction","Add","Remove","Update","transaction","operation","mappedTransaction","mapTransaction","dataChanged","changes","applyTransaction","operations","rowDataMapper","loadMore","restart","disconnected","getStatusBarActionConfig","configValue","enabled","config","getDatasourceStatusBarPanels","isServerSide","statusBarConfig","additionalPanels","loadMoreConfig","loadMoreParams","onLoadMore","statusPanel","statusPanelParams","align","pagination","reloadConfig","reload","reloadParams","onReload","icon","baseDatasourceEventNames","GridProClientSideDatasource","errorHandlerDialogStyles","getErrorHandlerDialogTemplate","gridErrorItems","dialogTag","buttonTag","hideDatasourceError","gridProDatasource","toLowerCase","getServerSideFilterParamsByFieldType","buttons","closeOnApply","closeOnClear","maxNumConditions","filterOptions","displayKey","predicate","_","cellValue","numberOfInputs","comparator","filterLocalDateAtMidnight","cellValueTime","Date","setHours","filterValueTime","getTime","browserDatePicker","BaseServerSideDatasource","serverRowsCount","clientRowsCount","moreRows","calculatedRowsCount","currentSequenceId","reloadResourceDataFunc","errorHandlerFunc","onNoDataAvailableFunc","resourceParams","originalCriteriaMatch","getResourceParam","resourceIndexes","resourceColDefs","zeroBasedViewNumber","pagingMode","criteriaOnlyRequest","DETAILS","setResourceParam","getRows","setupFiltering","filterModelBeingApplied","filterModel","filtersAreBeingApplied","filtersAreGettingCleaned","filterModelBeingAppliedDiffersFromCurrent","JSON","stringify","currentFilterModel","refreshDatasource","buildCriteriaMatchFromFilters","setupFilteringAndSorting","setupSorting","sourceRef","lastSuccessRowData","updateResourceParams","getOrderByAndToBeSortedColIds","searchValue","entries","searchIndex","findIndex","toBeSorted","splice","criteriaMatch","filters","getFiltersByType","k","model","selectedValues","colMeta","o","NAME","allValues","VALID_VALUES","every","v","orConditions","val","safeVal","replace","valueTwo","filterTo","dateFrom","dateTo","now","todayStr","getFullYear","getMonth","toString","padStart","getDate","filterType","getPageNumber","start","recordsPerPage","totalRecords","Math","floor","currentPageIndex","ceil","getCorrectRowCount","currentLastRowNumber","endRow","defaultCount","min","rowCount","isNotFirstViewNumber","completeEmptyResult","successRowData","success","notifyNoDataAvailableIfEmpty","rowDataEmpty","startRow","notifyNoDataAvailable","call","getEffectivePagingMode","DataserverServerSideDatasource","createDataserverStreamFunc","_super","dataserverStreamSubscription","isNewPageSize","dataserverStream","Number","VIEW_NUMBER","getMoreRows","applyResult","dataserverResult","DOM","queueUpdate","CRITERIA_MATCH","updatedInfo","snapshot","MAX_ROWS","MAX_VIEW","ROW","ROWS_COUNT","applyServerSideData","result","messageType","MESSAGE_TYPE","LOGOFF_ACK","MSG_NACK","fail","MORE_ROWS","nextMessage","dataServerResultFilter","d","handleCurrentStreamLoad","SEQUENCE_ID","SOURCE_REF","toBeAppliedSortModel","sortModel","currentSortModel","ORDER_BY","REVERSE","coldIdBeingSorted","colId","sortTypeBeingApplied","sort","orderByAndToBeSortedColIds","availableIndexes","availableIndexFields","debug","rows","inserts","ReqRepServerSideDatasource","discoveredTotalRowCount","currentNextOffset","createReqRepRequestFunc","createReqRepStreamFunc","onPollingUpdate","onPollingUpdateFunc","resetPreviousPollResult","resetPreviousPollResultFunc","usePolling","debouncedCreateStream","createPollingStream","OFFSET","effectivePagingMode","updatePaginationParams","requestParams","buildRequestDetails","requestResult","isLastView","determineIsLastView","schedulePollingStream","hasMoreRowsInResult","NEXT_VIEW","preCheckRequestParams","moreRowsPreCheck","REPLY","NEXT_OFFSET","destroyPollingStream","currentBatchSize","reply","insertDataRowId","noRowIdMessage","logger","tempId","uuid","createId","cancel","currentStreamParams","stream","reqRepPollingStream","reqRepPollingDatasource","reqRepPollingSubscription","receivedMessage","ERROR","baseDetails","GridProServerSideDatasource","liveUpdates","sortIndicatorCSSDestroy","previousPollResult","hasCapturedFirstPollResult","resourceNameChanged","criteriaChanged","oldCriteria","newCriteria","criteriaIsNotDuplicate","normaliseCriteria","ssrmDatasource","shouldRunConnect","disconnectedCallback","shouldRunDisconnect","deferredGridOptions","deferredColumnStates","liveUpdatesStream","cacheFilterConfig","clearRowData","refreshServerSide","purge","setServerSideDatasource","loadingStarted","applyServerSideSortIndicatorStyling","removeServerSideSortIndicatorStyling","addGridCssClass","className","removeGridCssClass","gridOptions","getRowId","getRowStyle","ROW_REF","color","cacheBlockSize","defaultColDef","resizable","sortable","unSortIcon","rowBuffer","rowModelType","suppressServerSideInfiniteScroll","suppressMultiSort","onFilterChanged","onSortChanged","onPaginationChanged","initialize","ready","dataInit","indexes","getResourceIndexes","availableSortableFields","fieldMetadata","originalFieldDef","agColumnDefs","getAgColumnDefs","schemaUpdated","schema","metadata","createReqRepRequest","createReqRepStream","applyReqRepPollingUpdate","requestOnlyParams","createDataserverStream","dataserverOnlyParams","filtersRestored","once","newPage","pollingDatasource","withColumnDefs","dataCleared","includeSchema","applyServerSideTransaction","avaialbleIndexes","resourceIndexesMap","allSortableFields","Set","index","FIELDS","fieldsFromIndexes","additionalFields","existingParams","_g","_h","currentOffset","baseMaxRows","totalRowsToFetch","clear","polledData","startsWith","row","currentPollMap","rowsToUpdate","rowsToInsert","rowsToDelete","previousRow","serializer","serialize","added","updated","removed","totalInPoll","streamOnMessage","QUERY_UPDATE","updates","deletes","netRowChange","clientNetRowChange","onError","colDefsFromGenesisData","availableCriteriaFields","agHeadCSS","agGridAlpineFontFace","agGridBalhamFontFace","agGridMaterialFontFace","agThemeFontFaceMap","alpine","alpineDark","balham","balhamDark","material","defaultAgGridFontFace","agGridCSS","agThemeAlpineNofontsCSS","agThemeBalhamNofontsCSS","agThemeMaterialNofontsCSS","agExternalStockStyles","datasourceEventNames","dataLoaded","moreDataAvailable","sizeChanged","gridProGenesisDatasourceEventNames","moreRowsChanged","getClientSideFilterParamsByFieldType","GridProGenesisDatasource","cachedRowArray","requiresFullRowDataAndColDefs","_lastMoreRows","_isMoreRowsResult","_nextOffset","_loadMoreCount","initialized","requestChanged","oldRequest","newRequest","requestIsNotDuplicate","colDefsDeepClone","columnDefinition","definitionCopy","fieldKey","loadResourceData","updateSub","pipe","skip","debounceTime","tap","f","dataSub","_sourceRef","BehaviorSubject","deinit","reset","refreshRows","updateCachedRowArray","emitDataLoaded","setRowData","emitDataChanged","isInitialLoad","updateLoadMoreCount","withFullInit","requiresMetadataFetch","handleSnapshot","catchError","err","hasRowsCountInResult","hasNextOffsetInResult","resourceType","updateLoadMoreStatus","handleStreamResult","moreRowsDetail","applyRequestServerData","applyDataserverData","hasMoreData","requestServerResult","previousSize","requestServerData","noRowIdError","handleSizeChanged","match","dataServerResult","oldSize","newSize","DATASERVER","getEnumFilterParams","getColumnType","metadataType","dateValueFormatter","dateTimeValueFormatter","formatDateExtra","epoch","toISOString","slice","DEBOUNCED_RESIZE_TIME","gridProEventNames","datasourceErrorClose","gridProErrorNames","unknown","AG_PROPERTIES","AG_NUMBER_PROPERTIES","AG_BOOLEAN_PROPERTIES","AG_NUMBER_PROPERTIES_SET","AG_BOOLEAN_PROPERTIES_SET","AG_PROPERTIES_SET","toBoolean","toUpperCase","copyAttributesToGridOptions","component","pGridOptions","coercedValue","toNumber","G","registerModules","GridPro","rowDataChanged","initialised","gridApi","themeChanged","classNames","destroyFontFace","insertFontFace","getfilterModel","persistFilterModelKey","_filterConfig","statePersistence","getFilterModel","setFilterModel","saveFilterModel","cachedTotalColumnWidth","columnCount","disposed","debouncedSaveColumnState","saveColumnState","debouncedSaveFilterModel","autoCellRendererByType","onlyTemplateColDefs","gridAutosizingEnabled","sizeColumnsToContent","sizeColumnsToFit","asyncAdd","asyncRemove","asyncUpdate","enableCellFlashing","enabledRowFlashing","enableRowFlashing","defaultColumnConfig","gridFontFace","columnComponentName","theme","themeMode","withStatusBar","rehydrationAttempted","eventHandlers","gridEventsQueue","registeredGridEvents","gridEventListeners","boundGlobalEventListener","globalEventListener","agAttributes","agPropertiesMap","reduce","property","hideDataSourceError","handleBaseDatasourceError","handleInitialize","handleDataLoaded","handleDataChanged","handleSchemaUpdated","handleDataCleared","handleLoadingStarted","handleLoadingFinished","handleNoDataAvailable","handleFiltersRestored","handleMoreDataAvailable","handleDatasourceError","handleDatasourceDestroy","handleRefreshServerSide","handleSetServerSideDatasource","handleAddGridCssClass","handleRemoveGridCssClass","handleApplyServerSideTransaction","eventType","listener","PUBLIC_EVENTS","addGridEventListener","handleError","gridProError","removeAttribute","visibilityObserverCleanup","gridVisible","debouncedColumnAutosize","eventName","handler","defineProperty","agAttributeChangedCallback","enumerable","configurable","paginationPageSize","DEFAULT_PAGINATION_PAGE_SIZE","removeEventListener","performDisconnectCleanup","queueMicrotask","debounced","clearTimeout","clearLocalGridOptions","destroyGridInstance","invalidateColumnWidthCache","agGrid","gridSlot","replaceChildren","columnApi","columnDefinitions","getColumnDefs","columnState","getColumnState","agGridOptions","columnDefs","initGrid","applyTransactionAsync","flashAddedCells","rowNodes","flashCells","preSetColumnDefs","colDefs","getColumnDef","colDefsMergedWithTemplateDefs","mergeAllColumnDefsAndStates","col","rowGroup","pivot","setColumnDefs","flushAsyncTransactions","refreshCells","force","showLoadingOverlay","hideOverlay","showNoRowsOverlay","restoreCachedFilterConfig","statusBar","getStatusPanel","updateParams","setAttribute","gridElement","classList","callback","applyServerSideTransactionAsync","combineAllGridComponents","gridOptionsComponents","defaultFoundationAgComponents","action","statusPill","select","multiselectEditor","labelValue","gridComponents","statePersistanceEnabled","persistColumnStateKey","getSelectedRows","rowSelectionMode","rowSelection","getCellRanges","getCellRangeRowData","enableRangeSelection","focusedCell","getFocusedCell","rowNode","getDisplayedRowAtIndex","cellRanges","range","startIndex","endIndex","some","existing","hasSelectedRows","updateLabelValueStatusBar","setTimeout","removeConfigWidthsToAutosize","colState","allHeadersHidden","hide","getColumn","Boolean","getSavedColumnState","deleteColumnState","resetToDefault","applyColumnState","state","applyOrder","resetColumnState","handleColumnSizing","restoreColumnState","sanitizedColState","gridParams","querySelector","gridOnChangeCallback","attributes","attrName","components","onGridReady","onFirstDataRendered","rest","gridOptionsConfig","derivedOptions","enableCellChangeFlash","suppressDragLeaveHidesColumns","eventsAndCallbacks","EVENT_GRID_READY","gridId","id","onColumnPinned","onColumnResized","onColumnMoved","onDisplayedColumnsChanged","filterChangedEvent","onGridSizeChanged","hasGetRowId","setupPaginationAndStatusBar","setLocalGridOptions","firstChild","removeChild","applyTemplateDefinitions","deferredColumnDefsOrState","deprecated","columnDefs_1","columnDefinitionsFromMetadata","colDefFromMetadata","headerCaseType","changeCaseByType","templateColumnDefs","querySelectorAll","templateColumn","columnDef","metadataValues","cellRendererSelector","tooltipComponent","tooltipValueGetter","cellClassRules","metadataColumnDef","templateColumnKeys","colDefsToReturn","g","savedColumnState","panelExists","statusPanelType","panels","panel","addRowCountPanel","statusPanels","isPaginationEnabled","rowCountStatusPanel","addMaxRowsPanel","addAggregationPanel","aggregation","addDatasourcePanels","newDatasourcePanels","addPaginationPanel","suppressScrollOnNewData","suppressPaginationPanel","newUserDefinedPanels","handleBothSizingModes","handleIndividualSizingModes","calculateTotalColumnWidth","getGridWidth","autoSizeAllColumns","allColumns","getAllGridColumns","currentColumnCount","sum","gridWidth","clientWidth","observedAttributes","lowerCasedPropertyNames","kebabCasePropertyNames","attName","gridPropertyName","changeObject","currentValue","processOnChange","eventLowerCase","browserEvent","Event","agGridDetails","callbackMethod","fontFaceRule","newDestroy","fontFaceDestroy","foundationGridProShadowOptions","defaultGridProConfig","shadowOptions","foundationGridPro","foundationGridProStyles","getGridProTemplate","customErrorHandlerTemplate","gridProTemplate","AgGridCSSVars","AgGridTheme","agThemeTokenMapClassname","themeName","agThemeFontsId","agThemeTokenMapCSS","tokenMap","CSSVarsTokenMapper","GridProRendererTypes","GridProStatusBarTypes","GRID_READY_EVENT","EDITED_COLUMN_FIELD","ERROR_COLUMN_FIELD","defaultGridOptionsConfig","GridOptionsConfig","DI","createInterface","instance","GridProCaseType","DEFAULT_STATUS_BAR_CONFIG","LocalStorageStatePersistence","localStorageGridOptions","session","getLocalStorageItem","allGridOptions","parse","existingOptions","setLocalStorageItem","StatePersistence","singleton","LabelValueStatusBarComponent","element","document","createElement","currentParams","updateDisplay","style","display","labelElement","appendChild","innerHTML","valueElement","LoadMoreStatusBarComponent","buttonLabel","isLoading","isLeftAligned","alignItems","gridOptionsService","justifyContent","paddingLeft","paddingRight","height","designSystemPrefix","createProgressRing","createLoadMoreButton","updateButtonVisibility","loadMoreButton","progressRing","margin","textContent","minWidth","textAlign","lineHeight","updateAriaLabel","showLoading","ariaLabel","loading","prevParams","PaginationStatusBarComponent","createPaginationPanel","paginationChangedHandler","paginationPanel","paginationSummaryPanel","firstPageButton","createPaginationButton","prevPageButton","descriptionPanel","pageStartDisplay","pageNumberDisplay","pageOfDisplay","pageNumberTotalDisplay","nextPageButton","lastPageButton","createTextNode","addPaginationEventListeners","goToPage","preventDefault","iconSpan","substring","page","apiAny","directMethod","proxyMethod","first","previous","last","paginationProxy","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","currentPage","paginationGetCurrentPage","getCurrentPage","totalPages","paginationGetTotalPages","getTotalPages","pageSize","paginationGetPageSize","getPageSize","paginationGetRowCount","getMasterRowCount","hasUncertainTotal","getModel","getType","paginationIsLastPageFound","totalDisplay","isFirstPage","isLastPage","updateButtonState","ReloadStatusBarComponent","isReloading","createRefreshIcon","refreshIcon","cursor","fontSize","mouseoverHandler","opacity","mouseoutHandler","showReloading","reloading","RowCountStatusBarComponent","rowCountDisplay","modelUpdatedHandler","getDisplayedRowCount","displayText","ErrorTooltip","eGui","convertColDefToColumnState","pinned","sortIndex","aggFunc","rowGroupIndex","pivotIndex","flex","allowedColumnStateKeys","sanitizeColumnState","sanitizedState","mutableSanitizedState","convertColDefsToColumnStates","mergeAndDedupColDefWithColumnState","columnStates","sanitizedColumnStates","merged","deduplicated","fieldProp","colIdProp","matchingColDef","colDefStateMerge","def","hasOwnProperty","newObj","extractErrorMessage","createLogger","getAvailableIndexes","availabeIndexes","getAvailableIndexFields","traverse","items","convertToKebabCase","LifecycleMixin","Base","_instances","__container","__latestTokenCode","__hasFirstLoaded","__cleanupTimeout","__shouldForceLifecycle","__blockLifecycleDueToTokenChange","__tryFindContainingLayout","args","_key","cloneNode","deep","thisClone","childNodes","child","tagName","getAttributeNames","at","getAttribute","dragging","hasFirstLoaded","connectionType","WeakMap","WeakSet","lifecycleType","tokensDifferent","lifecycleUpdateToken","getRootNode","layoutCacheDocument","Document","shadowHost","class","layoutHost","Symbol","delay","ms","Promise","resolve","insertDocumentCSSRule","cssRule","styleElementId","styleElement","getElementById","headElement","head","getElementsByTagName","styleIndex","sheet","insertRule","deleteRule","getAllElements","root","elements","processedShadowRoots","collectElements","nodeElements","el","shadowRoot"],"sourceRoot":""}
|