@deephaven/embed-grid 0.66.1-beta.1 → 0.66.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/build/assets/{App-d57be469.js → App-57513efd.js} +2 -2
  2. package/build/assets/{App-d57be469.js.map → App-57513efd.js.map} +1 -1
  3. package/build/assets/{Chart-37e5ba24.js → Chart-a170fc03.js} +2 -2
  4. package/build/assets/{Chart-37e5ba24.js.map → Chart-a170fc03.js.map} +1 -1
  5. package/build/assets/{IrisGrid-f4e72e6d.js → IrisGrid-a71cfc81.js} +2 -2
  6. package/build/assets/{IrisGrid-f4e72e6d.js.map → IrisGrid-a71cfc81.js.map} +1 -1
  7. package/build/assets/{IrisGridThemeProvider-74b8bf9e.js → IrisGridThemeProvider-4ee91373.js} +2 -2
  8. package/build/assets/{IrisGridThemeProvider-74b8bf9e.js.map → IrisGridThemeProvider-4ee91373.js.map} +1 -1
  9. package/build/assets/{MarkdownEditor-18cd31e5.js → MarkdownEditor-680b765c.js} +2 -2
  10. package/build/assets/{MarkdownEditor-18cd31e5.js.map → MarkdownEditor-680b765c.js.map} +1 -1
  11. package/build/assets/{MarkdownNotebook-637ac09a.js → MarkdownNotebook-87a184c6.js} +2 -2
  12. package/build/assets/{MarkdownNotebook-637ac09a.js.map → MarkdownNotebook-87a184c6.js.map} +1 -1
  13. package/build/assets/{index-738201ee.css → index-1008ce1f.css} +1 -1
  14. package/build/assets/{index-6d60ebb2.js → index-a561da3e.js} +2 -2
  15. package/build/assets/{index-6d60ebb2.js.map → index-a561da3e.js.map} +1 -1
  16. package/build/assets/{index-f8b43579.js → index-de1d8a41.js} +16 -16
  17. package/build/assets/index-de1d8a41.js.map +1 -0
  18. package/build/assets/{useUser-4dd7df18.js → useUser-411aa0b5.js} +2 -2
  19. package/build/assets/{useUser-4dd7df18.js.map → useUser-411aa0b5.js.map} +1 -1
  20. package/build/index.html +2 -2
  21. package/package.json +14 -14
  22. package/build/assets/index-f8b43579.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"mappings":"+PAAU,IAACA,EAAc,OAAO,OAAO,EAAE,EAC9BC,GAAY,IAAI,IAChBC,GAAiB,OAKrB,SAASC,IAAyB,CACvC,QAASC,EAAO,UAAU,OAAQC,EAAe,IAAI,MAAMD,CAAI,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IACvFD,EAAaC,CAAI,EAAI,UAAUA,CAAI,EAErC,OAAOD,EAAa,OAAOE,GAAKA,GAAK,IAAI,CAC3C,CCZA,SAASC,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CACzX,MAAMI,WAA6B,KAAM,CACvC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClBX,GAAgB,KAAM,aAAc,EAAI,CACzC,CACH,CACA,MAAAY,GAAeD,GCFR,SAASE,GAAeC,EAAU,CACvC,IAAIC,EAAyB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC7FC,EAAcC,GAAkBH,EAAUC,CAAsB,EACpEC,EAAY,QAAQE,GAAc,CAEhCJ,EAASI,CAAU,EAAIJ,EAASI,CAAU,EAAE,KAAKJ,CAAQ,CAC7D,CAAG,CACH,CAUO,SAASG,GAAkBH,EAAUC,EAAwB,CAOlE,QANIC,EAAc,IAAI,IAClBG,EAAUL,EAIVM,EAAQ,EACLD,GAAW,MAAQA,IAAY,OAAO,YAAcC,GAAS,GAAKL,IAAyB,CAEhG,QAASM,KAAQ,OAAO,oBAAoBF,CAAO,EAC7CE,IAAS,eAAiB,OAAOF,EAAQE,CAAI,GAAM,YACrDL,EAAY,IAAIK,CAAI,EAGxBF,EAAU,OAAO,eAAeA,CAAO,EACvCC,GAAS,CACV,CACD,MAAO,CAAC,GAAGJ,EAAY,KAAI,CAAE,CAC/B,CCtCO,MAAMM,UAA6B,WAAY,CAQpD,YAAYC,EAASC,EAAe,CAClC,MAAMD,EAASC,CAAa,CAC7B,CACH,CCfA,SAASxB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CACzX,MAAMkB,WAAqB,KAAM,CAC/B,aAAc,CACZ,MAAM,GAAG,SAAS,EAClBzB,GAAgB,KAAM,YAAa,EAAI,CACxC,CACH,CACA,MAAA0B,GAAeD,GCPR,MAAME,EAAa,CAOxB,OAAO,eAAeC,EAASC,EAAS,CACtC,IAAIC,EAAc,GACdC,EACAC,EACAC,EAAiB,IAAI,QAAQ,CAACC,EAASC,IAAW,CACpDH,EAAWG,EACX,QAAQ,QAAQP,CAAO,EAAE,KAAKQ,GAAO,CAC/BN,EACED,GACFA,EAAQO,CAAG,GAGbL,EAAWK,EACXF,EAAQE,CAAG,EAEd,GAAE,MAAMC,GAASF,EAAOE,CAAK,CAAC,CACrC,CAAK,EAGD,OAAAJ,EAAe,OAAS,IAAM,CAC5BH,EAAc,GACdE,EAAS,IAAIrB,EAAsB,EAC/BoB,GAAY,MAAQF,GACtBA,EAAQE,CAAQ,CAExB,EACWE,CACR,CACD,OAAO,WAAWI,EAAO,CACvB,OAAOA,aAAiB1B,EACzB,CACD,OAAO,WAAW0B,EAAO,CACvB,OAAOA,aAAiBZ,EACzB,CAOD,OAAO,YAAYa,EAAWC,EAAU,CACtC,OAAO,IAAI,QAAQ,CAACL,EAASC,IAAW,CACtC,WAAW,IAAM,CACf,GAAI,CACFD,EAAQK,EAAQ,CAAE,CACnB,OAAQC,EAAK,CACZL,EAAOK,CAAG,CACX,CACF,EAAEF,CAAS,CAClB,CAAK,CACF,CACH,CC5DA,MAAMG,EAAU,CAUd,OAAO,KAAKC,EAAO,CACjB,IAAIC,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,MACtF,GAAID,GAAS,MAAQA,EAAM,SAAW,EACpC,MAAO,GAET,GAAIA,EAAM,SAAW,EACnB,OAAOA,EAAM,CAAC,EAEhB,GAAIA,EAAM,SAAW,EACnB,MAAO,GAAG,OAAOA,EAAM,CAAC,EAAG,GAAG,EAAE,OAAOC,EAAa,GAAG,EAAE,OAAOD,EAAM,CAAC,CAAC,EAE1E,IAAIE,EAAWF,EAAM,MAAM,EAAGA,EAAM,OAAS,CAAC,EAAE,KAAK,IAAI,EACrDG,EAAWH,EAAMA,EAAM,OAAS,CAAC,EACrC,MAAO,GAAG,OAAOE,EAAU,IAAI,EAAE,OAAOD,EAAa,GAAG,EAAE,OAAOE,CAAQ,CAC1E,CAOD,OAAO,QAAQC,EAAM,CACnB,IAAIC,EAAgB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACxF,GAAID,GAAQ,KAAM,CAChB,GAAIC,EACF,MAAO,GAET,MAAM,IAAI,MAAM,4CAA4C,CAC7D,CACD,OAAOD,EAAK,aACb,CAQD,OAAO,KAAKE,EAAGC,EAAG,CAChB,IAAIC,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACtF,OAAIF,EAAIC,EACCC,EAAc,GAAK,EAExBF,EAAIC,EACCC,EAAc,EAAI,GAEpB,CACR,CACH,CACA,MAAAC,GAAeV,GCnDR,SAASW,GAAkBC,EAAS,CACzC,IAAIC,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,iEAC9EnD,EAAQoD,cAAWF,CAAO,EAC9B,GAAIlD,GAAS,KACX,MAAM,IAAI,MAAMmD,CAAO,EAEzB,OAAOnD,CACT,CCfA,SAASH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAClX,SAASiD,GAAUrD,EAAO,CAC/B,OAAOA,EAAM,OAAS,MACxB,CACA,MAAMsD,EAAmB,CACvB,OAAO,mBAAoB,CACzBA,GAAmB,gBAAkB,EACtC,CACD,OAAO,kBAAmB,CACxBA,GAAmB,gBAAkB,EACtC,CACD,OAAO,qBAAqB,EAAG,CAC7B,OAAO,MAAM,QAAQ,EAAE,cAAc,CACtC,CAOD,OAAO,eAAeT,EAAGC,EAAG,CAC1B,GAAID,EAAE,QAAUC,EAAE,MAAO,CACvB,IAAIS,EAAUC,EACd,QAASD,EAAWV,EAAE,SAAW,MAAQU,IAAa,OAASA,EAAW,KAAOC,EAAWV,EAAE,SAAW,MAAQU,IAAa,OAASA,EAAW,GAAK,EAAI,EAC5J,CACD,GAAIX,EAAE,QAAUC,EAAE,MAAO,CACvB,IAAIW,EAAUC,EACd,QAASD,EAAWZ,EAAE,SAAW,MAAQY,IAAa,OAASA,EAAW,KAAOC,EAAWZ,EAAE,SAAW,MAAQY,IAAa,OAASA,EAAW,GAAK,EAAI,EAC5J,CACD,GAAIb,EAAE,QAAUC,EAAE,MAAO,CACvB,IAAIa,EAAUC,EACd,QAASD,EAAWd,EAAE,SAAW,MAAQc,IAAa,OAASA,EAAW,MAAQC,EAAWd,EAAE,SAAW,MAAQc,IAAa,OAASA,EAAW,IAAM,EAAI,EAC9J,CACD,OAAIf,IAAMC,EACDD,EAAIC,EAAI,EAAI,GAEd,CACR,CAMD,OAAO,YAAYe,EAAS,CAC1B,GAAIA,GAAW,MAAQ,CAAC,MAAM,QAAQA,CAAO,EAC3C,MAAO,GAET,IAAIC,EAAgBD,EAAQ,QAC5B,OAAAC,EAAc,KAAKR,GAAmB,cAAc,EAC7CQ,CACR,CACD,OAAO,eAAgB,CACrB,GAAI,CACF,SAAAC,CACN,EAAQ,OAAO,UACX,OAAOA,EAAS,WAAW,KAAK,CACjC,CAKD,OAAO,gBAAiB,CACtB,OAAIT,GAAmB,gBACd,UAEF,SACR,CAMD,OAAO,kBAAkBU,EAAO,CAC9B,IAAIC,EAAcX,GAAmB,iBACrC,OAAOU,EAAMC,CAAW,CACzB,CAUD,OAAO,aAAaC,EAAc,CAChC,IAAIC,EAAkB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACtFC,EAAY,GACZP,EAAUK,EACT,MAAM,QAAQL,CAAO,IACxBA,EAAU,CAACA,CAAO,GAEpB,QAAS,EAAI,EAAG,EAAIA,EAAQ,OAAQ,GAAK,EAAG,CAC1C,IAAIQ,EAASR,EAAQ,CAAC,EAClBS,EAAe,OACf,OAAOD,GAAW,WACpBC,EAAeD,EAAM,EAErBC,EAAeD,EAEbC,GAAgB,OACdA,aAAwB,QACtBH,GACFC,EAAU,KAAKE,CAAY,EAEpB,MAAM,QAAQA,CAAY,EACnCF,EAAYA,EAAU,OAAOE,CAAY,EAEzCF,EAAU,KAAKE,CAAY,EAGhC,CACD,OAAAF,EAAYA,EAAU,OAAOC,GAAUA,EAAO,QAAU,QAAaA,EAAO,MAAQ,MAAQA,EAAO,WAAW,EACvGD,CACR,CAQD,OAAO,gBAAgBG,EAAYC,EAAOJ,EAAW,CACnD,IAAIK,EAAaF,EACbE,EAAa,GAAKD,EAAQ,IAE5BC,EAAaL,EAAU,QAGzB,QAAS,EAAI,EAAG,EAAIA,EAAU,OAAS,EAAG,GAAK,EAAG,CAChD,IAAIM,GAAaD,EAAaD,EAAQ,EAAIJ,EAAU,QAAUA,EAAU,OACpEO,EAAOP,EAAUM,CAAS,EAC9B,GAAI,EAAEC,aAAgB,UAAYA,EAAK,WAAa,GAClD,OAAOD,CAEV,CACD,OAAOH,CACR,CACH,CACA1E,GAAgByD,GAAoB,kBAAmB,EAAK,EAC5D,MAAAsB,GAAetB,GCxIf,IAAIuB,GAA+BC,GAAM,WAAW,CAACC,EAAOC,IAAQ,CAClE,IAAIC,EAAuBC,EAC3B,SAASC,EAAoBC,EAAG,CAC9B,GAAI,CACF,SAAAC,EACA,gBAAAC,CACD,EAAGP,EACJO,EAAgBD,EAAUD,CAAC,CAC5B,CACD,SAASG,EAAwBH,EAAG,CAClC,GAAI,CACF,SAAAC,EACA,oBAAAG,CACD,EAAGT,EACJS,EAAoBH,EAAUD,CAAC,CAChC,CACD,SAASK,EAA0BL,EAAG,CACpC,GAAI,CACF,SAAAC,EACA,sBAAAK,CACD,EAAGX,EACJW,EAAsBL,EAAUD,CAAC,CAClC,CACD,SAASO,EAAwBC,EAASC,EAAaC,EAAiB,CAEtE,GAAI,OAAOF,EAAQ,MAAS,SAC1B,OAAOA,EAET,GAAI,CACF,UAAAG,EACA,SAAAV,EACA,mBAAAW,EACA,gBAAAC,EACA,cAAeC,CAChB,EAAGnB,EACAoB,EAAiB,CACnB,SAAAd,EACA,UAAAU,EACA,mBAAAC,EACA,gBAAAC,EACA,YAAAJ,EACA,gBAAAC,EACA,cAAeI,CACrB,EACI,OAAoBpB,GAAM,aAAac,EAAS,CAC9C,eAAAO,CACN,CAAK,CACF,CACD,GAAI,CACF,SAAAC,EACA,SAAAf,EACA,mBAAAW,EAAqB,GACrB,gBAAAC,EAAkB,GAClB,cAAeC,CAChB,EAAGnB,EACAe,GAAmBb,EAAwBI,EAAS,gBAAkB,MAAQJ,IAA0B,OAASA,GAAyBC,EAAqBG,EAAS,YAAc,MAAQH,IAAuB,OAAS,OAASA,EAAmB,iBAC1PmB,EAAO,KACX,GAAIhB,EAAS,KAAM,CACjB,IAAIiB,EAAejB,EAAS,KAC5B,GAAkBP,GAAM,eAAewB,CAAY,EACjDD,EAAOC,MACF,CACL,IAAIC,EACAlB,EAAS,WAAa,OAASA,EAAS,WAAa,QAAa,CAACA,EAAS,YAC9EkB,EAAQ,CACN,MAAOlB,EAAS,SAC1B,GAEMgB,EAAoBG,EAAI,IAACC,GAAiB,CACxC,KAAMH,EACN,MAAOC,CACf,CAAO,CACF,CACF,CACD,IAAIG,EAAmB,KACnBC,EAAkB,EAAQP,EAC1Bf,EAAS,UACXqB,EAAgCF,EAAI,IAACC,GAAiB,CACpD,KAAMG,EACZ,CAAK,GAEH,IAAIC,EAAU,KACd,GAAIxB,EAAS,YACXwB,EAAuBL,EAAI,IAAC,MAAO,CACjC,UAAW,mBACX,YAAajB,EACb,SAAUI,EAAwBN,EAAS,YAAagB,EAAMP,CAAe,CACnF,CAAK,MACI,CACL,IAAIgB,EACAC,EAAmB1B,EAAS,SAC5B2B,EAAiB3B,EAAS,YAC9BwB,EAAuBL,EAAI,IAAC,SAAU,CACpC,KAAM,SACN,UAAWS,GAAW,mBAAoB,CACxC,SAAUF,CAClB,EAAS,CACD,QAASJ,GAAmBV,KAAqBc,IAAqB,QAAa,CAACA,EAC5F,EAAS,CACD,kBAAmBf,IAAuBe,IAAqB,QAAa,CAACA,EACrF,CAAO,EACD,QAAS5B,EACT,YAAaI,EACb,cAAeE,EACf,OAAQqB,EAAwBzB,EAAS,eAAiB,MAAQyB,IAA0B,OAASA,EAAwB,GAC7H,SAAuBI,EAAK,KAAC,MAAO,CAClC,UAAW,2BACX,SAAU,CAAcV,EAAI,IAAC,OAAQ,CACnC,UAAWS,GAAW,OAAQ,CAC5B,QAASD,CACrB,CAAW,EACD,SAAUX,CACpB,CAAS,EAAgBG,EAAI,IAAC,OAAQ,CAC5B,UAAW,QACX,SAAUnB,EAAS,KACpB,GAAGS,IAAoB,QAA0BU,MAAK,OAAQ,CAC7D,UAAW,WACX,SAAUV,CACpB,CAAS,EAAGY,GAAiCF,EAAI,IAAC,OAAQ,CAChD,UAAWS,GAAW,oBAAqB,CACzC,SAAUF,CACtB,CAAW,EACD,SAAUL,CACpB,CAAS,CAAC,CACV,CAAO,CACP,CAAK,CACF,CACD,OAAoBQ,OAAM,MAAO,CAC/B,UAAW,oBACX,IAAKlC,EACL,cAAekB,EACf,SAAU,CAACE,EAAUS,CAAO,CAChC,CAAG,CACH,CAAC,EACDhC,GAAgB,YAAc,kBAC9BA,GAAgB,aAAe,CAC7B,SAAU,KACV,mBAAoB,GACpB,gBAAiB,GACjB,cAAe,MACjB,EACA,MAAAsC,GAAetC,GCnJf,SAASuC,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAU9H,EAAK,CAAEF,GAAgB8H,EAAQ5H,EAAK8H,EAAO9H,CAAG,CAAC,CAAI,GAAI,OAAO,0BAA4B,OAAO,iBAAiB4H,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAU9H,EAAK,CAAE,OAAO,eAAe4H,EAAQ5H,EAAK,OAAO,yBAAyB8H,EAAQ9H,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAO4H,CAAS,CAC1f,SAAS9H,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAWzX,IAAI0H,GAAMC,EAAI,OAAO,aAAa,EAElC,MAAMC,WAAoBC,gBAAc,CACtC,OAAO,kBAAkB,EAAG,CACtB,EAAE,UAGN,EAAE,gBAAe,EACjB,EAAE,eAAc,EACjB,CACD,YAAYlD,EAAO,CACjB,MAAMA,CAAK,EACXlF,GAAgB,KAAM,YAAa,MAAM,EACzCA,GAAgB,KAAM,WAAY,MAAM,EACxCA,GAAgB,KAAM,mBAAoB,MAAM,EAChDA,GAAgB,KAAM,eAAgB,MAAM,EAC5CA,GAAgB,KAAM,MAAO,MAAM,EACnCA,GAAgB,KAAM,kBAAmB,MAAM,EAC/C,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,0BAA4B,KAAK,0BAA0B,KAAK,IAAI,EACzE,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,EACrE,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,UAAyBiF,GAAM,YACpC,KAAK,SAAW,SAAS,cACzB,KAAK,iBAAgCA,GAAM,YAC3C,KAAK,aAAe,EACpB,KAAK,IAAM,EACX,KAAK,gBAAkB,CACrB,IAAKC,EAAM,IACX,KAAMA,EAAM,IAClB,EACI,KAAK,MAAQ,CACX,UAAW,CAAE,EACb,aAAc,CAAE,EAChB,cAAe,KACf,YAAa,GACb,WAAY,KACZ,YAAa,KACb,mBAAoB,EACpB,oBAAqB,EACrB,cAAe,GACf,WAAY,EAClB,CACG,CACD,mBAAoB,CAClB,KAAK,SAAQ,EACb,KAAK,eAAc,EACnB,OAAO,iBAAiB,SAAU,KAAK,kBAAkB,EAMzD,KAAK,IAAM,OAAO,sBAAsB,IAAM,CAC5C,IAAImD,GACHA,EAAwB,KAAK,UAAU,WAAa,MAAQA,IAA0B,QAAkBA,EAAsB,MAAK,EACpI,GAAI,CACF,aAAAC,CACR,EAAU,KAAK,MACTA,EAAa,IAAI,CACvB,CAAK,CACF,CACD,mBAAmBC,EAAWC,EAAW,CACvC,GAAI,CACF,QAAAxE,CACN,EAAQ,KAAK,MACL,CACF,cAAAyE,CACN,EAAQ,KAAK,MACT,GAAIA,IAAkBD,EAAU,cAC9B,GAAIC,GAAiB,KAAM,CACzB,IAAIC,GAEHA,EAAyB,KAAK,UAAU,WAAa,MAAQA,IAA2B,QAAkBA,EAAuB,MAAK,CAC/I,MAEQ,KAAK,yBAAwB,EAGjC,GAAIH,EAAU,UAAYvE,IACxB,KAAK,SAAQ,EACT,KAAK,UAAU,SAAW,MAAQ,CAAC,KAAK,UAAU,QAAQ,SAAS,SAAS,aAAa,GAAG,CAC9F,IAAI2E,GACHA,EAAyB,KAAK,UAAU,WAAa,MAAQA,IAA2B,QAAkBA,EAAuB,MAAK,CACxI,CAEH,KAAK,eAAc,CACpB,CACD,sBAAuB,CACrB,KAAK,eAAc,EACnB,OAAO,oBAAoB,SAAU,KAAK,kBAAkB,EAC5D,qBAAqB,KAAK,GAAG,CAC9B,CACD,kBAAmB,CACjB,GAAI,CACF,QAAAC,CACN,EAAQ,KAAK,MACT,GAAIA,EAAQ,wBAA0B,QAAaA,EAAQ,sBAAuB,CAChF,GAAI,CACF,cAAAC,CACR,EAAU,KAAK,MACT,OAAOA,CACR,CACD,OAAO,KAAK,eACb,CACD,iBAAiBC,EAAO,CACtB,GAAI,CACF,QAAAF,CACN,EAAQ,KAAK,MACLA,EAAQ,wBAA0B,QAAaA,EAAQ,sBACzD,KAAK,SAAS,CACZ,cAAeE,CACvB,CAAO,EAED,KAAK,cAAcA,CAAK,CAE3B,CACD,eAAgB,CACd,GAAI,CACF,WAAAC,CACN,EAAQ,KAAK,MACT,OAAOA,CACR,CACD,cAAcD,EAAO,CACnB,KAAK,SAAS,CACZ,WAAYA,CAClB,CAAK,CACF,CACD,UAAW,CAET,KAAK,eAAc,EACnB,qBAAqB,KAAK,GAAG,EAC7B,GAAI,CACF,QAAAF,CACN,EAAQ,KAAK,MACLC,EAAgBD,EAAQ,qBACxBC,IAAkB,SACpBA,EAAgB,IAOlB,OALI,CACF,QAAA7E,CACN,EAAQ,KAAK,MACLO,EAAYd,GAAmB,aAAaO,CAAO,EACnDgF,EAAkB,GACbjB,EAAIxD,EAAU,OAAS,EAAGwD,GAAK,EAAGA,GAAK,EAAG,CACjD,IAAIvC,EAAWjB,EAAUwD,CAAC,EACtBvC,aAAoB,QACtB,KAAK,gBAAgBA,CAAQ,EAE7BwD,EAAgB,KAAKxD,CAAQ,CAEhC,CACD,KAAK,SAAS,CACZ,WAAY,GACZ,cAAAqD,EACA,cAAe,KACf,UAAWpF,GAAmB,YAAYuF,CAAe,CAC/D,CAAK,CACF,CACD,gBAAgBpH,EAAS,CAEvB,IAAIqH,EAAqBtH,GAAa,eAAeC,CAAO,EAC5D,KAAK,SAASsH,IAAU,CACtB,aAAcA,EAAM,aAAa,OAAOD,CAAkB,CAC3D,EAAC,EACFA,EAAmB,KAAKE,GAAqB,CAC3C,KAAK,SAASD,GAAS,CACrB,IAAIJ,EAAQI,EAAM,aAAa,QAAQD,CAAkB,EACzD,GAAIH,GAAS,EAAG,CACd,IAAIM,EAAeF,EAAM,aAAa,MAAK,EAC3C,OAAAE,EAAa,OAAON,EAAO,CAAC,EACrB,CACL,UAAWrF,GAAmB,YAAYyF,EAAM,UAAU,OAAOC,CAAiB,CAAC,EACnF,aAAAC,CACZ,CACS,CAED,OAAO,IACf,CAAO,CACF,EAAE/G,GAAS,CACNV,GAAa,WAAWU,CAAK,IAKjC,KAAK,SAAS6G,GAAS,CACrB,IAAIJ,EAAQI,EAAM,aAAa,QAAQD,CAAkB,EACzD,GAAIH,GAAS,EAAG,CACd,IAAIM,EAAeF,EAAM,aAAa,MAAK,EAC3C,OAAAE,EAAa,OAAON,EAAO,CAAC,EACrB,CACL,aAAAM,CACZ,CACS,CACD,OAAO,IACf,CAAO,EAGDnB,GAAI,MAAM5F,CAAK,EACrB,CAAK,CACF,CACD,gBAAiB,CACf,GAAI,CACF,aAAA+G,CACN,EAAQ,KAAK,MACTA,EAAa,IAAItE,GAAQA,EAAK,OAAQ,EACvC,CAMD,0BAA2B,CACzB,GAAI,KAAK,iBAAiB,UAAY,KACtC,KAAIuE,EAAa,KAAK,iBAAiB,QAAQ,sBAAqB,EAGpE,KAAK,SAAS,CACZ,WAAYA,EAAW,IACvB,YAAaA,EAAW,MACxB,oBAAqBA,EAAW,OAChC,mBAAoBA,EAAW,KACrC,CAAK,EACF,CAUD,gBAAiB,CACf,IAAIC,EAAwBC,EAAwBC,EAAwBC,EACxE,CACF,QAAAb,EACA,eAAAc,EACA,mBAAAC,EACA,oBAAAC,EACA,IAAKC,EACL,KAAMC,CACZ,EAAQ,KAAK,MACT,GAAI,GAAC,KAAK,UAAU,SAAWlB,EAAQ,qBAAuB,MAAQA,EAAQ,qBAO9E,IAAI,CACF,IAAAmB,EACA,KAAAC,CACN,EAAQ,KAAK,gBACL,CACF,MAAAC,EACA,OAAAC,CACN,GAASZ,GAA0BC,EAAyB,KAAK,UAAU,WAAa,MAAQA,IAA2B,OAAS,OAASA,EAAuB,sBAAuB,KAAM,MAAQD,IAA2B,OAASA,EAAyB,CAChQ,MAAO,EACP,OAAQ,CACd,EACQa,IAAgBX,GAA0BC,EAAyB,KAAK,UAAU,WAAa,MAAQA,IAA2B,OAAS,OAASA,EAAuB,gBAAkB,MAAQD,IAA2B,OAASA,EAAyB,GAAK,OAAO,YAC9QU,IAAW,GAAKD,IAAU,IAM1BF,EAAMG,EAAS,OAAO,cAEpBH,EAAMG,EAASN,EAAsB,EAEvCG,GAAOG,EAASN,EAGhBG,EAAM,OAAO,YAAcG,GAG3BF,EAAOC,EAAQ,OAAO,aAExBD,EAAOA,EAAOC,EAAQN,IAEpBG,IAAYE,GAAQH,IAAWE,KAEjC,KAAK,SAAS,CACZ,YAAAI,CACR,CAAO,EACDT,EAAeK,EAAKC,CAAI,IAE3B,CAGD,oBAAqB,CACd,KAAK,UAAU,SAGpB,KAAK,UAAU,EAAI,CACpB,CACD,WAAW,EAAG,CACZ,GAAI,CAAC,KAAK,UAAU,QAAS,CAC3B/B,GAAI,KAAK,oBAAoB,EAC7B,MACD,CACD,GAAI,CAAC,KAAK,UAAU,QAAQ,SAAS,EAAE,aAAa,EAAG,CAGrD,QAFIlC,EAAU,EAAE,cACZqE,EAAqB,GAClBrE,GAAW,CAACqE,GACjBA,EAAqBrE,EAAQ,aAAa,sBAAsB,EAChEA,EAAUA,EAAQ,cAEfqE,GAEH,KAAK,UAAU,EAAI,CAEtB,CACF,CAGD,YAAYlK,EAAK,CACf,GAAI,CACF,KAAA8J,CACN,EAAQ,KAAK,MACT,OAAO9J,IAAQ,UAAY8J,EAAO,GAAK9J,IAAQ,cAAgBA,IAAQ,WACxE,CACD,cAAc,EAAG,CACf,GAAI,CACF,UAAAqE,CACN,EAAQ,KAAK,MACL8F,EAAW,KAAK,mBAChBC,EAAWD,EACXE,EAAc,GAClB,GAAI,EAAE,MAAQ,SAAW,EAAE,MAAQ,IAAK,CAClCF,GAAY,GAAKA,EAAW9F,EAAU,QACxC,KAAK,oBAAoBA,EAAU8F,CAAQ,EAAG,CAAC,EAEjD,MACD,CAcD,GAbI,EAAE,MAAQ,aACRA,GAAY,GAAKA,GAAY9F,EAAU,OACzCgG,EAAc,GAEdD,EAAW,EAEJ,KAAK,YAAY,EAAE,GAAG,EAC/BA,EAAW,KACF,EAAE,MAAQ,WAAa,EAAE,UAAY,EAAE,MAAQ,MACxDA,EAAW7G,GAAmB,gBAAgB6G,EAAU,GAAI/F,CAAS,GAC5D,EAAE,MAAQ,aAAe,EAAE,MAAQ,SAC5C+F,EAAW7G,GAAmB,gBAAgB6G,EAAU,EAAG/F,CAAS,GAElEgG,EAAa,CACf,KAAK,YAAYF,CAAQ,EACzB,EAAE,eAAc,EAChB,EAAE,gBAAe,EACjB,MACD,CACGA,IAAaC,IACXA,IAAa,KACf,KAAK,iBAAiBA,CAAQ,GAE9B,KAAK,UAAS,EACV,KAAK,oBAAoB,aAC3B,KAAK,SAAS,SAGlB,EAAE,eAAc,EAChB,EAAE,gBAAe,EAEpB,CACD,YAAYxB,EAAO,CACjB,GAAI,CACF,UAAAvE,EACA,cAAAkE,CACN,EAAQ,KAAK,MACL+B,EAAajG,EAAUuE,CAAK,EAAE,QAAUA,EAAQ,KAChDL,IAAkB+B,GACtB,KAAK,SAAS,CACZ,cAAeA,EACf,WAAY,KACZ,YAAa,IACnB,CAAK,CACF,CACD,WAAY,CACV,IAAIC,EAAW,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC/E,CACF,UAAAvE,EACA,aAAAwE,CACN,EAAQ,KAAK,MACT,qBAAqB,KAAK,GAAG,EAC7B,KAAK,IAAM,OAAO,sBAAsB,IAAM,CAC5CxE,EAAUuE,CAAQ,EAClBC,EAAa,IAAI,CACvB,CAAK,CACF,CACD,cAAe,CACb,KAAK,SAAS,CACZ,cAAe,IACrB,CAAK,CACF,CACD,mBAAmBC,EAAe,CAC5BA,EACF,KAAK,UAAU,EAAI,EAEnB,KAAK,aAAY,CAEpB,CACD,oBAAoBnF,EAAUD,EAAG,CAC/BA,EAAE,eAAc,EAChBA,EAAE,gBAAe,EACjB,GAAI,CACF,UAAAhB,CACN,EAAQ,KAAK,MACLiB,GAAY,OAASA,EAAS,WAAa,QAAa,CAACA,EAAS,YAChEA,EAAS,SAAW,KACtB,KAAK,YAAYjB,EAAU,QAAQiB,CAAQ,CAAC,EACnCA,EAAS,QAAU,OAC5BA,EAAS,OAAOD,EAAE,WAAW,EAC7B,KAAK,UAAU,EAAI,GAGxB,CACD,0BAA0BC,EAAUD,EAAG,CACjCA,EAAE,SAGN,KAAK,oBAAoBC,EAAUD,CAAC,CACrC,CACD,wBAAwBC,EAAU,CAChC,GAAI,CACF,UAAAjB,CACN,EAAQ,KAAK,MACLqG,EAAarG,EAAU,QAAQiB,CAAQ,EAC3C,KAAK,cAAcoF,CAAU,EACzBA,GAAc,GAAKA,EAAarG,EAAU,SAAWiB,EAAS,WAAa,QAAa,CAACA,EAAS,WACpG,KAAK,YAAYoF,CAAU,CAE9B,CACD,kBAAmB,CACjB,KAAK,cAAc,EAAE,CACtB,CACD,QAAS,CAkBP,QAjBIC,EAAmB,GACnB,CACF,IAAAd,EACA,KAAAC,CACN,EAAQ,KAAK,MACL,CACF,cAAAvB,EACA,YAAA0B,EACA,cAAAtB,EACA,UAAAtE,EACA,WAAAwE,EACA,aAAAK,EACA,WAAA0B,EACA,YAAAC,EACA,mBAAApB,EACA,oBAAAC,CACN,EAAQ,KAAK,MACA7B,EAAI,EAAGA,EAAIxD,EAAU,OAAQwD,GAAK,EAAG,CAC5C,IAAIvC,EAAWjB,EAAUwD,CAAC,EACtBA,EAAI,GAAKvC,EAAS,QAAUjB,EAAUwD,EAAI,CAAC,EAAE,OAC/C8C,EAAiB,KAAmBlE,MAAK,KAAM,CAAE,EAAE,GAAG,OAAOoB,EAAG,YAAY,CAAC,CAAC,EAEhF,IAAIiD,EAA+BrE,EAAI,IAAC3B,GAAiB,CACvD,IAAKyD,IAAkBV,EAAI,KAAK,iBAAmB,KACnD,mBAAoBc,IAAkBd,EACtC,gBAAiBgB,IAAehB,EAChC,SAAUvC,EACV,UAAW,KAAK,mBAChB,gBAAiB,KAAK,oBACtB,oBAAqB,KAAK,wBAC1B,sBAAuB,KAAK,yBAC7B,EAAEuC,CAAC,EACJ8C,EAAiB,KAAKG,CAAe,CACtC,CACD,IAAIC,EAAiB,KACjB7B,EAAa,OAAS,IACxB6B,EAA8BtE,EAAI,IAAC,MAAO,CACxC,UAAW,UACX,SAAuBA,EAAI,IAACuE,GAAgB,CAC1C,UAAW,gCACrB,CAAS,CACT,CAAO,GAEH,GAAI,CACF,UAAAC,EACA,cAAe9E,CACrB,EAAQ,KAAK,MAGL+E,EAAc3C,IAAkB,MAAQqC,IAAe,MAAQC,IAAgB,KACnF,OAAoB1D,OAAMgE,WAAW,CACnC,SAAU,CAAchE,EAAK,KAAC,MAAO,CACnC,UAAWD,GAAW,CACpB,eAAgB+C,CACjB,EAAE,wBAAwB,EAC3B,MAAOtC,GAAc,CACnB,IAAAkC,EACA,KAAAC,CACD,EAAEmB,CAAS,EACZ,IAAK,KAAK,UACV,uBAAwB,GACxB,OAAQ,KAAK,WACb,UAAW,KAAK,cAChB,aAAc,KAAK,iBACnB,cAAehD,GAAY,kBAC3B,KAAM,WACN,SAAU,EACV,cAAe9B,EACf,SAAU,CAACwE,EAAkBI,CAAc,CACnD,CAAO,EAAGG,GAAe3C,IAAkB,MAAQqC,IAAe,MAAQC,IAAgB,MAAqBpE,EAAI,IAACwB,GAAa,CACzH,QAAS5D,EAAUkE,CAAa,EAAE,SAAW,CAAE,EAC/C,UAAW,KAAK,mBAChB,IAAKqC,EACL,KAAMC,EACN,eAAgB,CAACO,EAAaC,IAAiB,CAC7C,KAAK,SAAS,CACZ,WAAYD,EACZ,YAAaC,CACzB,CAAW,CACF,EACD,mBAAoB5B,EACpB,oBAAqBC,CACtB,EAAE,OAAO,OAAOnB,CAAa,CAAC,CAAC,CACtC,CAAK,CACF,CACH,CACAzI,GAAgBmI,GAAa,eAAgB,CAC3C,mBAAoB,EACpB,oBAAqB,EACrB,WAAY,CAEX,EACD,cAAe,CAEd,EACD,cAAe,CAEd,EACD,QAAS,CAAE,EACX,UAAW,CAAE,EACb,cAAe,MACjB,CAAC,EACD,MAAAqD,GAAerD,GCljBf,SAASnI,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CASzX,MAAMkL,WAAwBC,YAAU,CACtC,YAAYxG,EAAO,CACjB,MAAMA,CAAK,EACXlF,GAAgB,KAAM,YAAa,MAAM,EACzCA,GAAgB,KAAM,WAAY,MAAM,EACxC,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,UAAyBiF,GAAM,YACpC,KAAK,SAAwBA,GAAM,YACnC,KAAK,MAAQ,CACX,QAAS,KACT,KAAM,EACN,IAAK,CACX,CACG,CACD,mBAAoB,CAClB,IAAIoD,GACCA,EAAwB,KAAK,UAAU,WAAa,MAAQA,IAA0B,QAAUA,EAAsB,eACzH,KAAK,UAAU,QAAQ,cAAc,iBAAiB,cAAe,KAAK,iBAAiB,CAE9F,CACD,sBAAuB,CACrB,IAAIK,GACCA,EAAyB,KAAK,UAAU,WAAa,MAAQA,IAA2B,QAAUA,EAAuB,eAC5H,KAAK,UAAU,QAAQ,cAAc,oBAAoB,cAAe,KAAK,iBAAiB,CAEjG,CACD,kBAAkB,EAAG,CACnB,GAAK,KAAK,UAAU,QAGpB,KAAIW,EAAa,KAAK,UAAU,QAAQ,sBAAqB,EACzDU,EAAM,EAAE,QAAUV,EAAW,IAC7BW,EAAO,EAAE,QAAUX,EAAW,KAC9B,CACF,QAAArF,CACN,EAAQ,KAAK,MAKT,GAAIA,GAAW,MAAQ,EAAE,SAAW,KAAK,UAAU,QAAS,CAG1D,EAAE,eAAc,EAMhB,KAAK,SAAS,CACZ,QAAS,IACjB,EAAS,IAAM,CACP,IAAI+B,EAAU,SAAS,iBAAiBiE,EAAMD,CAAG,EAE7C4B,EAAa,IAAI,WAAW,cAAe,CAC7C,QAAS,EAAE,QACX,QAAS,EAAE,QACX,QAAS,GACT,WAAY,EACtB,CAAS,EACD5F,GAAY,MAAsCA,EAAQ,cAAc4F,CAAU,CAC1F,CAAO,EACD,MACD,CACD,GAAKlI,GAAmB,qBAAqB,CAAC,GAI1C,IAAE,SAAW,EAAE,SAInB,KAAImI,EAAiBnI,GAAmB,aAAa,EAAE,cAAc,EACjEmI,EAAe,SAAW,IAM9B,EAAE,eAAc,EAChB,KAAK,SAAS,CACZ,QAASA,EACT,IAAA7B,EACA,KAAAC,CACN,CAAK,IACF,CACD,gBAAgB6B,EAAM,CAChBA,IAAS,KAAK,SAAS,SACzB,KAAK,SAAS,CACZ,QAAS,IACjB,CAAO,CAEJ,CACD,QAAS,CACP,IAAIA,EAAO,KACP,CACF,cAAexF,CACrB,EAAQ,KAAK,MACL,CACF,QAAArC,EACA,IAAA+F,EACA,KAAAC,CACN,EAAQ,KAAK,MACT,OAAIhG,IACF6H,EAAoBlF,EAAI,IAACwB,GAAa,CACpC,IAAK,KAAK,SACV,QAASnE,EACT,aAAc,KAAK,gBACnB,IAAK+F,EACL,KAAMC,EACN,eAAgB,CAACsB,EAAaC,IAAiB,CAC7C,KAAK,SAAS,CACZ,IAAKD,EACL,KAAMC,CAClB,CAAW,CACF,EACD,cAAelF,CACvB,CAAO,GAEiBM,MAAK,MAAO,CAC9B,UAAWS,GAAW,oBAAqB,CACzC,OAAQpD,CAChB,CAAO,EACD,IAAK,KAAK,UACV,SAAU6H,CAChB,CAAK,CACF,CACH,CACA,MAAAC,GAAeL,GCzIL,IAACM,GAAgB,IASpB,SAASC,GAAwBC,EAAY5K,EAAM,CACxD,IAAI6K,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIH,GAClF,OAAO,IAAI,QAAQ,CAAC7J,EAASC,IAAW,CACtC,IAAIgK,EACAC,EAAY,WAAW,IAAM,CAC/B,IAAIC,GACHA,EAAkBF,KAAoB,MAAQE,IAAoB,QAAkBA,IACrFlK,EAAO,IAAIV,GAAa,gCAAgC,OAAOJ,CAAI,CAAC,CAAC,CACtE,EAAE6K,CAAO,EAMV,SAASI,EAAmBC,EAAS,CACnC,IAAIC,EACAC,EAAaF,EAAQ,QAAQ,KAAKG,GAAOA,EAAI,QAAUrL,CAAI,EAC/D,aAAa+K,CAAS,GACrBI,EAAmBL,KAAoB,MAAQK,IAAqB,QAAkBA,IACnFC,GAAc,KAChBvK,EAAQuK,CAAU,EAElBtK,EAAO,IAAI,MAAM,YAAY,OAAOd,EAAM,YAAY,CAAC,CAAC,CAE3D,CACD8K,EAAiBF,EAAW,wBAAwBK,CAAkB,CAC1E,CAAG,CACH,CCvCA,SAAStM,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAOlX,MAAMoM,EAAqB,CAOhC,OAAO,QAAQC,EAAIC,EAAQ,CACzB,MAAO,EACR,CAQD,OAAO,aAAaC,EAASC,EAAS,CACpC,MAAM,IAAI,MAAM,8BAA8B,CAC/C,CASD,OAAO,WAAWC,EAAOC,EAAcC,EAAM,CAC3C,MAAO,CACL,MAAAF,EACA,aAAAC,EACA,KAAAC,CACN,CACG,CAOD,OAAO/M,EAAO0M,EAAQ,CACpB,MAAO,EACR,CACH,CACA7M,GAAgB2M,GAAsB,cAAe,aAAa,EAClE3M,GAAgB2M,GAAsB,sBAAuB,qBAAqB,EAClF3M,GAAgB2M,GAAsB,sBAAuB,qBAAqB,EAClF,MAAAQ,EAAeR,GCrDf,MAAMS,WAA+BT,CAAqB,CACxD,OAAOxM,EAAO,CACZ,OAAQA,EAAK,CACX,IAAK,GACL,IAAK,GACH,MAAO,OACT,IAAK,GACL,IAAK,GACH,MAAO,QACT,QACE,MAAO,EACV,CACF,CACH,CACA,MAAAkN,GAAeD,GCdf,MAAME,WAA4BX,CAAqB,CACrD,OAAOxM,EAAO,CACZ,OAAO,OAAO,aAAaA,CAAK,CACjC,CACH,CACA,MAAAoN,GAAeD,GCTf,SAAStN,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAKzX,IAAI0H,GAAMC,EAAI,OAAO,yBAAyB,EACvC,MAAMsF,WAAgCb,CAAqB,CAOhE,OAAO,QAAQC,EAAIC,EAAQ,CACzB,GAAI,CACF,OAAAD,EAAG,KAAK,eAAe,OAAOC,EAAO,aAAc,IAAI,IAAM,EACtD,EACR,MAAW,CACV,MAAO,EACR,CACF,CACD,OAAO,WAAWG,EAAOC,EAAc,CACrC,IAAIC,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIP,EAAqB,oBACpG,MAAO,CACL,MAAAK,EACA,aAAAC,EACA,KAAAC,CACN,CACG,CAQD,OAAO,aAAaJ,EAASC,EAAS,CACpC,OAAOD,IAAYC,GAAWD,IAAY,MAAQC,IAAY,MAAQD,EAAQ,OAASC,EAAQ,MAAQD,EAAQ,eAAiBC,EAAQ,YACzI,CACD,OAAO,0BAA0BU,EAAcC,EAAgB,CAC7D,IAAIC,EAAYD,EAAiB,MAAQ,IACrCE,EAAKH,EAAe,KAAO,GAC/B,OAAO,IAAI,IAAI,CAAC,CAAC,sBAAuB,aAAa,OAAOE,EAAW,UAAU,EAAE,OAAOC,CAAE,CAAC,EAAG,CAAC,0BAA2B,aAAa,OAAOD,EAAW,cAAc,EAAE,OAAOC,CAAE,CAAC,EAAG,CAAC,gCAAiC,aAAa,OAAOD,EAAW,oBAAoB,EAAE,OAAOC,CAAE,CAAC,CAAC,CAAC,CAC5R,CACD,OAAO,iBAAiBH,EAAcC,EAAgB,CACpD,IAAIG,EAAkBL,GAAwB,0BAA0BC,EAAcC,CAAc,EACpG,MAAO,CAAC,GAAGG,EAAgB,KAAI,CAAE,CAClC,CACD,OAAO,oBAAoBJ,EAAcC,EAAgB,CACvD,IAAIC,EAAYD,IAAmB,QAAaA,EAAiB,MAAQ,IACrEE,EAAKH,IAAiB,QAAaA,EAAe,KAAO,GAC7D,OAAO,IAAI,IAAI,CAAC,CAAC,aAAc,aAAa,OAAOG,CAAE,CAAC,EAAG,CAAC,aAAc,aAAa,OAAOA,CAAE,CAAC,EAAG,CAAC,WAAY,WAAW,OAAOA,CAAE,CAAC,EAAG,CAAC,eAAgB,eAAe,OAAOA,CAAE,CAAC,EAAG,CAAC,qBAAsB,qBAAqB,OAAOA,CAAE,CAAC,EAAG,CAAC,sBAAuB,aAAa,OAAOD,EAAW,UAAU,EAAE,OAAOC,CAAE,CAAC,EAAG,CAAC,0BAA2B,aAAa,OAAOD,EAAW,cAAc,EAAE,OAAOC,CAAE,CAAC,EAAG,CAAC,gCAAiC,aAAa,OAAOD,EAAW,oBAAoB,EAAE,OAAOC,CAAE,CAAC,CAAC,CAAC,CACzf,CACD,OAAO,WAAWH,EAAcC,EAAgB,CAC9C,IAAIG,EAAkBL,GAAwB,oBAAoBC,EAAcC,CAAc,EAC9F,MAAO,CAAC,GAAGG,EAAgB,KAAI,CAAE,CAClC,CACD,YAAYjB,EAAI,CACd,GAAI,CACF,SAAUkB,EAAgB,GAC1B,aAAAL,EAAe,GACf,eAAAC,EAAiB,GACjB,4BAAAK,EAA8BP,GAAwB,8BACvD,EAAG,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACxE,QACAxN,GAAgB,KAAM,KAAM,MAAM,EAClCA,GAAgB,KAAM,aAAc,MAAM,EAC1CA,GAAgB,KAAM,8BAA+B,MAAM,EAC3DA,GAAgB,KAAM,eAAgB,MAAM,EAC5CA,GAAgB,KAAM,iBAAkB,MAAM,EAC9CA,GAAgB,KAAM,kBAAmB,MAAM,EAC/C,IAAIgO,EAAWF,GAAiBN,GAAwB,qBACxD,GAAI,CACF,KAAK,WAAaZ,EAAG,KAAK,SAAS,YAAYoB,CAAQ,CACxD,MAAW,CACV/F,GAAI,MAAM,2BAA4B+F,CAAQ,EAC9C,KAAK,WAAapB,EAAG,KAAK,SAAS,YAAYY,GAAwB,oBAAoB,CAC5F,CACD,KAAK,GAAKZ,EACV,KAAK,4BAA8BmB,EACnC,KAAK,aAAeN,EACpB,KAAK,eAAiBC,EACtB,KAAK,gBAAkBF,GAAwB,oBAAoBC,EAAcC,CAAc,CAChG,CACD,yBAAyBO,EAAkB,CACzC,IAAIC,EACJ,OAAQA,EAAwB,KAAK,gBAAgB,IAAID,CAAgB,KAAO,MAAQC,IAA0B,OAASA,EAAwBD,CACpJ,CACD,OAAO9N,EAAO,CACZ,IAAI0M,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC7EoB,EAAmBpB,EAAO,cAAgB,MAAQA,EAAO,eAAiB,GAAKA,EAAO,aAAe,KAAK,4BAC1GI,EAAe,KAAK,yBAAyBgB,CAAgB,EACjE,GAAI,CACF,OAAO,KAAK,GAAG,KAAK,eAAe,OAAOhB,EAAc9M,EAAO,KAAK,UAAU,CAC/E,MAAW,CACV8H,GAAI,MAAM,0BAA0B,CACrC,CACD,MAAO,EACR,CACH,CACAjI,GAAgBwN,GAAyB,iCAAkC,yBAAyB,EACpGxN,GAAgBwN,GAAyB,uBAAwB,kBAAkB,ECvGnF,SAASxN,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAKzX,IAAI0H,GAAMC,EAAI,OAAO,wBAAwB,EACtC,MAAMiG,UAA+BxB,CAAqB,CAO/D,OAAO,QAAQC,EAAIC,EAAQ,CACzB,GAAI,CACF,OAAAD,EAAG,KAAK,aAAa,OAAOC,EAAO,aAAc,CAAC,EAC3C,EACR,MAAW,CACV,MAAO,EACR,CACF,CAUD,OAAO,WAAWG,EAAOC,EAAc,CACrC,IAAIC,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIP,EAAqB,oBAChGyB,EAAa,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OACvD,MAAO,CACL,MAAApB,EACA,KAAAE,EACA,aAAAD,EACA,WAAAmB,CACN,CACG,CASD,OAAO,iBAAiBpB,EAAO,CAC7B,IAAIC,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACnFmB,EAAa,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OACvD,OAAOD,EAAuB,WAAWnB,EAAOC,EAAcN,EAAqB,oBAAqByB,CAAU,CACnH,CAQD,OAAO,kBAAmB,CACxB,IAAInB,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACnFmB,EAAa,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OACvD,OAAOD,EAAuB,WAAW,gBAAiBlB,EAAcN,EAAqB,oBAAqByB,CAAU,CAC7H,CAOD,OAAO,aAAatB,EAASC,EAAS,CACpC,OAAOD,IAAYC,GAAWD,GAAW,MAAQC,GAAW,MAAQD,EAAQ,OAASC,EAAQ,MAAQD,EAAQ,eAAiBC,EAAQ,cAAgBD,EAAQ,aAAeC,EAAQ,UACtL,CACD,YAAYH,EAAI,CACd,GAAI,CACF,oBAAAyB,EAAsBF,EAAuB,qBAC9C,EAAG,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACxE,QACAnO,GAAgB,KAAM,sBAAuB,MAAM,EACnDA,GAAgB,KAAM,KAAM,MAAM,EAClC,KAAK,GAAK4M,EACV,KAAK,oBAAsByB,CAC5B,CAQD,OAAOC,EAAY,CACjB,IAAIzB,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC7EI,EAAeJ,EAAO,cAAgB,MAAQA,EAAO,eAAiB,GAAKA,EAAO,aAAe,KAAK,oBACtG1M,EAAQ0M,EAAO,YAAc,MAAQA,EAAO,aAAe,EAAIyB,EAAazB,EAAO,WAAayB,EACpG,GAAI,CACF,OAAO,KAAK,GAAG,KAAK,aAAa,OAAOrB,EAAc9M,CAAK,CAC5D,MAAW,CACV8H,GAAI,MAAM,0BAA0B,CACrC,CACD,MAAO,EACR,CACH,CACAjI,GAAgBmO,EAAwB,wBAAyB,cAAc,EAC/EnO,GAAgBmO,EAAwB,iBAAkBA,EAAuB,iBAAiB,UAAW,SAAS,CAAC,EACvHnO,GAAgBmO,EAAwB,sBAAuBA,EAAuB,iBAAiB,eAAgB,aAAc,GAAK,CAAC,EAC3InO,GAAgBmO,EAAwB,kBAAmBA,EAAuB,iBAAiB,WAAY,iBAAkB,IAAQ,CAAC,EAC1InO,GAAgBmO,EAAwB,6BAA8BA,EAAuB,iBAAiB,sBAAuB,UAAU,CAAC,EAChJnO,GAAgBmO,EAAwB,eAAgBA,EAAuB,iBAAiB,QAAS,SAAS,CAAC,EACnHnO,GAAgBmO,EAAwB,4BAA6BA,EAAuB,iBAAiB,OAAQ,YAAY,CAAC,EAClInO,GAAgBmO,EAAwB,6BAA8BA,EAAuB,iBAAiB,SAAU,cAAc,CAAC,EC7GvI,MAAMI,WAA+B5B,CAAqB,CACxD,OAAOxM,EAAO,CACZ,MAAO,GAAG,OAAOA,CAAK,CACvB,CACH,CACA,MAAAqO,GAAeD,GCRf,SAASvO,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAKzX,IAAI0H,GAAMC,EAAI,OAAO,wBAAwB,EAEtC,MAAMuG,WAA+B9B,CAAqB,CAO/D,OAAO,QAAQC,EAAIC,EAAQ,CACzB,GAAI,CACF,OAAAD,EAAG,KAAK,aAAa,OAAOC,EAAO,aAAc,CAAC,EAC3C,EACR,MAAW,CACV,MAAO,EACR,CACF,CAUD,OAAO,WAAWG,EAAOC,EAAc,CACrC,IAAIC,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIP,EAAqB,oBAChGyB,EAAa,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OACvD,MAAO,CACL,MAAApB,EACA,KAAAE,EACA,aAAAD,EACA,WAAAmB,CACN,CACG,CASD,OAAO,iBAAiBpB,EAAO,CAC7B,IAAIC,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACnFmB,EAAa,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OACvD,OAAOK,GAAuB,WAAWzB,EAAOC,EAAcN,EAAqB,oBAAqByB,CAAU,CACnH,CAQD,OAAO,kBAAmB,CACxB,IAAInB,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACnFmB,EAAa,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OACvD,OAAOK,GAAuB,WAAW,gBAAiBxB,EAAcN,EAAqB,oBAAqByB,CAAU,CAC7H,CAQD,OAAO,aAAatB,EAASC,EAAS,CACpC,OAAOD,IAAYC,GAAWD,GAAW,MAAQC,GAAW,MAAQD,EAAQ,OAASC,EAAQ,MAAQD,EAAQ,eAAiBC,EAAQ,cAAgBD,EAAQ,aAAeC,EAAQ,UACtL,CACD,YAAYH,EAAI,CACd,GAAI,CACF,oBAAAyB,EAAsBI,GAAuB,qBAC9C,EAAG,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACxE,QACAzO,GAAgB,KAAM,KAAM,MAAM,EAClCA,GAAgB,KAAM,sBAAuB,MAAM,EACnD,KAAK,GAAK4M,EACV,KAAK,oBAAsByB,CAC5B,CAQD,OAAOC,EAAY,CACjB,IAAIzB,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC7EI,EAAeJ,EAAO,cAAgB,MAAQA,EAAO,eAAiB,GAAKA,EAAO,aAAe,KAAK,oBACtG1M,EAAQ0M,EAAO,YAAc,MAAQA,EAAO,aAAe,EAAIyB,EAAazB,EAAO,WAAayB,EACpG,GAAI,CACF,OAAO,KAAK,GAAG,KAAK,aAAa,OAAOrB,EAAc9M,CAAK,CAC5D,MAAW,CACV8H,GAAI,MAAM,0BAA0B,CACrC,CACD,MAAO,EACR,CACH,CACAjI,GAAgByO,GAAwB,wBAAyB,SAAS,EAC1EzO,GAAgByO,GAAwB,kBAAmBA,GAAuB,iBAAiB,WAAY,iBAAkB,IAAQ,CAAC,EAC1IzO,GAAgByO,GAAwB,6BAA8BA,GAAuB,iBAAiB,sBAAuB,UAAU,CAAC,EC1GzI,MAAMC,WAA8B/B,CAAqB,CAC9D,OAAOxM,EAAO,CACZ,OAAOA,CACR,CACH,CCPA,SAASH,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAClX,MAAMoO,CAAU,CAYrB,OAAO,gBAAgB/B,EAAIoB,EAAUY,EAAM,CACzC,IAAIC,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC5EC,EAAM,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC1EC,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC3EC,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC7EC,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC7EC,EAAK,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC7E,GAAI,CAAClB,EACH,MAAM,IAAI,MAAM,sBAAsB,EAExC,IAAImB,EAAa,GAAG,OAAOP,CAAI,EAAE,SAAS,EAAG,GAAG,EAC5CQ,EAAc,GAAG,OAAOP,EAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,EAClDQ,EAAY,GAAG,OAAOP,CAAG,EAAE,SAAS,EAAG,GAAG,EAC1CQ,EAAa,GAAG,OAAOP,CAAI,EAAE,SAAS,EAAG,GAAG,EAC5CQ,EAAe,GAAG,OAAOP,CAAM,EAAE,SAAS,EAAG,GAAG,EAChDQ,EAAe,GAAG,OAAOP,CAAM,EAAE,SAAS,EAAG,GAAG,EAChDQ,EAAa,GAAG,OAAOP,CAAE,EAAE,SAAS,EAAG,GAAG,EAC1CQ,EAAa,GAAG,OAAOP,EAAY,GAAG,EAAE,OAAOC,EAAa,GAAG,EAAE,OAAOC,EAAW,GAAG,EAAE,OAAOC,EAAY,GAAG,EAAE,OAAOC,EAAc,GAAG,EAAE,OAAOC,EAAc,GAAG,EAAE,OAAOC,CAAU,EACzL,OAAO7C,EAAG,KAAK,eAAe,MAAM+B,EAAU,iBAAkBe,EAAY9C,EAAG,KAAK,SAAS,YAAYoB,CAAQ,CAAC,CACnH,CAOD,OAAO,aAAayB,EAAY,CAC9B,IAAIE,EAAW,SAASF,EAAY,EAAE,EAElCG,EAAQ,IAAI,OAAO,EAAIH,EAAW,MAAM,EACxCI,EAAiB,GAAG,OAAOF,EAAW,CAAC,EAAE,OAAOC,CAAK,EACzD,OAAO,SAASC,EAAgB,EAAE,CACnC,CAQD,OAAO,YAAYjD,EAAIkD,EAAYC,EAAQ/B,EAAU,CACnD,GAAI,CACF,KAAAY,EACA,MAAAC,EACA,KAAAmB,EACA,MAAAC,EACA,QAAAC,EACA,QAAAC,EACA,MAAAC,CACD,EAAGL,EACJ,GAAID,EAAW,OAAS,KAAM,CAC5B,GAAIA,EAAW,MAAM,SAAW,EAE9B,OAAO,KAETM,EAAQzB,EAAU,aAAamB,EAAW,KAAK,EAC3CM,EAAQ,YAEVD,GAAW,EACXC,EAAQ,EAEhB,MAAeN,EAAW,SAAW,KAC/BK,GAAW,EACFL,EAAW,SAAW,KAC/BI,GAAW,EACFJ,EAAW,OAAS,KAC7BG,GAAS,EACAH,EAAW,MAAQ,KAC5BE,GAAQ,EACCF,EAAW,OAAS,KAC7BjB,GAAS,EAETD,GAAQ,EAMV,IAAIyB,EAAS,IAAI,KAAKzB,EAAMC,EAAOmB,EAAMC,EAAOC,EAASC,CAAO,EAChE,OAAOxB,EAAU,gBAAgB/B,EAAIoB,EAAUqC,EAAO,YAAa,EAAEA,EAAO,WAAYA,EAAO,UAAWA,EAAO,SAAQ,EAAIA,EAAO,WAAY,EAAEA,EAAO,aAAcD,CAAK,CAC7K,CAQD,OAAO,WAAWhB,EAAa,CAC7B,IAAIP,EAAQ,SAASO,EAAa,EAAE,EACpC,GAAI,CAAC,OAAO,MAAMP,CAAK,EACrB,OAAIA,GAAS,GAAKA,GAAS,GAClBA,EAAQ,EAEV,IAET,IAAIyB,EAAmBlB,EAAY,KAAM,EAAC,YAAW,EACrD,GAAIkB,EAAiB,QAAU,GAC7B,QAASvI,EAAI,EAAGA,EAAI4G,EAAU,OAAO,OAAQ5G,GAAK,EAChD,GAAI4G,EAAU,OAAO5G,CAAC,EAAE,WAAWuI,CAAgB,EACjD,OAAOvI,EAIb,MAAO,IACR,CAcD,OAAO,gBAAgBoH,EAAYC,EAAaC,EAAWC,EAAYC,EAAcC,EAAcC,EAAY,CAC7G,IAAIb,EAAO,SAASO,EAAY,EAAE,EAC9BN,EAAQO,GAAe,KAAO,KAAK,WAAWA,CAAW,EAAI,EAC7DY,EAAOX,GAAa,KAAO,SAASA,EAAW,EAAE,EAAI,EACrDY,EAAQX,GAAc,KAAO,SAASA,EAAY,EAAE,EAAI,EACxDY,EAAUX,GAAgB,KAAO,SAASA,EAAc,EAAE,EAAI,EAC9DY,EAAUX,GAAgB,KAAO,SAASA,EAAc,EAAE,EAAI,EAC9DY,EAAQX,GAAc,KAAO,SAASA,EAAW,OAAO,EAAG,GAAG,EAAG,EAAE,EAAI,EAC3E,OAAI,OAAO,MAAMb,CAAI,GAAK,OAAO,MAAMC,CAAK,GAAK,OAAO,MAAMmB,CAAI,GAAK,OAAO,MAAMC,CAAK,GAAK,OAAO,MAAMC,CAAO,GAAK,OAAO,MAAMC,CAAO,GAAK,OAAO,MAAMC,CAAK,EACzJ,KAEF,CACL,KAAAxB,EACA,MAAAC,EACA,KAAAmB,EACA,MAAAC,EACA,QAAAC,EACA,QAAAC,EACA,MAAAC,CACN,CACG,CASD,OAAO,oBAAoBG,EAAgB,CACzC,IAAIC,EAAQ,6GACRC,EAASD,EAAM,KAAKD,CAAc,EACtC,GAAIE,GAAU,KACZ,MAAM,IAAI,MAAM,2BAA2B,OAAOF,CAAc,CAAC,EAEnE,GAAI,EAAG3B,EAAI,CAAGC,EAAQ,CAAAmB,GAAOC,EAAK,CAAGC,EAAU,CAAAC,GAAUC,EAAOM,CAAQ,EAAID,EAC5E,GAAIC,GAAY,MAAQA,EAAS,OAAS,EACxC,MAAM,IAAI,MAAM,4CAA4C,OAAOH,EAAgB,KAAK,EAAE,OAAOG,CAAQ,CAAC,EAE5G,MAAO,CACL,KAAA9B,EACA,MAAAC,EACA,KAAAmB,EACA,MAAAC,EACA,QAAAC,EACA,QAAAC,EACA,MAAAC,CACN,CACG,CAQD,OAAO,eAAexD,EAAI9J,EAAMkL,EAAU,CACxC,IAAI2C,EAAY7N,EAAK,KAAM,EAAC,YAAW,EACvC,GAAI6N,EAAU,SAAW,EACvB,MAAM,IAAI,MAAM,2CAA2C,EAE7D,GAAIA,IAAc,OAChB,MAAO,CAAC,KAAM,IAAI,EAEpB,GAAIA,IAAc,QAAS,CACzB,IAAIC,EAAM,IAAI,KAAK,KAAK,IAAK,GACzBC,EAAalC,EAAU,gBAAgB/B,EAAIoB,EAAU4C,EAAI,YAAa,EAAEA,EAAI,SAAQ,EAAIA,EAAI,QAAS,GACrGE,EAAW,IAAI,KAAKF,EAAI,YAAa,EAAEA,EAAI,SAAU,EAAEA,EAAI,QAAS,EAAG,CAAC,EACxEG,EAAWpC,EAAU,gBAAgB/B,EAAIoB,EAAU8C,EAAS,YAAa,EAAEA,EAAS,SAAQ,EAAIA,EAAS,QAAS,GACtH,MAAO,CAACD,EAAYE,CAAQ,CAC7B,CACD,GAAIJ,IAAc,YAAa,CAC7B,IAAIK,EAAO,IAAI,KAAK,KAAK,IAAK,GAC1BC,EAAY,IAAI,KAAKD,EAAK,YAAa,EAAEA,EAAK,SAAU,EAAEA,EAAK,QAAS,EAAG,CAAC,EAC5EE,EAAcvC,EAAU,gBAAgB/B,EAAIoB,EAAUiD,EAAU,YAAa,EAAEA,EAAU,SAAQ,EAAIA,EAAU,QAAS,GACxHE,EAAYxC,EAAU,gBAAgB/B,EAAIoB,EAAUgD,EAAK,YAAa,EAAEA,EAAK,SAAQ,EAAIA,EAAK,QAAS,GAC3G,MAAO,CAACE,EAAaC,CAAS,CAC/B,CACD,GAAIR,IAAc,MAAO,CACvB,IAAIS,EAAQ,IAAI,KAAK,KAAK,IAAK,GAC3BpB,EAAOpD,EAAG,YAAY,SAASwE,CAAK,EACxC,MAAO,CAACpB,EAAM,IAAI,CACnB,CACD,IAAIF,EAAanB,EAAU,oBAAoBgC,CAAS,EACxD,GAAIb,EAAW,MAAQ,MAAQA,EAAW,OAAS,MAAQA,EAAW,MAAQ,KAC5E,MAAM,IAAI,MAAM,yCAAyC,OAAOa,CAAS,CAAC,EAE5E,IAAIZ,EAASpB,EAAU,gBAAgBmB,EAAW,KAAMA,EAAW,MAAOA,EAAW,KAAMA,EAAW,MAAOA,EAAW,QAASA,EAAW,QAASA,EAAW,KAAK,EACrK,GAAIC,GAAU,KACZ,MAAM,IAAI,MAAM,sCAAsC,OAAOD,CAAU,CAAC,EAE1E,IAAIuB,EAAY1C,EAAU,gBAAgB/B,EAAIoB,EAAU+B,EAAO,KAAMA,EAAO,MAAOA,EAAO,KAAMA,EAAO,MAAOA,EAAO,QAASA,EAAO,QAASA,EAAO,KAAK,EACtJuB,EAAU3C,EAAU,YAAY/B,EAAIkD,EAAYC,EAAQ/B,CAAQ,EACpE,MAAO,CAACqD,EAAWC,CAAO,CAC3B,CAOD,OAAO,UAAUC,EAAa,CAC5B,OAAI,OAAOA,GAAgB,SAClB,IAAI,KAAKA,CAAW,EAEtBA,EAAY,QACpB,CACH,CACAvR,GAAgB2O,EAAW,mBAAoB,+BAA+B,EAC9E3O,GAAgB2O,EAAW,SAAU,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,UAAU,CAAC,EC/OxJ,SAAS6C,GAAyBrR,EAAOsR,EAAU,CACxD,OAAOtR,IAAUsR,EAAW,CAC1B,SAAU,QACV,MAAO,EACR,EACC,CACA,SAAU,KACV,MAAAtR,CACJ,CACA,CASO,SAASuR,GAAuBC,EAAYC,EAAaC,EAAY,CAK1E,OAAO,SAA0BC,EAAY,CAC3C,IAAIC,EAAoBF,EAAW,OACnC,GAAIE,IAAsB,GACxB,OAAO,KAET,IAAIC,EAAUC,GAA6BL,EAAaM,GAAOA,EAAI,SAAS,mBAAmBP,EAAW,gBAAgBO,EAAI,KAAMH,CAAiB,CAAC,EAAG,IAAI,EAC7J,OAAOC,EAAQF,CAAU,CAC7B,CACA,CAWO,SAASG,GAA6BL,EAAaO,EAAuB,CAC/E,IAAIC,EAAoB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAC5F,OAAO,SAAgCN,EAAY,CACjD,IAAIO,EAAeP,GAAe,KAAgC,OAASA,EAAW,YAAY,OAAOF,GAAgB,SAAW,CAACA,CAAW,EAAIA,CAAW,EAC/J,GAAIS,GAAgB,MAAQA,EAAa,SAAW,EAClD,OAAO,KAET,IAAIC,EAAmBD,EAAa,IAAIF,CAAqB,EAC7D,OAAOG,EAAiB,OAAO,CAACnR,EAASoR,IAASpR,EAAQiR,CAAiB,EAAEG,CAAI,CAAC,CACtF,CACA,CAUO,SAASC,GAAkBb,EAAYC,EAAazR,EAAOsS,EAAU,CAK1E,OAAOR,GAA6BL,EAAaM,GAAOA,EAAI,OAAQ,EAACO,CAAQ,EAAEd,EAAW,gBAAgBO,EAAI,KAAM/R,CAAK,CAAC,EAAG,IAAI,CACnI,CAcO,SAASuS,GAA2Bf,EAAYgB,EAAYC,EAAWC,EAAqBC,EAAiB,CAMlH,OAAO,SAA8BhB,EAAY,CAC/C,IAAIiB,EAAcjB,GAAe,KAAgC,OAASA,EAAW,WAAWa,CAAU,EACtGK,EAAgBJ,IAAc,OAASC,GAAuBD,EAAU,OAAS,EACrF,OAAIG,GAAe,MAAQC,EAClB,KAEFrB,EAAW,sBAAsBoB,EAAa,CAAC,GAAGH,EAAU,KAAI,CAAE,EAAGE,CAAe,CAC/F,CACA,CAMO,SAASG,GAAoCtB,EAAY,CAK9D,OAAO,SAAuCuB,EAAQ,CACpD,OAAOA,EAAO,SAAS,OAAQ,EAAC,IAAG,EAAG,IAAIA,EAAO,OAAM,EAAG,MAAMvB,EAAW,gBAAgBuB,EAAO,KAAM,EAAE,CAAC,CAAC,CAChH,CACA,CAQO,SAASC,GAAmCxB,EAAYyB,EAAM,CAMnE,OAAO,SAAsCF,EAAQ,CACnD,IAAIG,EAASH,EAAO,SAChBI,EAAmB3B,EAAW,gBAAgBuB,EAAO,KAAM,EAAE,EAC7DK,EAAyBF,EAAO,GAAGC,CAAgB,EACvD,OAAIF,EACKC,EAAO,OAAM,EAAG,GAAGE,CAAsB,EAI3CA,EAAuB,GAAGF,EAAO,MAAMC,CAAgB,CAAC,CACnE,CACA,CC3IA,SAAStT,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAClX,MAAMiT,EAAS,CAAE,CACxBxT,GAAgBwT,GAAU,MAAO,KAAK,EACtCxT,GAAgBwT,GAAU,MAAO,KAAK,EACtCxT,GAAgBwT,GAAU,KAAM,IAAI,EAC7B,SAASC,GAAoBhB,EAAU,CAC5C,GAAI,EAAEA,IAAa,OAASA,IAAa,OAASA,IAAa,MAC7D,MAAM,IAAI,MAAM,6CAA6C,CAEjE,CCXA,SAASzS,EAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAElX,MAAMmT,CAAK,CAAE,CACpB1T,EAAgB0T,EAAM,KAAM,IAAI,EAChC1T,EAAgB0T,EAAM,eAAgB,cAAc,EACpD1T,EAAgB0T,EAAM,QAAS,OAAO,EACtC1T,EAAgB0T,EAAM,kBAAmB,iBAAiB,EAC1D1T,EAAgB0T,EAAM,cAAe,aAAa,EAClD1T,EAAgB0T,EAAM,uBAAwB,sBAAsB,EACpE1T,EAAgB0T,EAAM,WAAY,UAAU,EAC5C1T,EAAgB0T,EAAM,oBAAqB,mBAAmB,EAC9D1T,EAAgB0T,EAAM,KAAM,IAAI,EAChC1T,EAAgB0T,EAAM,eAAgB,cAAc,EACpD1T,EAAgB0T,EAAM,QAAS,OAAO,EACtC1T,EAAgB0T,EAAM,kBAAmB,iBAAiB,EAC1D1T,EAAgB0T,EAAM,SAAU,QAAQ,EACxC1T,EAAgB0T,EAAM,UAAW,SAAS,EAC1C1T,EAAgB0T,EAAM,SAAU,QAAQ,EACxC1T,EAAgB0T,EAAM,SAAU,QAAQ,EACxC1T,EAAgB0T,EAAM,WAAY,UAAU,EAC5C1T,EAAgB0T,EAAM,cAAe,aAAa,EAClD1T,EAAgB0T,EAAM,qBAAsB,oBAAoB,EAChE1T,EAAgB0T,EAAM,aAAc,YAAY,EAChD1T,EAAgB0T,EAAM,WAAY,UAAU,EAC5C1T,EAAgB0T,EAAM,cAAe,aAAa,ECxBlD,IAAIzL,GAAMC,EAAI,OAAO,mBAAmB,EAUjC,SAASyL,GAAuBC,EAAKC,EAAQ,CAClD,OAAO,OAAOD,EAAI,iBAAmBC,CAAM,CAC7C,CAUO,SAASC,GAA4BC,EAAMC,EAAgB,CAChE,GAAI,CACF,WAAAC,CACD,EAAGF,EAIJ,OAAO,SAAwB5P,EAAO,CACpC,GAAI,CACF,QAAA+P,EACA,OAAAL,EACA,KAAAM,CACN,EAAQhQ,EAAM,OACV8D,GAAI,MAAM,gBAAiB9D,EAAM,MAAM,EACvC,IAAIiQ,EAAe,IAAI,IACvBD,EAAK,QAAQP,GAAO,CAClB,IAAI9O,EAAOkP,EAAeJ,EAAKM,CAAO,EAClChU,EAAMyT,GAAuBC,EAAKC,CAAM,EAC5CO,EAAa,IAAIlU,EAAK,CACpB,IAAAA,EACA,KAAA4E,CACR,CAAO,CACP,CAAK,EACDmD,GAAI,MAAM,cAAemM,CAAY,EACrCH,EAAWG,CAAY,CAC3B,CACA,CASO,SAASC,GAAuBT,EAAKM,EAAS,CACnD,OAAOA,EAAQ,OAAO,CAACzD,EAAQyB,KAE7BzB,EAAOyB,EAAI,IAAI,EAAI0B,EAAI,IAAI1B,CAAG,EACvBzB,GACN,CAAE,EACP,CAUO,SAAU6D,GAAwBC,EAAOC,EAAK,CAEnD,QAASzM,EAAIwM,EAAOxM,GAAKyM,EAAK,EAAEzM,EAC9B,KAAM,CACJ,IAAK,OAAOA,CAAC,CACnB,CAEA,CASO,SAAS0M,GAAQC,EAAO,CAC7B,OAAOA,GAAS,MAAQC,GAASD,CAAK,EAAI,EAAIA,EAAM,IACtD,CAOO,SAASC,GAASD,EAAO,CAC9B,MAAI,aAAcA,EACTA,EAAM,SAER,EACT,CAYO,SAASE,GAAmBC,EAAUC,EAAcC,EAASC,EAAW,CAC7E,IAAIC,EAAUJ,EAAWC,EAAe,EACpC,CAACI,EAAKC,CAAG,EAAI,CAAC,EAAGH,EAAY,CAAC,EAC9BI,EAAQC,GAAMR,EAAWE,EAASG,EAAKC,CAAG,EAC1CG,EAAOD,GAAMJ,EAAUF,EAASG,EAAKC,CAAG,EAC5C,MAAO,CAACC,EAAOE,CAAI,CACrB,CC3HA,SAASC,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQxV,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIsV,EAAOH,EAAItV,CAAG,EAAEG,CAAG,EAAOF,EAAQwV,EAAK,YAAgBtT,EAAO,CAAEF,EAAOE,CAAK,EAAG,MAAS,CAAKsT,EAAK,KAAQzT,EAAQ/B,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKsV,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAU7T,EAASC,EAAQ,CAAE,IAAIqT,EAAMK,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMtV,EAAO,CAAEoV,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,OAAQvV,CAAK,CAAI,CAAC,SAASuV,EAAOlT,EAAK,CAAE+S,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,QAASlT,CAAG,EAAKiT,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAASzV,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAOzX,IAAI0H,GAAMC,EAAI,OAAO,YAAY,EAE1B,MAAM8N,CAAW,CAStB,OAAO,yBAAyBlE,EAAY,CAC1C,IAAImE,EAAa,UACjB,OAAOL,GAAkB,WAAa,CACpC,GAAI9D,GAAc,KAChB,OAAO,KAGT,QADIoE,EAAe,MAAMpE,EAAW,OAC3BlS,EAAOqW,EAAW,OAAQE,EAAkB,IAAI,MAAMvW,EAAO,EAAIA,EAAO,EAAI,CAAC,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IAC9GqW,EAAgBrW,EAAO,CAAC,EAAImW,EAAWnW,CAAI,EAE7C,OAAAoW,EAAa,YAAYvW,GAAuB,GAAGwW,EAAgB,IAAIC,GAAKA,EAAEF,CAAY,CAAC,CAAC,CAAC,EACtFA,CACR,IACF,CAeD,OAAO,aAAaG,EAAM1D,EAAY,CACpC,QAAS5K,EAAI,EAAGA,EAAIsO,EAAK,OAAQtO,GAAK,EAAG,CACvC,IAAIuO,EACAC,EAAIF,EAAKtO,CAAC,EACd,KAAMuO,EAAYC,EAAE,UAAY,MAAQD,IAAc,OAAS,OAASA,EAAU,QAAU3D,EAC1F,OAAO5K,CAEV,CACD,OAAO,IACR,CAOD,OAAO,iBAAiByO,EAAW7D,EAAY,CAC7C,IAAI8D,EAAYT,EAAW,aAAaQ,EAAW7D,CAAU,EAC7D,OAAI8D,GAAa,KACRD,EAAUC,CAAS,EAErB,IACR,CACD,OAAO,cAAcpD,EAAQ,CAC3B,OAAIA,EACKA,EAAO,WAET,IACR,CAGD,OAAO,eAAeqD,EAAY,CAChC,OAAIV,EAAW,cAAcU,CAAU,EAC9B,CAACC,EAAW,OAAQA,EAAW,QAASA,EAAW,MAAM,EAE9DX,EAAW,WAAWU,CAAU,GAAKV,EAAW,aAAaU,CAAU,GAAKV,EAAW,WAAWU,CAAU,EACvG,CAACC,EAAW,GAAIA,EAAW,MAAOA,EAAW,YAAaA,EAAW,qBAAsBA,EAAW,SAAUA,EAAW,iBAAiB,EAEjJX,EAAW,WAAWU,CAAU,EAC3B,CAACC,EAAW,GAAIA,EAAW,aAAcA,EAAW,MAAOA,EAAW,gBAAiBA,EAAW,SAAUA,EAAW,YAAaA,EAAW,WAAYA,EAAW,QAAQ,EAEhL,EACR,CACD,OAAO,YAAYzC,EAAS0C,EAAOC,EAAa,CAC9C,GAAIA,EAAc,GAAKA,GAAe3C,EAAQ,OAC5C,OAAO,KAET,IAAImC,EAAOL,EAAW,iBAAiBY,EAAO1C,EAAQ2C,CAAW,EAAE,IAAI,EACvE,OAAIR,IAAS,KACJnC,EAAQ2C,CAAW,EAAE,KAAM,EAAC,IAAG,EAEpCR,EAAK,YAAcL,EAAW,cAAc,UACvCK,EAAK,OAEP,IACR,CACD,OAAO,eAAenC,EAAS2C,EAAaC,EAAWC,EAAO,CAI5D,GAHIF,EAAc,GAAKA,GAAe3C,EAAQ,QAG1C4C,IAAcd,EAAW,cAAc,KACzC,OAAO,KAET,IAAIK,EAAOnC,EAAQ2C,CAAW,EAAE,KAAI,EACpC,OAAQC,EAAS,CACf,KAAKd,EAAW,cAAc,UAC5BK,EAAOA,EAAK,MACZ,MACF,KAAKL,EAAW,cAAc,WAC5BK,EAAOA,EAAK,OACZ,KAGH,CACD,OAAIU,IACFV,EAAOA,EAAK,OAEPA,CACR,CASD,OAAO,oBAAoBO,EAAO1C,EAAS2C,EAAa,CACtD,IAAIG,EAAgB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACxF,GAAIH,EAAc,GAAKA,GAAe3C,EAAQ,OAC5C,MAAO,GAET,IAAI+C,EAAUjB,EAAW,YAAY9B,EAAS0C,EAAOC,CAAW,EAChE,OAAOb,EAAW,iBAAiBY,EAAO1C,EAAQ2C,CAAW,EAAE,KAAMI,EAASD,CAAa,CAC5F,CACD,OAAO,WAAWJ,EAAO1C,EAASgD,EAAaJ,EAAWC,EAAOC,EAAe,CAC9E,GAAIE,EAAc,GAAKA,GAAehD,EAAQ,OAC5C,MAAO,GAET,IAAI+C,EAAUjB,EAAW,eAAe9B,EAASgD,EAAaJ,EAAWC,CAAK,EAC9E,OAAOf,EAAW,iBAAiBY,EAAO1C,EAAQgD,CAAW,EAAE,KAAMD,EAASD,CAAa,CAC5F,CAUD,OAAO,iBAAiBR,EAAW7D,EAAY0D,EAAM,CACnD,IAAIW,EAAgB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACpFP,EAAYT,EAAW,aAAaQ,EAAW7D,CAAU,EACzDiE,EAAQ,GACZ,OAAII,IACFJ,EAAQA,EAAM,OAAOJ,EAAU,OAAOzC,GAAQ,CAC5C,GAAI,CACF,UAAA+C,CACD,EAAG/C,EACJ,OAAO+C,IAAcd,EAAW,cAAc,OAC/C,EAAC,EACES,IAAc,MAChBG,EAAM,OAAOH,EAAW,CAAC,GAGzBJ,IAAS,MACXO,EAAM,KAAKP,CAAI,EAEVO,CACR,CACD,OAAO,kBAAkBF,EAAY,CACnC,OAAQA,EAAU,CAChB,IAAK,UACL,IAAK,oBACL,KAAKV,EAAW,SAAS,QACvB,OAAOA,EAAW,SAAS,QAC7B,IAAK,OACL,IAAK,sBACL,KAAKA,EAAW,SAAS,KACvB,OAAOA,EAAW,SAAS,KAC7B,IAAK,mBACL,KAAKA,EAAW,SAAS,OACvB,OAAOA,EAAW,SAAS,OAC7B,IAAK,0CACL,IAAK,6BACL,IAAK,8CACL,IAAK,oBACL,IAAK,0BACL,KAAKA,EAAW,SAAS,SACvB,OAAOA,EAAW,SAAS,SAC7B,IAAK,SACL,IAAK,mBACL,IAAK,QACL,IAAK,kBACL,IAAK,uBACL,KAAKA,EAAW,SAAS,QACvB,OAAOA,EAAW,SAAS,QAC7B,IAAK,MACL,IAAK,oBACL,IAAK,OACL,IAAK,iBACL,IAAK,QACL,IAAK,kBACL,IAAK,OACL,IAAK,iBACL,IAAK,uBACL,KAAKA,EAAW,SAAS,IACvB,OAAOA,EAAW,SAAS,IAC7B,QACE,OAAOA,EAAW,SAAS,OAC9B,CACF,CACD,OAAO,WAAWU,EAAY,CAC5B,OAAQA,EAAU,CAChB,IAAK,OACL,IAAK,iBACH,MAAO,GACT,QACE,MAAO,EACV,CACF,CACD,OAAO,WAAWA,EAAY,CAC5B,OAAQA,EAAU,CAChB,IAAK,0CACL,IAAK,6BACL,IAAK,oBACL,IAAK,0BACL,IAAK,8CACH,MAAO,GACT,QACE,MAAO,EACV,CACF,CACD,OAAO,aAAaA,EAAY,CAC9B,OAAOV,EAAW,cAAcU,CAAU,GAAKV,EAAW,cAAcU,CAAU,CACnF,CACD,OAAO,cAAcA,EAAY,CAC/B,OAAQA,EAAU,CAChB,IAAK,MACL,IAAK,oBACL,IAAK,uBACL,IAAK,OACL,IAAK,iBACL,IAAK,QACL,IAAK,kBACL,IAAK,OACL,IAAK,iBACH,MAAO,GACT,QACE,MAAO,EACV,CACF,CACD,OAAO,cAAcA,EAAY,CAC/B,OAAQA,EAAU,CAChB,IAAK,SACL,IAAK,mBACL,IAAK,uBACL,IAAK,QACL,IAAK,kBACH,MAAO,GACT,QACE,MAAO,EACV,CACF,CACD,OAAO,iBAAiBA,EAAY,CAClC,OAAQA,EAAU,CAChB,IAAK,uBACH,MAAO,GACT,QACE,MAAO,EACV,CACF,CACD,OAAO,iBAAiBA,EAAY,CAClC,OAAQA,EAAU,CAChB,IAAK,uBACH,MAAO,GACT,QACE,MAAO,EACV,CACF,CACD,OAAO,cAAcA,EAAY,CAC/B,OAAQA,EAAU,CAChB,IAAK,UACL,IAAK,oBACH,MAAO,GACT,QACE,MAAO,EACV,CACF,CACD,OAAO,WAAWA,EAAY,CAC5B,OAAQA,EAAU,CAChB,IAAK,OACL,IAAK,sBACH,MAAO,GACT,QACE,MAAO,EACV,CACF,CACD,OAAO,aAAaA,EAAY,CAC9B,OAAQA,EAAU,CAChB,IAAK,mBACH,MAAO,GACT,QACE,MAAO,EACV,CACF,CACD,OAAO,WAAWA,EAAY,CAC5B,OAAO,KAAK,aAAaA,CAAU,GAAK,KAAK,WAAWA,CAAU,CACnE,CAOD,OAAO,YAAYA,EAAY,CAC7B,OAAOA,EAAW,MAAM,IAAI,EAAE,CAAC,CAChC,CAQD,OAAO,iBAAiBS,EAAOC,EAAO,CACpC,OAAOpB,EAAW,kBAAkBmB,CAAK,IAAMnB,EAAW,kBAAkBoB,CAAK,CAClF,CAMD,OAAO,WAAWjX,EAAO,CACvB,OAAIA,EAAM,QAAU,IAAMA,EAAM,OAAO,CAAC,IAAM,KAAOA,EAAM,OAAOA,EAAM,OAAS,CAAC,IAAM,KAAOA,EAAM,OAAO,CAAC,IAAM,KAAOA,EAAM,OAAOA,EAAM,OAAS,CAAC,IAAM,KACpJA,EAEF,IAAK,OAAOA,EAAO,GAAI,CAC/B,CACD,OAAO,iBAAiBkX,EAAW,CACjC,OAAQA,EAAS,CACf,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,IAAK,KACL,IAAK,KACH,MAAO,GACT,QACE,MAAO,EACV,CACF,CAQD,OAAO,6BAA6BhE,EAAQgE,EAAWlX,EAAO,CAC5D,OAAQkX,EAAS,CACf,IAAK,IACH,OAAOhE,EAAO,GAAGlT,CAAK,EACxB,IAAK,IACH,OAAOkT,EAAO,SAASlT,CAAK,EAC9B,IAAK,KACL,IAAK,KACH,OAAOkT,EAAO,kBAAkBlT,CAAK,EACvC,IAAK,IACH,OAAOkT,EAAO,YAAYlT,CAAK,EACjC,IAAK,KACL,IAAK,KACH,OAAOkT,EAAO,qBAAqBlT,CAAK,EAC1C,IAAK,KACL,IAAK,IACH,OAAOkT,EAAO,MAAMlT,CAAK,EAC3B,QACE,OAAO,IACV,CACF,CAOD,OAAO,2BAA2BuU,EAAO,CACvC,OAAO/S,GAAa,eAAe+S,EAAO3S,GAAY,CACpDA,EAAS,MAAK,CACpB,CAAK,CACF,CAUD,OAAO,gCAAgC2S,EAAO4C,EAAW,CACvD,IAAIpL,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC9EqL,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAC9EC,EACApL,EACAqL,EAAY,GACZxV,EAAiB,IAAI,QAAQ,CAACC,EAASC,IAAW,CACpDiK,EAAY,WAAW,IAAM,CAC3BoL,IACAC,EAAY,GACZtV,EAAO,IAAIV,GAAa,UAAW,OAAO6V,EAAW,cAAe,CAAC,CAAC,CACvE,EAAEpL,CAAO,EACVsL,EAAe9C,EAAM,iBAAiB4C,EAAWnT,GAAS,CACxD,GAAIoT,GAAW,MAAQ,CAACA,EAAQpT,CAAK,EAAG,CACtC8D,GAAI,OAAO,8CAA8C,EACzD,MACD,CACDA,GAAI,OAAO,6BAA6B,EACxCuP,IACA,aAAapL,CAAS,EACtBqL,EAAY,GACZvV,EAAQiC,CAAK,CACrB,CAAO,CACP,CAAK,EACD,OAAAlC,EAAe,OAAS,IAAM,CAC5B,GAAIwV,EAAW,CACbxP,GAAI,OAAO,0BAA0B,EACrCuP,IACA,aAAapL,CAAS,EACtBqL,EAAY,GACZ,MACD,CACDxP,GAAI,OAAO,sCAAsC,CACvD,EACWhG,CACR,CACD,OAAO,aAAa9B,EAAO,CACzB,OAAOA,EAAM,QAAQ,UAAW,EAAE,CACnC,CACD,OAAO,iBAAiB2C,EAAM,CAC5B,IAAI4U,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACrF,GAAI5U,IAAS,IAAM4U,EACjB,OAAO,KAET,OAAQ5U,GAAS,KAA0B,OAASA,EAAK,YAAa,GACpE,IAAK,OACH,OAAO,KACT,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,IACL,IAAK,KACH,MAAO,GACT,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,MACL,IAAK,OACL,IAAK,IACL,IAAK,KACL,IAAK,MACH,MAAO,GACT,QACE,MAAM,IAAI,MAAM,oBAAoB,OAAOA,EAAM,GAAG,CAAC,CACxD,CACF,CACD,OAAO,gBAAgBA,EAAM,CAC3B,GAAIA,IAAS,QAAUA,IAAS,GAC9B,OAAO,KAET,IAAI6N,EAAY7N,EAAK,YAAa,EAAC,KAAI,EACvC,GAAI6N,IAAc,KAAOA,IAAc,YAAcA,IAAc,MACjE,OAAO,OAAO,kBAEhB,GAAIA,IAAc,MAAQA,IAAc,aAAeA,IAAc,OACnE,OAAO,OAAO,kBAEhB,IAAIgH,EAAa3B,EAAW,aAAarF,CAAS,EAClD,GAAIqF,EAAW,aAAa,KAAK2B,CAAU,EACzC,OAAO,WAAWA,CAAU,EAE9B,MAAM,IAAI,MAAM,mBAAmB,OAAO7U,EAAM,GAAG,CAAC,CACrD,CACD,OAAO,wBAAwBuU,EAAW,CACxC,OAAQA,EAAS,CACf,KAAKV,EAAW,GACd,MAAO,IACT,KAAKA,EAAW,MACd,MAAO,KACT,KAAKA,EAAW,YACd,MAAO,IACT,KAAKA,EAAW,qBACd,MAAO,KACT,KAAKA,EAAW,SACd,MAAO,IACT,KAAKA,EAAW,kBACd,MAAO,KACT,KAAKA,EAAW,SACd,MAAO,IACT,KAAKA,EAAW,YACd,MAAO,KACT,QACE,MAAM,IAAI,MAAM,0BAA0B,OAAOU,CAAS,CAAC,CAC9D,CACF,CACD,OAAO,mBAAmB3C,EAAO,CAC/B,OAAOA,GAAS,MAAQA,EAAM,iBAAmB,QAAaA,EAAM,cAAgB,QAAaA,EAAM,UAAY,MACpH,CACD,OAAO,YAAYA,EAAO,CACxB,OAAOA,GAAS,MAAQA,EAAM,SAAW,QAAaA,EAAM,WAAa,MAC1E,CAOD,OAAO,YAAYR,EAAS,CAC1B,IAAIhR,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACtF,MAAO,CAAC,GAAGgR,CAAO,EAAE,KAAK,CAAClR,EAAGC,IAAM,CACjC,IAAI2U,EAAQ5U,EAAE,KAAK,YAAW,EAC1B6U,EAAQ5U,EAAE,KAAK,YAAW,EAC9B,OAAOR,GAAU,KAAKmV,EAAOC,EAAO3U,CAAW,CACrD,CAAK,CACF,CACD,YAAY0J,EAAI,CACd5M,GAAgB,KAAM,KAAM,MAAM,EAClC,KAAK,GAAK4M,EACV/L,GAAe,IAAI,CACpB,CAYD,gCAAgC6T,EAAO/B,EAAYmF,EAAe,CAChE,IAAIC,EAAc,UAChBC,EAAQ,KACV,OAAOpC,GAAkB,WAAa,CACpC,GAAIlB,GAAS,KACX,OAAO,KAOT,QALIuD,EAAcvD,EAKTwD,EAAQH,EAAY,OAAQI,EAA2B,IAAI,MAAMD,EAAQ,EAAIA,EAAQ,EAAI,CAAC,EAAGE,EAAQ,EAAGA,EAAQF,EAAOE,IAC9HD,EAAyBC,EAAQ,CAAC,EAAIL,EAAYK,CAAK,EAErDD,EAAyB,OAAS,IACpCF,EAAc,MAAMvD,EAAM,OAC1B,MAAMuD,EAAY,YAAYtY,GAAuB,GAAGwY,EAAyB,IAAI,GAAK,EAAEF,CAAW,CAAC,CAAC,CAAC,GAE5G,IAAI/E,EAAS+E,EAAY,WAAWtF,CAAU,EAC1C0F,EAAgB,MAAMJ,EAAY,eAAe,CAAC/E,CAAM,CAAC,EAIzD+E,IAAgBvD,GAClBuD,EAAY,MAAK,EAEnB,IAAIK,EAAqBD,EAAc,WAAW1F,CAAU,EAAE,KAAM,EAACmF,CAAa,IAClF,OAAOE,EAAM,UAAUK,EAAe,CAACC,CAAkB,CAAC,CAC3D,IACF,CASD,qBAAqB5D,EAAO9C,EAAazR,EAAOoY,EAAiB,CAC/D,IAAIC,EAAS,KACb,OAAO5C,GAAkB,WAAa,CACpC,GAAIlB,GAAS,KACX,OAAO,KAET,IAAI+D,EAAyBjG,GAAkBgG,EAAQ5G,EAAazR,EAAOoY,EAAkB,KAAO,cAAc,EAC9GG,EAAY,MAAMhE,EAAM,OAC5B,MAAM8D,EAAO,YAAYE,EAAW/Y,GAAuB8Y,EAAuBC,CAAS,CAAC,CAAC,EAC7F,IAAIC,EAAOlE,GAAQiE,CAAS,EAC5B,OAAAA,EAAU,MAAK,EACRC,EAAO,CACf,IACF,CASD,gBAAgBzF,EAAQpQ,EAAMkL,EAAU,CAGtC,QAFI4K,EAAe9V,EAAK,MAAM,IAAI,EAC9B+V,EAAW,KACN9Q,EAAI,EAAGA,EAAI6Q,EAAa,OAAQ7Q,GAAK,EAAG,CAI/C,QAHI+Q,EAAcF,EAAa7Q,CAAC,EAC5BgR,EAAgBD,EAAY,MAAM,IAAI,EACtCE,EAAY,KACPC,EAAI,EAAGA,EAAIF,EAAc,OAAQE,GAAK,EAAG,CAChD,IAAIC,EAAeH,EAAcE,CAAC,EAAE,KAAI,EACxC,GAAIC,EAAa,OAAS,EAAG,CAC3B,IAAI7F,EAAS,KAAK,6BAA6BH,EAAQgG,EAAclL,CAAQ,EAC7E,GAAIqF,EACE2F,EACFA,EAAYA,EAAU,IAAI3F,CAAM,EAEhC2F,EAAY3F,MAGd,OAAM,IAAI,MAAM,0CAA0C,OAAOvQ,CAAI,CAAC,CAEzE,CACF,CACG+V,GAAYG,EACdH,EAAWA,EAAS,GAAGG,CAAS,EAEhCH,EAAWG,CAEd,CACD,OAAOH,CACR,CASD,6BAA6B3F,EAAQpQ,EAAMkL,EAAU,CACnD,GAAI,CACF,KAAAd,CACD,EAAGgG,EACJ,OAAI8C,EAAW,aAAa9I,CAAI,EACvB,KAAK,sBAAsBgG,EAAQpQ,CAAI,EAE5CkT,EAAW,cAAc9I,CAAI,EACxB,KAAK,uBAAuBgG,EAAQpQ,CAAI,EAE7CkL,GAAY,MAAQgI,EAAW,WAAW9I,CAAI,EACzC,KAAK,oBAAoBgG,EAAQpQ,EAAMkL,CAAQ,EAEpDgI,EAAW,WAAW9I,CAAI,EACrB,KAAK,oBAAoBgG,EAAQpQ,CAAI,EAEvC,KAAK,oBAAoBoQ,EAAQpQ,CAAI,CAC7C,CACD,sBAAsBoQ,EAAQpQ,EAAM,CAClC,IAAIqW,EAAejG,EAAO,SACtB,CACF,GAAAtG,CACD,EAAG,KACAyG,EAAS,KACT7C,EAAQ,8GACRC,EAASD,EAAM,KAAK1N,CAAI,EACxBuU,EAAY,KACZ+B,EAAe,KACfjZ,EAAQ,KACRkZ,EAAgB,KAChB3I,EAAW,KAIf,GAHID,IAAW,MAAQA,EAAO,OAAS,IACrC,CAAG,CAAA4G,EAAW+B,EAAcjZ,EAAOkZ,EAAe3I,CAAQ,EAAID,GAE5DC,GAAY,MAAQA,EAAS,KAAM,EAAC,OAAS,EAE/C,OAAO,KAKT,GAHI2G,GAAa,OACfA,EAAY,KAEVgC,GAAiB,KAAM,CACzB,GAAI,EAAEhC,IAAc,KAAOA,IAAc,KAAOA,IAAc,MAE5D,OAAO,KAGT,OADAgC,EAAgBA,EAAc,KAAM,EAAC,YAAW,EACxCA,EAAa,CACnB,IAAK,OACHhG,EAAS8F,EAAa,SACtB,MACF,IAAK,MACH9F,EAASzG,EAAG,gBAAgB,OAAO,QAASuM,CAAY,EACxD,MACF,IAAK,WACL,IAAK,MACL,IAAK,IACCC,GAAgB,KAClB/F,EAASzG,EAAG,gBAAgB,OAAO,QAASuM,CAAY,EAAE,IAAIA,EAAa,SAASvM,EAAG,YAAY,SAAS,CAAC,CAAC,CAAC,EAE/GyG,EAASzG,EAAG,gBAAgB,OAAO,QAASuM,CAAY,EAAE,IAAIA,EAAa,YAAYvM,EAAG,YAAY,SAAS,CAAC,CAAC,CAAC,EAEpH,KAGH,CACD,OAAIyG,IAAW,OAASgE,IAAc,KAAOA,IAAc,QACzDhE,EAASA,EAAO,OAEXA,CACR,CACD,GAAIlT,GAAS,KACX,OAAO,KAGT,GADAA,EAAQ6V,EAAW,aAAa7V,CAAK,EACjC6V,EAAW,WAAW9C,EAAO,IAAI,EACnC,GAAI,CACF/S,EAAQyM,EAAG,YAAY,SAASA,EAAG,YAAY,SAAS,GAAG,OAAOwM,GAAgB,KAAO,IAAM,EAAE,EAAE,OAAOjZ,CAAK,CAAC,CAAC,CAClH,OAAQkC,EAAO,CACd4F,UAAI,KAAK,+BAAgC5F,CAAK,EACvC,IACR,KACI,CAEL,GADAlC,EAAQ,WAAWA,CAAK,EACpBA,GAAS,MAAQ,OAAO,MAAMA,CAAK,EACrC,OAAO,KAETA,EAAQyM,EAAG,YAAY,SAASwM,GAAgB,KAAO,EAAIjZ,EAAQA,CAAK,CACzE,CACD,OAAAkT,EAASH,EAAO,SACT8C,EAAW,6BAA6B3C,EAAQgE,EAAWlX,CAAK,CACxE,CAQD,OAAO,sBAAsBmZ,EAAiB,CAC5C,IAAIC,EAAYC,EAChB,GAAIF,GAAmB,KAAM,OAAO,KACpC,IAAI9I,EAAQ,sBAERiJ,EAAY,YACZhJ,EAASD,EAAM,KAAK8I,CAAe,EACnCjC,EAAY,KACZlX,EAAQ,KAIZ,GAHIsQ,IAAW,MAAQA,EAAO,OAAS,IACrC,EAAG4G,EAAWlX,CAAK,EAAIsQ,GAErB4G,GAAa,KAAM,CACrB,IAAIqC,EACJ,MAAO,KAAK,OAAOrC,CAAS,EAAE,QAAQqC,EAASvZ,KAAW,MAAQuZ,IAAW,OAASA,EAAS,EAAE,CAClG,CAKD,OAJIvZ,GAAS,MAAQsZ,EAAU,KAAKtZ,EAAM,YAAW,CAAE,GAInDA,GAAS,MAAQA,EAAM,WAAW,GAAG,EAChC,KAAK,OAAOA,CAAK,EAEtBA,GAAS,MAAQA,EAAM,SAAS,GAAG,GAAK,CAACA,EAAM,SAAS,KAAK,GAC/DA,EAAQA,EAAM,UAAU,EAAGA,EAAM,OAAS,CAAC,EACpC,GAAG,OAAOA,EAAO,KAAK,GAExB,GAAG,QAAQoZ,EAAalC,KAAe,MAAQkC,IAAe,OAASA,EAAa,EAAE,EAAE,QAAQC,EAAUrZ,KAAW,MAAQqZ,IAAY,OAASA,EAAU,EAAE,CACtK,CAQD,OAAO,wBAAwBF,EAAiB,CAC9C,IAAIK,EAAaC,EACbpJ,EAAQ,gCAERiJ,EAAY,YACZhJ,EAASD,EAAM,KAAK8I,CAAe,EACnCjC,EAAY,KACZlX,EAAQ,KAcZ,OAbIsQ,IAAW,MAAQA,EAAO,OAAS,IACrC,EAAG4G,EAAWlX,CAAK,EAAIsQ,GAErB4G,GAAa,OACfA,EAAYA,EAAU,QAAQ,KAAM,EAAE,GAEpClX,GAAS,MAAQsZ,EAAU,KAAKtZ,EAAM,YAAW,CAAE,IAErDA,EAAQA,EAAM,QAAQ,KAAM,EAAE,GAE5BkX,GAAa,MAAQlX,GAAS,MAAQA,EAAM,WAAW,KAAK,IAC9DA,EAAQA,EAAM,UAAU,CAAC,GAEvBkX,GAAa,MAAQlX,GAAS,MAAQA,EAAM,SAAS,KAAK,GAC5DA,EAAQA,EAAM,UAAU,EAAGA,EAAM,OAAS,CAAC,EACpC,GAAG,OAAOA,EAAO,GAAG,GAEtB,GAAG,QAAQwZ,EAActC,KAAe,MAAQsC,IAAgB,OAASA,EAAc,EAAE,EAAE,QAAQC,EAAUzZ,KAAW,MAAQyZ,IAAY,OAASA,EAAU,EAAE,CACzK,CACD,oBAAoB1G,EAAQpQ,EAAM,CAChC,GAAI,CACF,GAAA8J,CACD,EAAG,KACA+D,EAAY,GAAG,OAAO7N,CAAI,EAAE,KAAI,EAChC0N,EAAQ,sBACRC,EAASD,EAAM,KAAKG,CAAS,EAC7B0G,EAAY,KACZlX,EAAQ,KAYZ,GAXIsQ,IAAW,MAAQA,EAAO,OAAS,IACrC,EAAG4G,EAAWlX,CAAK,EAAIsQ,EACnBtQ,GAAS,OACXA,EAAQA,EAAM,SAGdA,GAAS,MAKTA,EAAM,SAAW,GAAK,EAAEkX,IAAc,KAAOA,IAAc,MAC7D,OAAO,KAILA,GAAa,OACfA,EAAY,KAEd,IAAIhE,EAASH,EAAO,SACpB,GAAI/S,EAAM,YAAa,IAAK,OAE1B,OAAQkX,EAAS,CACf,IAAK,IACH,OAAOhE,EAAO,SAChB,IAAK,KACL,IAAK,IACH,OAAOA,EAAO,SAAS,KAG1B,CAGH,IAAIwG,EAAS,KACTC,EAAS,KAWb,OAVI3Z,EAAM,WAAW,GAAG,GACtB0Z,EAAS,IACT1Z,EAAQA,EAAM,UAAU,CAAC,GAChBA,EAAM,SAAS,GAAG,GAAK,CAACA,EAAM,SAAS,KAAK,IACrD2Z,EAAS,IACT3Z,EAAQA,EAAM,UAAU,EAAGA,EAAM,OAAS,CAAC,GAI7CA,EAAQ6V,EAAW,wBAAwB7V,CAAK,EACxCkX,EAAS,CACf,IAAK,IAED,OAAOhE,EAAO,SAAS,IAAK,EAAC,IAAIA,EAAO,OAAO,UAAWzG,EAAG,YAAY,SAAS,gBAAgB,OAAOzM,EAAO,OAAO,CAAC,CAAC,CAAC,EAE9H,IAAK,KACH,OAAOkT,EAAO,SAAS,GAAGA,EAAO,OAAO,UAAWzG,EAAG,YAAY,SAAS,gBAAgB,OAAOzM,EAAO,OAAO,CAAC,CAAC,EAAE,IAAG,CAAE,EAC3H,IAAK,KACH,OAAI0Z,IAAW,IAENxG,EAAO,SAAS,GAAGA,EAAO,OAAO,UAAWzG,EAAG,YAAY,SAAS,gBAAgB,OAAOzM,EAAO,MAAM,CAAC,CAAC,EAAE,IAAG,CAAE,EAEtH2Z,IAAW,IAENzG,EAAO,SAAS,GAAGA,EAAO,OAAO,UAAWzG,EAAG,YAAY,SAAS,eAAe,OAAOzM,EAAO,OAAO,CAAC,CAAC,EAAE,IAAG,CAAE,EAEnHkT,EAAO,gBAAgBzG,EAAG,YAAY,SAASzM,EAAM,YAAa,EAAC,EAC5E,IAAK,IACH,OAAI0Z,IAAW,IAENxG,EAAO,SAAS,IAAK,EAAC,IAAIA,EAAO,OAAO,UAAWzG,EAAG,YAAY,SAAS,gBAAgB,OAAOzM,EAAO,MAAM,CAAC,CAAC,CAAC,EAEvH2Z,IAAW,IAENzG,EAAO,SAAS,IAAK,EAAC,IAAIA,EAAO,OAAO,UAAWzG,EAAG,YAAY,SAAS,eAAe,OAAOzM,EAAO,OAAO,CAAC,CAAC,CAAC,EAEpHkT,EAAO,aAAazG,EAAG,YAAY,SAASzM,EAAM,YAAa,EAAC,CAG1E,CACD,OAAO,IACR,CAGD,uBAAuB+S,EAAQpQ,EAAM,CACnC,IAAI0N,EAAQ,iBACRC,EAASD,EAAM,KAAK,GAAG,OAAO1N,CAAI,EAAE,KAAI,CAAE,EAC9C,GAAI2N,IAAW,KACb,OAAO,KAET,GAAI,EAAG4G,EAAWlX,CAAK,EAAIsQ,EACvBsJ,EAAW1C,IAAc,KAAOA,IAAc,KAC9C2C,EAAa7Z,EAAM,KAAM,EAAC,YAAW,EACrCkT,EAASH,EAAO,SACpB,GAAI,CACF,IAAI+G,EAAYjE,EAAW,iBAAiBgE,CAAU,EACtD,OAAIC,GAAa,MAAQA,EACvB5G,EAASA,EAAO,SACP4G,IAAc,KACvB5G,EAASA,EAAO,SAEhBA,EAASA,EAAO,UAEX0G,EAAW1G,EAAO,IAAG,EAAKA,CAClC,MAAW,CACV,OAAO,IACR,CACF,CAQD,oBAAoBH,EAAQpQ,EAAMkL,EAAU,CAC1C,IAAI2C,EAAY7N,EAAK,OACjB0N,EAAQ,mCACRC,EAASD,EAAM,KAAKG,CAAS,EACjC,GAAIF,GAAU,MAAQA,EAAO,QAAU,EACrC,MAAM,IAAI,MAAM,gCAAgC,OAAO3N,CAAI,CAAC,EAE9D,IAAIuU,EAAY,KACZ6C,EAAW,KACf,EAAG7C,EAAW6C,CAAQ,EAAIzJ,EAC1B,IAAI0J,EAAkBxD,EAAW,GACjC,OAAQU,EAAS,CACf,IAAK,IACH8C,EAAkBxD,EAAW,SAC7B,MACF,IAAK,KACL,IAAK,KACHwD,EAAkBxD,EAAW,kBAC7B,MACF,IAAK,IACHwD,EAAkBxD,EAAW,YAC7B,MACF,IAAK,KACL,IAAK,KACHwD,EAAkBxD,EAAW,qBAC7B,MACF,IAAK,KACL,IAAK,IACHwD,EAAkBxD,EAAW,MAC7B,MACF,IAAK,IACL,IAAK,KACL,QACEwD,EAAkBxD,EAAW,GAC7B,KACH,CACD,OAAO,KAAK,iCAAiCzD,EAAQgH,EAAUC,EAAiBnM,CAAQ,CACzF,CASD,iCAAiCkF,EAAQpQ,EAAMuU,EAAWrJ,EAAU,CAClE,GAAI,CACF,GAAApB,CACD,EAAG,KACA,CAACyE,EAAWC,CAAO,EAAI3C,EAAU,eAAe/B,EAAI9J,EAAMkL,CAAQ,EAClEoM,EAAa/I,GAAa,KAAOzE,EAAG,YAAY,SAASyE,CAAS,EAAI,KACtEgJ,EAAW/I,GAAW,KAAO1E,EAAG,YAAY,SAAS0E,CAAO,EAAI,KAChE+B,EAASH,EAAO,SACpB,GAAIkH,GAAc,KAChB,OAAO/C,IAAcV,EAAW,MAAQtD,EAAO,OAAQ,EAAC,IAAK,EAAGA,EAAO,SAEzE,OAAQgE,EAAS,CACf,KAAKV,EAAW,GACd,CACE,GAAI0D,GAAY,KAAM,CACpB,IAAIC,EAAcjH,EAAO,qBAAqB+G,CAAU,EACpDG,EAAYlH,EAAO,SAASgH,CAAQ,EACxC,OAAOC,EAAY,IAAIC,CAAS,CACjC,CACD,OAAOlH,EAAO,GAAG+G,CAAU,CAC5B,CACH,KAAKzD,EAAW,SAEZ,OAAOtD,EAAO,SAAS+G,CAAU,EAErC,KAAKzD,EAAW,kBAEZ,OAAI0D,GAAY,KACPhH,EAAO,SAASgH,CAAQ,EAE1BhH,EAAO,kBAAkB+G,CAAU,EAE9C,KAAKzD,EAAW,YAEZ,OAAI0D,GAAY,KACPhH,EAAO,qBAAqBgH,CAAQ,EAEtChH,EAAO,YAAY+G,CAAU,EAExC,KAAKzD,EAAW,qBACd,OAAOtD,EAAO,qBAAqB+G,CAAU,EAC/C,KAAKzD,EAAW,MACd,CACE,GAAI0D,GAAY,KAAM,CACpB,IAAIG,EAAenH,EAAO,SAAS+G,CAAU,EACzCK,EAAapH,EAAO,qBAAqBgH,CAAQ,EACrD,OAAOG,EAAa,GAAGC,CAAU,CAClC,CACD,OAAOpH,EAAO,MAAM+G,CAAU,CAC/B,CACH,QACE,MAAM,IAAI,MAAM,qBAAqB,OAAO/C,CAAS,CAAC,CACzD,CACF,CACD,oBAAoBnE,EAAQpQ,EAAM,CAChC,GAAI,CACF,GAAA8J,CACD,EAAG,KACA+D,EAAY,GAAG,OAAO7N,CAAI,EAAE,KAAI,EAChC0N,EAAQ,kDACRC,EAASD,EAAM,KAAKG,CAAS,EAC7B0G,EAAY,KACZlX,EAAQ,KACRuQ,EAAW,KAQf,GAPID,IAAW,MAAQA,EAAO,OAAS,IACrC,EAAG4G,EAAWlX,EAAOuQ,CAAQ,EAAID,GAE/BC,GAAY,MAAQA,EAAS,KAAM,EAAC,OAAS,GAI7CvQ,GAAS,MAAQA,EAAM,SAAW,EACpC,OAAO,KAELkX,GAAa,OACfA,EAAY,KAEd,IAAIhE,EAASH,EAAO,SACpB,GAAI/S,EAAM,YAAa,IAAK,OAE1B,OAAQkX,EAAS,CACf,IAAK,IACH,OAAOhE,EAAO,SAChB,IAAK,KACL,IAAK,IACH,OAAOA,EAAO,SAAS,MACzB,QACE,OAAO,IACV,CAIH,IAAIqH,EAAc9N,EAAG,YAAY,SAASoJ,EAAW,iBAAiBqB,CAAS,EAAIrB,EAAW,WAAW7V,CAAK,EAAIA,CAAK,EACvH,OAAO6V,EAAW,6BAA6B3C,EAAQgE,EAAWqD,CAAW,CAC9E,CACD,mBAAmBxH,EAAQtK,EAASoF,EAAU,CAQ5C,OAPI,CACF,YAAA2M,EACA,gBAAAC,EACA,gBAAA9H,EACA,eAAA+H,CACD,EAAGjS,EACAyK,EAAS,KACJtL,EAAI,EAAGA,EAAI4S,EAAY,OAAQ5S,GAAK,EAAG,CAC9C,IAAI+S,EAAaH,EAAY5S,CAAC,EAC1B,CACF,aAAAgT,EACA,MAAA5a,CACD,EAAG2a,EACJ,GAAIC,GAAgB,MAAQA,EAAa,OAAS,GAAK5a,GAAS,MAAQA,EAAM,OAAS,EACrF,GAAI,CACF,IAAI6a,EAAY,KAAK,wBAAwB9H,EAAQ6H,EAAc5a,EAAO6N,CAAQ,EAClF,GAAIgN,GAAa,MACf,GAAIjT,IAAM,EACRsL,EAAS2H,UACA3H,IAAW,MAAQtL,EAAI,EAAI6S,EAAgB,OAAQ,CAC5D,IAAIK,EAAiBL,EAAgB7S,EAAI,CAAC,EAC1C,GAAIkT,IAAmBC,GAAe,IACpC7H,EAASA,EAAO,IAAI2H,CAAS,UACpBC,IAAmBC,GAAe,GAC3C7H,EAASA,EAAO,GAAG2H,CAAS,MACvB,CACL/S,GAAI,MAAM,6BAA8BgT,EAAgBD,CAAS,EACjE3H,EAAS,KACT,KACD,CACF,OAEDpL,GAAI,OAAO,2BAA4B8S,EAAc5a,CAAK,CAE7D,OAAQqC,EAAK,CACZyF,GAAI,MAAM,0BAA2BzF,CAAG,EACxC6Q,EAAS,KACT,KACD,CAEJ,CACD,IAAI8H,EAAoB,KAAK,sBAAsBjI,EAAQ2H,EAAgB/H,CAAe,EAC1F,OAAIqI,GAAqB,OACnB9H,GAAU,KACZA,EAASA,EAAO,IAAI8H,CAAiB,EAErC9H,EAAS8H,GAGN9H,CACR,CACD,wBAAwBH,EAAQmE,EAAWlX,EAAO6N,EAAU,CAC1D,GAAI,CACF,GAAApB,CACD,EAAG,KACJ,GAAIoJ,EAAW,WAAW9C,EAAO,IAAI,EACnC,OAAO,KAAK,iCAAiCA,EAAQ/S,EAAOkX,EAAWrJ,CAAQ,EAEjF,GAAIgI,EAAW,aAAa9C,EAAO,IAAI,GAAK8C,EAAW,WAAW9C,EAAO,IAAI,EAC3E,OAAO,KAAK,gBAAgBA,EAAQ,GAAG,OAAO8C,EAAW,wBAAwBqB,CAAS,CAAC,EAAE,OAAOlX,CAAK,CAAC,EAE5G,IAAIua,EAAc,KAAK,gBAAgBxH,EAAO,KAAM/S,CAAK,EACrDkT,EAASH,EAAO,SACpB,OAAQmE,EAAS,CACf,KAAKV,EAAW,GACd,OAAOtD,EAAO,GAAGqH,CAAW,EAC9B,KAAK/D,EAAW,aACd,OAAOtD,EAAO,aAAaqH,CAAW,EACxC,KAAK/D,EAAW,MACd,OAAOtD,EAAO,MAAMqH,CAAW,EACjC,KAAK/D,EAAW,gBACd,OAAOtD,EAAO,gBAAgBqH,CAAW,EAC3C,KAAK/D,EAAW,YACd,OAAOtD,EAAO,YAAYqH,CAAW,EACvC,KAAK/D,EAAW,qBACd,OAAOtD,EAAO,qBAAqBqH,CAAW,EAChD,KAAK/D,EAAW,SACd,OAAOtD,EAAO,SAASqH,CAAW,EACpC,KAAK/D,EAAW,kBACd,OAAOtD,EAAO,kBAAkBqH,CAAW,EAC7C,KAAK/D,EAAW,OACd,OAAOtD,EAAO,SAChB,KAAKsD,EAAW,QACd,OAAOtD,EAAO,UAChB,KAAKsD,EAAW,OACd,OAAOtD,EAAO,SAChB,KAAKsD,EAAW,SACd,OAAOtD,EAAO,SAAS,IAAK,EAAC,IAAIA,EAAO,OAAO,UAAWzG,EAAG,YAAY,SAAS,gBAAgB,OAAOzM,EAAO,OAAO,CAAC,CAAC,CAAC,EAC5H,KAAKwW,EAAW,YACd,OAAOtD,EAAO,SAAS,GAAGA,EAAO,OAAO,UAAWzG,EAAG,YAAY,SAAS,gBAAgB,OAAOzM,EAAO,OAAO,CAAC,CAAC,EAAE,IAAG,CAAE,EAC3H,KAAKwW,EAAW,WACd,OAAOtD,EAAO,SAAS,IAAK,EAAC,IAAIA,EAAO,OAAO,UAAWzG,EAAG,YAAY,SAAS,eAAe,OAAOzM,EAAO,OAAO,CAAC,CAAC,CAAC,EAC3H,KAAKwW,EAAW,SACd,OAAOtD,EAAO,SAAS,IAAK,EAAC,IAAIA,EAAO,OAAO,UAAWzG,EAAG,YAAY,SAAS,gBAAgB,OAAOzM,EAAO,MAAM,CAAC,CAAC,CAAC,EAC3H,KAAKwW,EAAW,GAChB,KAAKA,EAAW,aAChB,KAAKA,EAAW,MAChB,KAAKA,EAAW,gBAChB,KAAKA,EAAW,OAChB,QACE,MAAM,IAAI,MAAM,gCAAgC,OAAOU,CAAS,CAAC,CACpE,CACF,CAWD,iBAAiB3C,EAAO/B,EAAY,CAClC,IAAIyI,EAAc,UAChBC,EAAS,KACX,OAAOzF,GAAkB,WAAa,CACpC,IAAI1J,EAAUkP,EAAY,OAAS,GAAKA,EAAY,CAAC,IAAM,OAAYA,EAAY,CAAC,EAAIpF,EAAW,8BACnG,GAAItB,GAAS,KACX,OAAO,KAET,IAAIxB,EAASwB,EAAM,WAAW/B,CAAU,EACpC2I,EAAU,CAACD,EAAO,gBAAgBnI,CAAM,CAAC,EAC7C,aAAMmI,EAAO,YAAY3G,EAAO4G,EAASpP,CAAO,EACzCwI,CACR,IACF,CAUD,mBAAmBA,EAAOR,EAAS,CACjC,IAAIqH,EAAc,UAChBC,EAAS,KACX,OAAO5F,GAAkB,WAAa,CACpC,IAAI1J,EAAUqP,EAAY,OAAS,GAAKA,EAAY,CAAC,IAAM,OAAYA,EAAY,CAAC,EAAIvF,EAAW,8BAC/F,CACF,GAAApJ,CACD,EAAG4O,EACJ,OAAOxF,EAAW,uBAAuByF,GAAKA,GAAM,KAAuB,OAASA,EAAE,mBAAmBvH,CAAO,EAAGQ,EAAO9H,EAAG,MAAM,2BAA4BV,CAAO,CACvK,IACF,CAWD,YAAYwI,EAAO4G,EAAS,CAC1B,IAAII,EAAc,UAChBC,EAAS,KACX,OAAO/F,GAAkB,WAAa,CACpC,IAAI1J,EAAUwP,EAAY,OAAS,GAAKA,EAAY,CAAC,IAAM,OAAYA,EAAY,CAAC,EAAI1F,EAAW,8BAC/F,CACF,GAAApJ,CACD,EAAG+O,EACJ,OAAO3F,EAAW,uBAAuByF,GAAKA,GAAM,KAAuB,OAASA,EAAE,YAAYH,CAAO,EAAG5G,EAAO9H,EAAG,MAAM,oBAAqBV,CAAO,CACzJ,IACF,CAWD,UAAUwI,EAAOkC,EAAO,CACtB,IAAIgF,EAAc,UAChBC,EAAS,KACX,OAAOjG,GAAkB,WAAa,CACpC,IAAI1J,EAAU0P,EAAY,OAAS,GAAKA,EAAY,CAAC,IAAM,OAAYA,EAAY,CAAC,EAAI5F,EAAW,8BAC/F,CACF,GAAApJ,CACD,EAAGiP,EACJ,OAAO7F,EAAW,uBAAuByF,GAAKA,GAAM,KAAuB,OAASA,EAAE,UAAU7E,CAAK,EAAGlC,EAAO9H,EAAG,MAAM,kBAAmBV,CAAO,CACnJ,IACF,CAMD,gBAAgBgH,EAAQ,CACtB,GAAI,CACF,GAAAtG,CACD,EAAG,KACAzM,EAAQ,KACR6V,EAAW,WAAW9C,EAAO,IAAI,EAEnC/S,EAAQyM,EAAG,YAAY,SAAS,GAAG,EAC1BoJ,EAAW,cAAc9C,EAAO,IAAI,EAC7C/S,EAAQyM,EAAG,YAAY,UAAU,EAAI,EAC5BoJ,EAAW,WAAW9C,EAAO,IAAI,EAC1C/S,EAAQyM,EAAG,YAAY,SAASA,EAAG,YAAY,SAAS,IAAI,IAAM,CAAC,EAEnEzM,EAAQyM,EAAG,YAAY,SAAS,CAAC,EAEnC,IAAIkP,EAAW5I,EAAO,OAAQ,EAAC,GAAG/S,CAAK,EACnC4b,EAAc7I,EAAO,OAAQ,EAAC,MAAM/S,CAAK,EAC7C,OAAO2b,EAAS,IAAIC,CAAW,CAChC,CAOD,gBAAgBrF,EAAYvW,EAAO,CACjC,GAAI,CACF,GAAAyM,CACD,EAAG,KACAM,EAAO8I,EAAW,YAAYU,CAAU,EAC5C,OAAIV,EAAW,WAAW9I,CAAI,EACrBN,EAAG,YAAY,SAASzM,CAAK,EAElC6V,EAAW,WAAW9I,CAAI,EACrBN,EAAG,YAAY,SAASA,EAAG,YAAY,SAASoJ,EAAW,aAAa7V,CAAK,CAAC,CAAC,EAEjFyM,EAAG,YAAY,SAASoJ,EAAW,aAAa7V,CAAK,CAAC,CAC9D,CASD,mBAAmBuW,EAAYsF,EAAU,CACvC,GAAI,CACF,GAAApP,CACD,EAAG,KACJ,OAAIoJ,EAAW,WAAWU,CAAU,EAC3B9J,EAAG,YAAY,SAAS,OAAOoP,GAAa,SAAW,OAAO,aAAaA,CAAQ,EAAIA,CAAQ,EAEpGhG,EAAW,WAAWU,CAAU,EAC3B9J,EAAG,YAAY,SAASoP,CAAQ,EAErChG,EAAW,cAAcU,CAAU,EAC9B9J,EAAG,YAAY,UAAUoP,CAAQ,EAEnCpP,EAAG,YAAY,SAASoP,CAAQ,CACxC,CAQD,UAAUtF,EAAY5T,EAAMkL,EAAU,CACpC,GAAI,CACF,GAAApB,CACD,EAAG,KACJ,GAAI9J,IAAS,OACX,OAAO,KAET,GAAIkT,EAAW,WAAWU,CAAU,EAClC,OAAO5T,EAET,GAAIkT,EAAW,WAAWU,CAAU,EAClC,OAAO9J,EAAG,YAAY,SAASoJ,EAAW,aAAalT,CAAI,CAAC,EAE9D,GAAIkT,EAAW,cAAcU,CAAU,EACrC,OAAOV,EAAW,iBAAiBlT,EAAM,EAAI,EAE/C,GAAIkT,EAAW,WAAWU,CAAU,EAAG,CACrC,GAAI,CAAC1G,CAAI,EAAIrB,EAAU,eAAe/B,EAAI9J,EAAMkL,CAAQ,EACxD,OAAOgC,CACR,CACD,OAAIgG,EAAW,aAAaU,CAAU,EAC7BV,EAAW,gBAAgBlT,CAAI,GAExCmF,GAAI,MAAM,yBAA0ByO,CAAU,EACvC,KACR,CAWD,sBAAsBxD,EAAQ2H,EAAgB/H,EAAiB,CAC7D,GAAI,CACF,GAAAlG,CACD,EAAG,KACJ,GAAIiO,EAAe,SAAW,EAC5B,OAAI/H,EAEK,KAMF,KAAK,gBAAgBI,CAAM,EAIpC,QAFInD,EAAS,GACTkM,EAAiB,GACZlU,EAAI,EAAGA,EAAI8S,EAAe,OAAQ9S,GAAK,EAAG,CACjD,IAAI5H,EAAQ0a,EAAe9S,CAAC,EACxB5H,GAAS,KACX8b,EAAiB,GACRjG,EAAW,WAAW9C,EAAO,IAAI,EAC1CnD,EAAO,KAAKnD,EAAG,YAAY,SAAS,OAAOzM,GAAU,SAAW,OAAO,aAAaA,CAAK,EAAIA,CAAK,CAAC,EAC1F6V,EAAW,cAAc9C,EAAO,IAAI,EAC7CnD,EAAO,KAAKnD,EAAG,YAAY,UAAU,EAAQzM,CAAM,CAAC,EAEpD4P,EAAO,KAAKnD,EAAG,YAAY,SAASzM,CAAK,CAAC,CAE7C,CACD,OAAI8b,EACElM,EAAO,OAAS,EACd+C,EACKI,EAAO,OAAM,EAAG,OAAM,EAAG,IAAK,EAAC,IAAIA,EAAO,OAAQ,EAAC,MAAMnD,CAAM,CAAC,EAElEmD,EAAO,SAAS,SAAS,GAAGA,EAAO,OAAQ,EAAC,GAAGnD,CAAM,CAAC,EAE3D+C,EACKI,EAAO,OAAM,EAAG,OAAQ,EAAC,IAAG,EAE9BA,EAAO,SAAS,SAErBJ,EACKI,EAAO,OAAM,EAAG,MAAMnD,CAAM,EAE9BmD,EAAO,OAAM,EAAG,GAAGnD,CAAM,CACjC,CACH,CACA/P,GAAgBgW,EAAY,WAAY,CACtC,QAAS,UACT,KAAM,OACN,SAAU,WACV,QAAS,UACT,IAAK,MACL,OAAQ,SACR,QAAS,SACX,CAAC,EACDhW,GAAgBgW,EAAY,gBAAiB,CAC3C,UAAW,MACX,WAAY,OACZ,QAAS,UACT,KAAM,IACR,CAAC,EACDhW,GAAgBgW,EAAY,gCAAiC,GAAK,EAClEhW,GAAgBgW,EAAY,eAAgB,OAAO,OAAO,CACxD,KAAM,OACN,SAAU,WACV,UAAW,WACb,CAAC,CAAC,EACFhW,GAAgBgW,EAAY,eAAgB,iBAAiB,EAC7DhW,GAAgBgW,EAAY,yBAAuC,UAAY,CAC7E,IAAIkG,EAAQtG,GAAkB,UAAWuG,EAAMzH,EAAO0H,EAAW,CAC/D,IAAIlQ,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI8J,EAAW,8BAC7F,GAAItB,GAAS,KACX,OAAO,KAET,IAAI2H,EAAerG,EAAW,gCAAgCtB,EAAO0H,EAAWlQ,CAAO,EACvF,OAAAiQ,EAAKzH,CAAK,EACV,MAAM2H,EACC3H,CACX,CAAG,EACD,OAAO,SAAU4H,EAAIC,EAAKC,EAAK,CAC7B,OAAON,EAAM,MAAM,KAAM,SAAS,CACtC,CACA,GAAG,ECl7CH,SAASlc,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAGlX,MAAMkc,EAAU,CAMrB,OAAO,oBAAoBC,EAAuB,CAChD,OAAIA,GAAyB,KACpB,IAAI,IAENA,EAAsB,OAAO,CAACC,EAAKpK,IAAS,CACjD,IAAIqK,EAAW5G,EAAW,kBAAkBzD,EAAK,UAAU,EAC3D,GAAIqK,IAAa,KACf,OAAOD,EAEJA,EAAI,IAAIC,CAAQ,GACnBD,EAAI,IAAIC,EAAU,IAAI,GAAK,EAE7B,IAAIC,EAAYF,EAAI,IAAIC,CAAQ,EAChC,OAAAC,GAAc,MAAwCA,EAAU,IAAItK,EAAK,WAAYA,EAAK,MAAM,EACzFoK,CACb,EAAO,IAAI,GAAK,CACb,CAQD,OAAO,yBAAyBjG,EAAY/D,EAAY9F,EAAQ,CAC9D,MAAO,CACL,WAAA6J,EACA,WAAA/D,EACA,OAAA9F,CACN,CACG,CAUD,YAAYD,EAAI,CACd,IAAI8P,EAAwB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC5FI,EAAkB,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OACxDC,EAAuB,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OAC7DC,EAAuB,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OAC7DC,EAA2B,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC/FC,EAAmB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACvFC,EAAkB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC1Fnd,GAAgB,KAAM,yBAA0B,MAAM,EACtDA,GAAgB,KAAM,mBAAoB,MAAM,EAChDA,GAAgB,KAAM,kBAAmB,MAAM,EAC/CA,GAAgB,KAAM,2BAA4B,MAAM,EACxDA,GAAgB,KAAM,mBAAoB,MAAM,EAChDA,GAAgB,KAAM,kBAAmB,MAAM,EAM/C,KAAK,uBAAyB,IAAIuO,GAGlC,KAAK,iBAAmB,IAAI,IAAI,CAAC,CAACyH,EAAW,SAAS,QAAS,IAAI5I,EAAwB,EAAG,CAAC4I,EAAW,SAAS,KAAM,IAAI1I,EAAqB,EAAG,CAAC0I,EAAW,SAAS,SAAU,IAAIxI,GAAwBZ,EAAIkQ,CAAe,CAAC,EAAG,CAAC9G,EAAW,SAAS,QAAS,IAAI7H,EAAuBvB,EAAImQ,CAAoB,CAAC,EAAG,CAAC/G,EAAW,SAAS,IAAK,IAAIvH,GAAuB7B,EAAIoQ,CAAoB,CAAC,EAAG,CAAChH,EAAW,SAAS,OAAQ,IAAItH,EAAuB,CAAC,CAAC,EAGvc,KAAK,gBAAkB+N,GAAU,oBAAoBC,CAAqB,EAC1E,KAAK,yBAA2BO,EAChC,KAAK,iBAAmBC,EACxB,KAAK,gBAAkBC,CACxB,CAOD,0BAA0BzG,EAAY,CACpC,IAAI0G,EAAoB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACxFR,EAAW5G,EAAW,kBAAkBU,CAAU,EACtD,GAAIkG,IAAa,KAGjB,OAAIQ,GAAqB,CAAC,KAAK,gBAAgB,IAAIR,CAAQ,GACzD,KAAK,gBAAgB,IAAIA,EAAU,IAAI,GAAK,EAEvC,KAAK,gBAAgB,IAAIA,CAAQ,CACzC,CAQD,gBAAgBlG,EAAY/D,EAAY,CACtC,IAAI0K,EACAC,EAAkB,KAAK,0BAA0B5G,CAAU,EAC/D,OAAQ2G,EAAuBC,GAAoB,KAAqC,OAASA,EAAgB,IAAI3K,CAAU,KAAO,MAAQ0K,IAAyB,OAASA,EAAuB,IACxM,CACD,uBAAuB3G,EAAY,CACjC,IAAIkG,EAAW5G,EAAW,kBAAkBU,CAAU,EAClD6G,EAAsB,KAAK,uBAC/B,GAAIX,EAAU,CACZ,IAAIY,EACJD,GAAuBC,EAAwB,KAAK,iBAAiB,IAAIZ,CAAQ,KAAO,MAAQY,IAA0B,OAASA,EAAwBD,CAC5J,CACD,OAAOA,CACR,CASD,mBAAmBpd,EAAOuW,EAAY,CACpC,IAAI/D,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACjF8K,EAAiB,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OAC3D,GAAItd,GAAS,KACX,MAAO,GAET,IAAIud,EAAY,KAAK,uBAAuBhH,CAAU,EAClD7J,EAAS4Q,GAAkB,KAAK,gBAAgB/G,EAAY/D,CAAU,EAC1E,OAAO+K,EAAU,OAAOvd,EAAO0M,GAAgD,MAAS,CACzF,CAMD,IAAI,UAAW,CACb,IAAI8Q,EACAD,EAAY,KAAK,iBAAiB,IAAI1H,EAAW,SAAS,QAAQ,EACtE,OAAO0H,GAAc,OAAyCC,EAAwBD,EAAU,cAAgB,MAAQC,IAA0B,OAA9F,OAAgHA,EAAsB,EAC3L,CACH,CClJO,SAASC,GAAiBC,EAAU,CACzC,GAAIA,GAAYA,EAAS,UAAW,CAClC,GAAI,CACF,UAAAH,CACD,EAAGG,EACJ,OAAOH,CACR,CAEH,CACO,SAASI,GAA4BD,EAAU,CACpD,MAAO,CACL,SAAUA,GAAa,KAA8B,OAASA,EAAS,SACvE,4BAA6BA,GAAa,KAA8B,OAASA,EAAS,sBAC1F,aAAcA,GAAa,KAA8B,OAASA,EAAS,aAC3E,eAAgBA,GAAa,KAA8B,OAASA,EAAS,cACjF,CACA,CASO,SAASE,GAA4BL,EAAW/K,EAAY+D,EAAY,CAC7E,IAAIsH,EAAeN,EAAU,gBAAgBhH,EAAY/D,CAAU,EACnE,OAAOqL,GAAgB,OAASA,EAAa,OAASrR,EAAqB,qBAAuBqR,EAAa,OAASrR,EAAqB,oBAC/I,CACA,MAAesR,GAAA,CACb,iBAAAL,GACA,4BAAAE,GACA,4BAAAC,EACF,ECjCU,IAACG,GAAmCC,GAAa,cAAC,EAAE,EACnDC,GAA8CD,GAAa,cAAC,EAAE,EAC9DE,GAA2BF,GAAa,cAAC,IAAI,ECHxD,SAAS5W,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAU9H,EAAK,CAAEF,GAAgB8H,EAAQ5H,EAAK8H,EAAO9H,CAAG,CAAC,CAAI,GAAI,OAAO,0BAA4B,OAAO,iBAAiB4H,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAU9H,EAAK,CAAE,OAAO,eAAe4H,EAAQ5H,EAAK,OAAO,yBAAyB8H,EAAQ9H,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAO4H,CAAS,CAC1f,SAAS9H,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAIzX,IAAI+d,GAAwBC,QAAK,IAAKC,GAAA,IAAC,OAAO,wBAAe,uTAAC,EAC1DC,GAA4BC,cAAW,CAE3CxZ,EAAOC,IAAqBwB,EAAI,IAACgY,YAAU,CACzC,SAAuBhY,MAAKiY,GAAgB,EAAE,EAC9C,SAAuBjY,MAAK2X,GAAUzW,GAAc,CAClD,IAAK1C,CACN,EAAED,CAAK,CAAC,CACX,CAAC,CAAC,EACFuZ,GAAa,YAAc,eAC3B,MAAAI,GAAeJ,GClBf,IAAIK,IACH,SAAUA,EAAsB,CAC/BA,EAAqB,yCAA8C,2CACnEA,EAAqB,+BAAoC,gCAC3D,GAAGA,KAAyBA,GAAuB,CAAE,EAAC,EACtD,MAAAC,GAAeD,GCJf,IAAIE,GAAW,OAAO,OAAO,CAAC,CAACF,GAAqB,yCAA0C,EAAK,EAAG,CAACA,GAAqB,+BAAgC,EAAK,CAAC,CAAC,EACnK,MAAeG,GAAA,CACb,SAAAD,EACF,ECJA,IAAIE,IACH,SAAUA,EAAsB,CAC/BA,EAAqB,MAAW,QAChCA,EAAqB,IAAS,MAC9BA,EAAqB,IAAS,MAC9BA,EAAqB,IAAS,MAC9BA,EAAqB,QAAa,SAClCA,EAAqB,IAAS,MAC9BA,EAAqB,IAAS,MAC9BA,EAAqB,IAAS,MAC9BA,EAAqB,MAAW,QAChCA,EAAqB,KAAU,OAC/BA,EAAqB,KAAU,OAC/BA,EAAqB,eAAoB,gBACzCA,EAAqB,SAAc,WACnCA,EAAqB,OAAY,QACnC,GAAGA,KAAyBA,GAAuB,CAAE,EAAC,EACtD,MAAAC,EAAeD,GCfL,IAACE,GAAqB,CAACF,EAAqB,IAAKA,EAAqB,QAASA,EAAqB,IAAKA,EAAqB,IAAKA,EAAqB,IAAKA,EAAqB,IAAKA,EAAqB,IAAKA,EAAqB,MAAOA,EAAqB,KAAMA,EAAqB,eAAgBA,EAAqB,SAAUA,EAAqB,MAAOA,EAAqB,MAAM,EAOlYG,GAAoBnS,GAAQ,CACrC,OAAQA,EAAI,CAEV,QACE,MAAO,EACV,CACH,EAOWoS,GAAmB,CAACC,EAAe7I,IAAe,CAC3D,OAAQ6I,EAAa,CACnB,KAAKL,EAAqB,MAC1B,KAAKA,EAAqB,MAC1B,KAAKA,EAAqB,KAC1B,KAAKA,EAAqB,eAC1B,KAAKA,EAAqB,SAC1B,KAAKA,EAAqB,OACxB,MAAO,GACT,KAAKA,EAAqB,IAC1B,KAAKA,EAAqB,IACxB,OAAOlJ,EAAW,aAAaU,CAAU,GAAKV,EAAW,WAAWU,CAAU,GAAKV,EAAW,WAAWU,CAAU,EACrH,KAAKwI,EAAqB,IAC1B,KAAKA,EAAqB,QAC1B,KAAKA,EAAqB,IAC1B,KAAKA,EAAqB,IAC1B,KAAKA,EAAqB,IACxB,OAAOlJ,EAAW,aAAaU,CAAU,EAC3C,KAAKwI,EAAqB,KACxB,MAAO,EAEV,CACH,EAEWM,GAAqB,CAACtL,EAASqL,IAAkBrL,EAAQ,OAAOuL,GAAKA,EAAE,UAAY,IAAQH,GAAiBC,EAAeE,EAAE,IAAI,CAAC,EAClIC,GAA0B,CAACxL,EAASqL,EAAeI,EAAUC,IAAWJ,GAAmBtL,EAASqL,CAAa,EAAE,IAAIxL,GAAQ,CACxI,GAAI,CACF,KAAA1S,CACD,EAAG0S,EACJ,OAAO1S,CACT,CAAC,EAAE,OAAOA,GAAQse,EAAS,SAASte,CAAI,EAAI,CAACue,EAASA,CAAM,EAC5D,MAAeC,GAAA,CACb,kBAAAR,GACA,mBAAAG,GACA,wBAAAE,EACF,ECzDA,SAAS1f,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAClX,MAAMuf,WAAuB,KAAM,CACxC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB9f,GAAgB,KAAM,oBAAqB,EAAI,CAChD,CACH,CACA,MAAA+f,GAAeD,GCRR,SAASE,GAAoBC,EAAO,CACzC,OAAQA,GAAU,KAA2B,OAASA,EAAM,cAAgB,MAC9E,CACO,SAASC,GAA0BD,EAAO,CAC/C,GAAI,CAACD,GAAoBC,CAAK,EAC5B,MAAM,IAAIH,GAAe,iDAAiD,OAAOG,CAAK,CAAC,CAE3F,CCRO,SAASE,GAAsBF,EAAO,CAC3C,OAAQA,GAAU,KAA2B,OAASA,EAAM,qBAAuB,MACrF,CCFA,SAASjgB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAE/W,IAAC6f,IACV,SAAUA,EAAqB,CAC9BA,EAAoB,KAAU,OAC9BA,EAAoB,GAAQ,KAC5BA,EAAoB,KAAU,OAC9BA,EAAoB,MAAW,OACjC,GAAGA,KAAwBA,GAAsB,CAAE,EAAC,EAC7C,MAAMC,CAAU,CASrB,OAAO,UAAUC,EAAaC,EAAUC,EAAWC,EAAQ,CACzD,IAAIzW,EAAOsW,EACPvW,EAAMwW,EACNG,EAAQF,EACRG,EAASF,EACb,OAAIzW,GAAQ,MAAQ0W,GAAS,MAAQA,EAAQ1W,IAC3CA,EAAO0W,EACPA,EAAQJ,GAENvW,GAAO,MAAQ4W,GAAU,MAAQA,EAAS5W,IAC5CA,EAAM4W,EACNA,EAASJ,GAEJ,CAACvW,EAAMD,EAAK2W,EAAOC,CAAM,CACjC,CAUD,OAAO,eAAeL,EAAaC,EAAUC,EAAWC,EAAQ,CAC9D,OAAO,IAAIJ,EAAU,GAAGA,EAAU,UAAUC,EAAaC,EAAUC,EAAWC,CAAM,CAAC,CACtF,CAQD,OAAO,SAASvN,EAAQU,EAAK,CAC3B,OAAO,IAAIyM,EAAUnN,EAAQU,EAAKV,EAAQU,CAAG,CAC9C,CAOD,OAAO,WAAWV,EAAQ,CACxB,OAAO,IAAImN,EAAUnN,EAAQ,KAAMA,EAAQ,IAAI,CAChD,CAOD,OAAO,QAAQU,EAAK,CAClB,OAAO,IAAIyM,EAAU,KAAMzM,EAAK,KAAMA,CAAG,CAC1C,CAQD,OAAO,UAAUgN,EAAQC,EAAQ,CAC/B,OAAID,GAAU,MAAQC,GAAU,KACvB,KAEF,KAAK,IAAID,EAAQC,CAAM,CAC/B,CAQD,OAAO,UAAUD,EAAQC,EAAQ,CAC/B,OAAID,GAAU,MAAQC,GAAU,KACvB,KAEF,KAAK,IAAID,EAAQC,CAAM,CAC/B,CAOD,OAAO,YAAYC,EAAQ,CAGzB,QAFIrQ,EAASqQ,EAAO,QAChBC,EAAc,GACXA,GAAa,CAClBA,EAAc,GACd,QAAShZ,EAAI,EAAGA,EAAI0I,EAAO,QAAU,CAACsQ,EAAahZ,GAAK,EAEtD,QADIiZ,EAAQvQ,EAAO1I,CAAC,EACXkR,EAAIxI,EAAO,OAAS,EAAGwI,EAAIlR,EAAGkR,GAAK,EAAG,CAC7C,IAAIgI,EAAQxQ,EAAOwI,CAAC,EAGpB,GAAI+H,EAAM,SAASC,CAAK,EACtBxQ,EAAO,OAAOwI,EAAG,CAAC,UACTgI,EAAM,SAASD,CAAK,EAAG,CAChCD,EAAc,GACdtQ,EAAO1I,CAAC,EAAIkZ,EACZxQ,EAAO,OAAOwI,EAAG,CAAC,EAClB,KACZ,SAAqB+H,EAAM,WAAaC,EAAM,UAAYD,EAAM,SAAWC,EAAM,QACrE,GAAID,EAAM,QAAQC,CAAK,EAAG,CAExB,GAAI,CACF,SAAAV,EACA,OAAAE,CACD,EAAGO,EACAV,EAAcD,EAAU,UAAUW,EAAM,YAAaC,EAAM,WAAW,EACtET,EAAYH,EAAU,UAAUW,EAAM,UAAWC,EAAM,SAAS,EACpEF,EAAc,GACdtQ,EAAO1I,CAAC,EAAI,IAAIsY,EAAUC,EAAaC,EAAUC,EAAWC,CAAM,EAClEhQ,EAAO,OAAOwI,EAAG,CAAC,EAClB,KACD,UACQ+H,EAAM,cAAgBC,EAAM,aAAeD,EAAM,YAAcC,EAAM,WAC1ED,EAAM,QAAQC,CAAK,EAAG,CAExB,GAAI,CACF,YAAaC,EACb,UAAWC,CACZ,EAAGH,EACAI,EAAYf,EAAU,UAAUW,EAAM,SAAUC,EAAM,QAAQ,EAC9DI,EAAUhB,EAAU,UAAUW,EAAM,OAAQC,EAAM,MAAM,EAC5DF,EAAc,GACdtQ,EAAO1I,CAAC,EAAI,IAAIsY,EAAUa,EAAcE,EAAWD,EAAYE,CAAO,EACtE5Q,EAAO,OAAOwI,EAAG,CAAC,EAClB,KACD,CAEJ,CAEJ,CACD,OAAOxI,CACR,CAaD,OAAO,oBAAoB6Q,EAAQC,EAAMC,EAAQC,EAAM,CACrD,OAAIH,GAAU,KACRC,GAAQ,MAGRC,GAAU,KACL,GAEFA,GAAUD,EAAO,EAEtBA,GAAQ,KACNE,GAAQ,KACH,GAEFA,GAAQH,EAAS,EAEtBE,GAAU,KACRC,GAAQ,KACH,GAEFH,GAAUG,EAAO,EAEtBA,GAAQ,KACHF,GAAQC,EAAS,EAEtBA,GAAUF,EAAS,EACdE,GAAUD,EAAO,EAEnBE,GAAQH,EAAS,CACzB,CAQD,OAAO,iBAAiBI,EAASC,EAAS,CACxC,GAAID,IAAYC,EACd,MAAO,GAET,GAAID,GAAW,MAAQC,GAAW,MAAQD,EAAQ,SAAWC,EAAQ,OACnE,MAAO,GAET,QAAS5Z,EAAI,EAAGA,EAAI2Z,EAAQ,OAAQ3Z,GAAK,EACvC,GAAI,CAAC2Z,EAAQ3Z,CAAC,EAAE,OAAO4Z,EAAQ5Z,CAAC,CAAC,EAC/B,MAAO,GAGX,MAAO,EACR,CAQD,OAAO,aAAaiZ,EAAOY,EAAY,CACrC,IAAIC,EAAeC,EAAaC,EAAYC,EAAUC,EAAaC,EACnE,GAAIlB,EAAM,OAAOY,CAAU,EACzB,OAAOZ,EAET,GAAI,CACF,YAAAV,EACA,SAAAC,EACA,UAAAC,EACA,OAAAC,CACD,EAAGO,EAKJ,OAJAV,EAAcA,GAAe,MAAQsB,EAAW,aAAe,KAAO,KAAK,IAAItB,EAAasB,EAAW,WAAW,GAAKC,EAAgBvB,KAAiB,MAAQuB,IAAkB,OAASA,EAAgBD,EAAW,YACtNpB,EAAYA,GAAa,MAAQoB,EAAW,WAAa,KAAO,KAAK,IAAIpB,EAAWoB,EAAW,SAAS,GAAKE,EAActB,KAAe,MAAQsB,IAAgB,OAASA,EAAcF,EAAW,UACpMrB,EAAWA,GAAY,MAAQqB,EAAW,UAAY,KAAO,KAAK,IAAIrB,EAAUqB,EAAW,QAAQ,GAAKG,EAAaxB,KAAc,MAAQwB,IAAe,OAASA,EAAaH,EAAW,SAC3LnB,EAASA,GAAU,MAAQmB,EAAW,QAAU,KAAO,KAAK,IAAInB,EAAQmB,EAAW,MAAM,GAAKI,EAAWvB,KAAY,MAAQuB,IAAa,OAASA,EAAWJ,EAAW,OACrKtB,GAAe,MAAQA,IAAgB2B,EAAczB,KAAe,MAAQyB,IAAgB,OAASA,EAAc,KAAO1B,GAAY,MAAQA,IAAa2B,EAAWzB,KAAY,MAAQyB,IAAa,OAASA,EAAW,IACtN,KAEF,IAAI7B,EAAUC,EAAaC,EAAUC,EAAWC,CAAM,CAC9D,CAQD,OAAO,kBAAkBO,EAAOmB,EAAe,CAC7C,IAAI1R,EAAS,GAGT2R,EAAW/B,EAAU,aAAaW,EAAOmB,CAAa,EAC1D,OAAIC,GAAY,KACP,CAACpB,CAAK,GAKXoB,EAAS,UAAY,OAASpB,EAAM,UAAY,MAAQA,EAAM,SAAWoB,EAAS,WACpF3R,EAAO,KAAK,IAAI4P,EAAUW,EAAM,YAAaA,EAAM,SAAUA,EAAM,UAAWoB,EAAS,SAAW,CAAC,CAAC,EAIlGA,EAAS,aAAe,OAASpB,EAAM,aAAe,MAAQA,EAAM,YAAcoB,EAAS,cAC7F3R,EAAO,KAAK,IAAI4P,EAAUW,EAAM,YAAaoB,EAAS,SAAUA,EAAS,YAAc,EAAGA,EAAS,MAAM,CAAC,EAIxGA,EAAS,WAAa,OAASpB,EAAM,WAAa,MAAQA,EAAM,UAAYoB,EAAS,YACvF3R,EAAO,KAAK,IAAI4P,EAAU+B,EAAS,UAAY,EAAGA,EAAS,SAAUpB,EAAM,UAAWoB,EAAS,MAAM,CAAC,EAIpGA,EAAS,QAAU,OAASpB,EAAM,QAAU,MAAQA,EAAM,OAASoB,EAAS,SAC9E3R,EAAO,KAAK,IAAI4P,EAAUW,EAAM,YAAaoB,EAAS,OAAS,EAAGpB,EAAM,UAAWA,EAAM,MAAM,CAAC,EAE3FvQ,EACR,CAQD,OAAO,mBAAmBqQ,EAAQqB,EAAe,CAE/C,QADI1R,EAAS,GACJ1I,EAAI,EAAGA,EAAI+Y,EAAO,OAAQ/Y,GAAK,EACtC0I,EAAO,KAAK,GAAG4P,EAAU,kBAAkBS,EAAO/Y,CAAC,EAAGoa,CAAa,CAAC,EAEtE,OAAO1R,CACR,CAQD,OAAO,yBAAyBqQ,EAAQuB,EAAgB,CAEtD,QADI5R,EAAS,CAAC,GAAGqQ,CAAM,EACd/Y,EAAI,EAAGA,EAAIsa,EAAe,OAAQta,GAAK,EAC9C0I,EAAS4P,EAAU,mBAAmB5P,EAAQ4R,EAAeta,CAAC,CAAC,EAEjE,OAAO0I,CACR,CAOD,OAAO,UAAUuQ,EAAO,CACtB,OAAOA,EAAM,UAAY,MAAQA,EAAM,aAAe,MAAQA,EAAM,QAAU,MAAQA,EAAM,WAAa,IAC1G,CAWD,OAAO,aAAaA,EAAOsB,EAAaC,EAAU,CAChD,IAAIC,EAAoBC,EAAiBC,EAAkBC,EAC3D,OAAItC,EAAU,UAAUW,CAAK,EACpBA,EAEF,IAAIX,GAAWmC,EAAqBxB,EAAM,eAAiB,MAAQwB,IAAuB,OAASA,EAAqB,GAAIC,EAAkBzB,EAAM,YAAc,MAAQyB,IAAoB,OAASA,EAAkB,GAAIC,EAAmB1B,EAAM,aAAe,MAAQ0B,IAAqB,OAASA,EAAmBJ,EAAc,GAAIK,EAAgB3B,EAAM,UAAY,MAAQ2B,IAAkB,OAASA,EAAgBJ,EAAW,CAAC,CACzb,CAUD,OAAO,cAAczB,EAAQwB,EAAaC,EAAU,CAClD,OAAOzB,EAAO,IAAI8B,GAAKvC,EAAU,aAAauC,EAAGN,EAAaC,CAAQ,CAAC,CACxE,CAUD,OAAO,OAAOvB,EAAO6B,EAAcC,EAAW,CAC5C,OAAO,IAAIzC,EAAUW,EAAM,aAAe,KAAOA,EAAM,YAAc6B,EAAe,KAAM7B,EAAM,UAAY,KAAOA,EAAM,SAAW8B,EAAY,KAAM9B,EAAM,WAAa,KAAOA,EAAM,UAAY6B,EAAe,KAAM7B,EAAM,QAAU,KAAOA,EAAM,OAAS8B,EAAY,IAAI,CAC9Q,CAUD,OAAO,SAAShC,EAAQ,CACtB,IAAI5N,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAC7EU,EAAM,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAC1EkD,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIuJ,EAAU,oBAAoB,KAClH,GAAIS,EAAO,SAAW,EACpB,OAAO,KAET,IAAIiC,EAAa,GACjB,GAAI7P,GAAU,MAAQU,GAAO,OAC3BmP,EAAajC,EAAO,UAAU8B,GAAKA,EAAE,aAAa1P,EAAQU,CAAG,CAAC,EAC1DmP,GAAc,GAAG,CACnB,IAAI/B,EAAQF,EAAOiC,CAAU,EACzBC,EAAWhC,EAAM,SAAS9N,EAAQU,EAAKkD,CAAS,EACpD,GAAIkM,GAAY,KACd,OAAOA,CAEV,CAIH,OAAQlM,EAAS,CACf,KAAKuJ,EAAU,oBAAoB,KACnC,KAAKA,EAAU,oBAAoB,MACjC,CACE,IAAI4C,EAAiBF,EAAajC,EAAO,OAAS,EAAIiC,EAAa,EAAI,EACnEG,EAAYpC,EAAOmC,CAAc,EACrC,OAAOC,EAAU,UAAUpM,CAAS,CACrC,CACH,KAAKuJ,EAAU,oBAAoB,KACnC,KAAKA,EAAU,oBAAoB,GACjC,CACE,IAAI8C,EAAkBJ,EAAa,EAAIA,EAAa,EAAIjC,EAAO,OAAS,EACpEsC,EAAatC,EAAOqC,CAAe,EACvC,OAAOC,EAAW,UAAUtM,CAAS,CACtC,CACH,QACE,MAAM,IAAI,MAAM,sBAAsB,OAAOA,CAAS,CAAC,CAC1D,CACF,CAOD,OAAO,UAAUgK,EAAQ,CACvB,OAAOA,EAAO,OAAO,CAACuC,EAAWrC,IAAU,CACzC,IAAIsC,EAAgBC,EAAkBC,EAAmBC,EACzD,OAAOJ,KAAeC,EAAiBtC,EAAM,UAAY,MAAQsC,IAAmB,OAASA,EAAiB,OAASC,EAAmBvC,EAAM,YAAc,MAAQuC,IAAqB,OAASA,EAAmB,KAAO,MAAQC,EAAoBxC,EAAM,aAAe,MAAQwC,IAAsB,OAASA,EAAoB,OAASC,EAAsBzC,EAAM,eAAiB,MAAQyC,IAAwB,OAASA,EAAsB,KAAO,EACvc,EAAE,CAAC,CACL,CAOD,OAAO,SAAS3C,EAAQ,CACtB,OAAOA,EAAO,OAAO,CAACyB,EAAUvB,IAAU,CACxC,IAAI0C,EAAgBC,EACpB,OAAOpB,IAAamB,EAAiB1C,EAAM,UAAY,MAAQ0C,IAAmB,OAASA,EAAiB,OAASC,EAAmB3C,EAAM,YAAc,MAAQ2C,IAAqB,OAASA,EAAmB,KAAO,CAC7N,EAAE,CAAC,CACL,CAOD,OAAO,YAAY7C,EAAQ,CACzB,OAAOA,EAAO,OAAO,CAACwB,EAAatB,IAAU,CAC3C,IAAI4C,EAAmBC,EACvB,OAAOvB,IAAgBsB,EAAoB5C,EAAM,aAAe,MAAQ4C,IAAsB,OAASA,EAAoB,OAASC,EAAsB7C,EAAM,eAAiB,MAAQ6C,IAAwB,OAASA,EAAsB,KAAO,CACxP,EAAE,CAAC,CACL,CASD,OAAO,aAAa/C,EAAQ5N,EAAQU,EAAK,CACvC,QAAS7L,EAAI,EAAGA,EAAI+Y,EAAO,OAAQ/Y,GAAK,EAAG,CACzC,IAAIiZ,EAAQF,EAAO/Y,CAAC,EACpB,GAAIiZ,EAAM,aAAa9N,EAAQU,CAAG,EAChC,MAAO,EAEV,CACD,MAAO,EACR,CAQD,OAAO,YAAYkN,EAAQve,EAAU,CAEnC,QADIuU,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIuJ,EAAU,oBAAoB,MACzGtY,EAAI,EAAGA,EAAI+Y,EAAO,OAAQ/Y,GAAK,EACtC+Y,EAAO/Y,CAAC,EAAE,QAAQxF,EAAUuU,CAAS,CAExC,CACD,YAAYwJ,EAAaC,EAAUC,EAAWC,EAAQ,CACpDzgB,GAAgB,KAAM,cAAe,MAAM,EAC3CA,GAAgB,KAAM,WAAY,MAAM,EACxCA,GAAgB,KAAM,YAAa,MAAM,EACzCA,GAAgB,KAAM,SAAU,MAAM,EACtC,KAAK,YAAcsgB,EACnB,KAAK,SAAWC,EAChB,KAAK,UAAYC,EACjB,KAAK,OAASC,CACf,CAOD,OAAOQ,EAAO,CACZ,OAAO,KAAK,cAAgBA,EAAM,aAAe,KAAK,WAAaA,EAAM,UAAY,KAAK,YAAcA,EAAM,WAAa,KAAK,SAAWA,EAAM,MAClJ,CAOD,SAASA,EAAO,CACd,OAAQ,KAAK,aAAe,MAAQA,EAAM,aAAe,MAAQ,KAAK,aAAeA,EAAM,eAAiB,KAAK,UAAY,MAAQA,EAAM,UAAY,MAAQ,KAAK,UAAYA,EAAM,YAAc,KAAK,WAAa,MAAQA,EAAM,WAAa,MAAQ,KAAK,WAAaA,EAAM,aAAe,KAAK,QAAU,MAAQA,EAAM,QAAU,MAAQ,KAAK,QAAUA,EAAM,OACrW,CAQD,aAAa/N,EAAQU,EAAK,CACxB,OAAIV,GAAU,MAAQU,GAAO,KACpB,IAED,KAAK,aAAe,MAAQ,KAAK,aAAeV,KAAY,KAAK,WAAa,MAAQ,KAAK,WAAaA,KAAY,KAAK,UAAY,MAAQ,KAAK,UAAYU,KAAS,KAAK,QAAU,MAAQ,KAAK,QAAUA,EACtN,CAQD,QAAQqN,EAAO,CACb,OAAOZ,EAAU,oBAAoB,KAAK,SAAU,KAAK,OAAQY,EAAM,SAAUA,EAAM,MAAM,GAAKZ,EAAU,oBAAoB,KAAK,YAAa,KAAK,UAAWY,EAAM,YAAaA,EAAM,SAAS,CACrM,CAOD,SAASA,EAAO,CACd,OAAOZ,EAAU,kBAAkB,KAAMY,CAAK,CAC/C,CAQD,WAAY,CACV,IAAInK,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIuJ,EAAU,oBAAoB,KAClH,GAAI,CAACA,EAAU,UAAU,IAAI,EAC3B,MAAM,IAAI,MAAM,gDAAgD,EAElE,OAAQvJ,EAAS,CACf,KAAKuJ,EAAU,oBAAoB,KACnC,KAAKA,EAAU,oBAAoB,MACjC,MAAO,CACL,OAAQ,KAAK,YACb,IAAK,KAAK,QACpB,EACM,KAAKA,EAAU,oBAAoB,KACnC,KAAKA,EAAU,oBAAoB,GAE/B,MAAO,CACL,OAAQ,KAAK,UACb,IAAK,KAAK,MACtB,EAEM,QACE,MAAM,IAAI,MAAM,sBAAsB,OAAOvJ,CAAS,CAAC,CAC1D,CACF,CAaD,SAAS5D,EAAQU,EAAKkD,EAAW,CAC/B,GAAI,CAACuJ,EAAU,UAAU,IAAI,EAC3B,MAAM,IAAI,MAAM,wBAAwB,EAE1C,GAAInN,GAAU,MAAQU,GAAO,KAC3B,MAAM,IAAI,MAAM,2BAA2B,EAE7C,GAAI,CACF,YAAA0M,EACA,UAAAE,EACA,SAAAD,EACA,OAAAE,CACD,EAAG,KACJ,OAAQ3J,EAAS,CACf,KAAKuJ,EAAU,oBAAoB,KACjC,GAAIzM,EAAM6M,EACR,MAAO,CACL,OAAAvN,EACA,IAAK,KAAK,IAAIU,EAAM,EAAG2M,CAAQ,CAC3C,EAEQ,GAAIrN,EAASsN,EACX,MAAO,CACL,OAAQ,KAAK,IAAItN,EAAS,EAAGoN,CAAW,EACxC,IAAKC,CACjB,EAEQ,MACF,KAAKF,EAAU,oBAAoB,GACjC,GAAIzM,EAAM2M,EACR,MAAO,CACL,OAAArN,EACA,IAAK,KAAK,IAAIU,EAAM,EAAG6M,CAAM,CACzC,EAEQ,GAAIvN,EAASoN,EACX,MAAO,CACL,OAAQ,KAAK,IAAIpN,EAAS,EAAGsN,CAAS,EACtC,IAAKC,CACjB,EAEQ,MACF,KAAKJ,EAAU,oBAAoB,MACjC,GAAInN,EAASsN,EACX,MAAO,CACL,OAAQ,KAAK,IAAItN,EAAS,EAAGoN,CAAW,EACxC,IAAA1M,CACZ,EAEQ,GAAIA,EAAM6M,EACR,MAAO,CACL,OAAQH,EACR,IAAK,KAAK,IAAI1M,EAAM,EAAG2M,CAAQ,CAC3C,EAEQ,MACF,KAAKF,EAAU,oBAAoB,KACjC,GAAInN,EAASoN,EACX,MAAO,CACL,OAAQ,KAAK,IAAIpN,EAAS,EAAGsN,CAAS,EACtC,IAAA5M,CACZ,EAEQ,GAAIA,EAAM2M,EACR,MAAO,CACL,OAAQC,EACR,IAAK,KAAK,IAAI5M,EAAM,EAAG6M,CAAM,CACzC,EAEQ,MACF,QACE,MAAM,IAAI,MAAM,sBAAsB,OAAO3J,CAAS,CAAC,CAC1D,CACD,OAAO,IACR,CAOD,QAAQvU,EAAU,CAOhB,QANIuU,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIuJ,EAAU,oBAAoB,MAC9GtY,EAAI,EACJ,CACF,OAAQ0X,EACR,IAAKmD,CACX,EAAQ,KAAK,UAAU9L,CAAS,EACrB2I,GAAK,MAAQmD,GAAK,MAAM,CAC7B,IAAIkB,EACJvhB,EAASkd,EAAGmD,EAAG7a,CAAC,EAChBA,GAAK,EACJ,CACC,OAAQ0X,EACR,IAAKmD,CACN,GAAIkB,EAAiB,KAAK,SAASrE,EAAGmD,EAAG9L,CAAS,KAAO,MAAQgN,IAAmB,OAASA,EAAiB,EAChH,CACF,CACH,CACA9jB,GAAgBqgB,EAAW,sBAAuBD,EAAmB,ECzqB9D,SAAS2D,GAAY/C,EAAO,CACjC,OAAO,MAAM,QAAQA,CAAK,GAAKA,EAAM,SAAW,IAAMA,EAAM,CAAC,IAAM,MAAQ,OAAOA,EAAM,CAAC,GAAM,YAAcA,EAAM,CAAC,IAAM,MAAQ,OAAOA,EAAM,CAAC,GAAM,SACxJ,CAMO,SAASgD,GAAmBhD,EAAO,CACxC,OAAO+C,GAAY/C,CAAK,GAAKA,EAAM,CAAC,GAAK,MAAQA,EAAM,CAAC,GAAK,IAC/D,CCVA,SAASzZ,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAU9H,EAAK,CAAEF,GAAgB8H,EAAQ5H,EAAK8H,EAAO9H,CAAG,CAAC,CAAI,GAAI,OAAO,0BAA4B,OAAO,iBAAiB4H,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAU9H,EAAK,CAAE,OAAO,eAAe4H,EAAQ5H,EAAK,OAAO,yBAAyB8H,EAAQ9H,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAO4H,CAAS,CAC1f,SAAS9H,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAOlX,SAAS0jB,GAAYC,EAAO,CACjC,OAAQA,GAAU,KAA2B,OAASA,EAAM,QAAU,MACxE,CACO,MAAMC,CAAU,CAWrB,OAAO,mBAAmBC,EAAGC,EAAGC,EAAS,CACvC,IAAIpR,EAASiR,EAAU,aAAaC,EAAGE,CAAO,EAC1C1Q,EAAMuQ,EAAU,UAAUE,EAAGC,CAAO,EACpCC,EAAoBJ,EAAU,wBAAwBE,EAAGC,CAAO,EACpE,MAAO,CACL,EAAAF,EACA,EAAAC,EACA,IAAAzQ,EACA,OAAAV,EACA,kBAAAqR,CACN,CACG,CACD,OAAO,kBAAkBH,EAAGC,EAAGC,EAAS,CACtC,GAAI,CACF,IAAA1Q,EACA,OAAAV,CACD,EAAGiR,EAAU,mBAAmBC,EAAGC,EAAGC,CAAO,EAC1C,CACF,gBAAAE,EACA,cAAAC,EACA,YAAAC,EACA,SAAAC,EACA,aAAAC,EACA,UAAAC,CACD,EAAGP,EACAQ,EAAWlR,IAAQ,KAAOiR,EAAU,IAAIjR,CAAG,EAAI,KAC/CsD,EAAchE,IAAW,KAAO0R,EAAa,IAAI1R,CAAM,EAAI,KAC3DlJ,EAAOkJ,IAAW,KAAOwR,EAAY,IAAIxR,CAAM,EAAI,KACnDnJ,EAAM6J,IAAQ,KAAO+Q,EAAS,IAAI/Q,CAAG,EAAI,KACzCmR,EAAc7R,IAAW,KAAOsR,EAAgB,IAAItR,CAAM,EAAI,KAC9D8R,EAAYpR,IAAQ,KAAO6Q,EAAc,IAAI7Q,CAAG,EAAI,KACxD,MAAO,CACL,IAAAA,EACA,OAAAV,EACA,SAAU4R,GAAsD,KAChE,YAAa5N,GAA+D,KAC5E,KAAMlN,GAA0C,KAChD,IAAKD,GAAuC,KAC5C,YAAagb,GAA+D,KAC5E,UAAWC,GAAyD,IAC1E,CACG,CACD,OAAO,wBAAwBX,EAAGC,EAAS,CACzC,IAAI1Q,EAAMuQ,EAAU,UAAUE,EAAGC,CAAO,EACpC,CACF,mBAAAW,EACA,qBAAAC,CACD,EAAGZ,EACJ,GAAI1Q,IAAQ,MAAQyQ,GAAKY,EAAqBC,EAC5C,OAAO7P,GAAM6P,EAAuB,KAAK,KAAKb,EAAIY,CAAkB,EAAG,EAAGC,EAAuB,CAAC,CAGrG,CASD,OAAO,qBAAqB3Q,EAAO4Q,EAAO5iB,EAAU,CAClD,QAASwF,EAAI,EAAGA,EAAIwM,GAASxM,EAAIod,EAAOpd,GAAK,EAAG,CAC9C,IAAI0I,EAASlO,EAASwF,CAAC,EACvB,GAAI0I,IAAW,OACb,OAAOA,CAEV,CAEF,CASD,OAAO,mBAAmB+D,EAAK2Q,EAAO5iB,EAAU,CAC9C,QAASwF,EAAI,EAAGA,EAAIyM,GAAO2Q,GAAS3Q,EAAMzM,IAAM,EAAGA,GAAK,EAAG,CACzD,IAAI0I,EAASlO,EAAS4iB,GAAS3Q,EAAMzM,EAAE,EACvC,GAAI0I,IAAW,OACb,OAAOA,CAEV,CAEF,CASD,OAAO,gBAAgB8D,EAAOC,EAAK2Q,EAAO5iB,EAAU,CAClD,IAAIkO,EAAS0T,EAAU,qBAAqB5P,EAAO4Q,EAAO5iB,CAAQ,EAClE,OAAIkO,IAAW,OACNA,EAEF0T,EAAU,mBAAmB3P,EAAK2Q,EAAO5iB,CAAQ,CACzD,CAaD,OAAO,gBAAgB6iB,EAAcC,EAAYC,EAAoBC,EAAkBC,EAAYjjB,EAAU,CAC3G,IAAIkjB,EAAoB,KAAK,IAAIL,EAAcE,CAAkB,EAC7DI,EAAkB,KAAK,IAAIL,EAAYG,EAAaD,EAAmB,CAAC,EACxE9U,EAAS0T,EAAU,gBAAgBmB,EAAoBC,EAAkBC,EAAYjjB,CAAQ,EACjG,GAAIkO,IAAW,OACb,OAAOA,EAET,QAAS1I,EAAI0d,EAAmB1d,GAAK2d,EAAiB3d,GAAK,EAEzD,GADA0I,EAASlO,EAASwF,CAAC,EACf0I,IAAW,OACb,OAAOA,CAIZ,CAUD,OAAO,SAASkV,EAAWC,EAAiBC,EAAWC,EAAY,CACjE,IAAIC,EAAsBC,EACtBC,GAASF,EAAuBH,EAAgB,IAAID,CAAS,KAAO,MAAQI,IAAyB,OAASA,EAAuB,EACrIG,GAAYF,EAAiBH,EAAU,IAAIF,CAAS,KAAO,MAAQK,IAAmB,OAASA,EAAiB,EACpH,OAAOC,GAASH,GAAcA,GAAcG,EAAQC,CACrD,CAaD,OAAO,gBAAgBrS,EAAQsS,EAAWC,EAAeC,EAAa3jB,EAAOkjB,EAAiBC,EAAW,CACvG,IAAIS,EAAiB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACrFC,EAAeD,EAAiB,OAAYnC,EAAU,gBAAgBiC,EAAeC,EAAaF,EAAWrhB,GAAQ,CACvH,GAAIqf,EAAU,SAASrf,EAAM8gB,EAAiBC,EAAWhS,CAAM,EAC7D,OAAO/O,CAGf,CAAK,EACD,GAAI,CAACwhB,GAAkBC,IAAiB,OACtC,OAAOA,EAET,QAASxe,EAAI,EAAGA,EAAIrF,EAAM,OAAQqF,GAAK,EAAG,CACxC,IAAIjD,EAAOpC,EAAMqF,CAAC,EAClB,GAAIoc,EAAU,SAASrf,EAAM8gB,EAAiBC,EAAWhS,CAAM,EAC7D,OAAO/O,CAEV,CACD,OAAO,IACR,CAQD,OAAO,aAAasf,EAAGE,EAAS,CAC9B,IAAIgC,EAAiB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACrF,CACF,YAAAhE,EACA,wBAAAkE,EACA,yBAAAC,EACA,eAAAC,EACA,YAAAhC,EACA,gBAAAF,EACA,MAAAmC,CACD,EAAGrC,EACJ,OAAIF,EAAIuC,EACC,KAEF,KAAK,gBAAgBvC,EAAIuC,EAAOrE,EAAakE,EAAyBC,EAA0BC,EAAgBhC,EAAaF,EAAiB8B,CAAc,CACpK,CAQD,OAAO,UAAUjC,EAAGC,EAAS,CAC3B,GAAI,CACF,oBAAAsC,EACA,uBAAAC,EACA,SAAAtE,EACA,YAAAuE,EACA,SAAAnC,EACA,cAAAF,EACA,MAAAsC,CACD,EAAGzC,EACJ,OAAID,EAAI0C,EACC,KAEF,KAAK,gBAAgB1C,EAAI0C,EAAOxE,EAAUqE,EAAqBC,EAAwBC,EAAanC,EAAUF,CAAa,CACnI,CAUD,OAAO,iBAAiB/f,EAAYsiB,EAAcC,EAAcC,EAAW,CACzE,IAAIC,EAAmBF,EAAa,UAAU9mB,GAASA,IAAUuE,CAAU,GAAK,EAEhF,IADAyiB,GAAoB,EACbA,GAAoB,MAAQA,GAAoB,GAAG,CACxD,IAAIriB,EAAOmiB,EAAaE,CAAgB,EACpCC,EAAaJ,EAAa,IAAIliB,CAAI,EACtC,GAAIsiB,GAAc,MAAQF,EAAU,IAAIE,CAAU,IAAM,EACtD,OAAOtiB,EAETqiB,GAAoB,CACrB,CACD,OAAO,IACR,CAQD,OAAO,mBAAmBziB,EAAY4f,EAAS,CAC7C,GAAI,CACF,aAAAM,EACA,eAAA8B,EACA,iBAAAW,CACD,EAAG/C,EACJ,OAAOH,EAAU,iBAAiBzf,EAAYkgB,EAAc8B,EAAgBW,CAAgB,CAC7F,CAQD,OAAO,gBAAgB3iB,EAAY4f,EAAS,CAC1C,GAAI,CACF,UAAAO,EACA,YAAAiC,EACA,eAAAQ,CACD,EAAGhD,EACJ,OAAOH,EAAU,iBAAiBzf,EAAYmgB,EAAWiC,EAAaQ,CAAc,CACrF,CAUD,OAAO,wBAAwBlD,EAAGC,EAAGC,EAASiD,EAAO,CACnD,GAAI,CACF,eAAAC,EACA,mBAAAvC,EACA,gBAAAwC,EACA,kBAAAC,EACA,eAAAhB,EACA,YAAAhC,EACA,gBAAAF,EACA,qBAAAU,CACD,EAAGZ,EACA,CACF,kBAAAqD,EACA,0BAAAC,CACD,EAAGL,EACJ,GAAIrC,EAAuBD,EAAqBZ,GAAK,CAACsD,GAAqBC,GAA6B,EACtG,OAAO,KAOT,QALIjB,EAAQvC,EAAIoD,EACZK,EAAoBD,EAA4B,GAGhDE,EAAyB,GACpB/f,EAAI0f,EAAgB,OAAS,EAAG1f,GAAK,EAAGA,GAAK,EAAG,CACvD,IAAIggB,EAAkBC,EAClB9U,EAASuU,EAAgB1f,CAAC,EAC1BkgB,GAAWF,EAAmBrD,EAAY,IAAIxR,CAAM,KAAO,MAAQ6U,IAAqB,OAASA,EAAmB,EACpHhD,GAAeiD,EAAuBxD,EAAgB,IAAItR,CAAM,KAAO,MAAQ8U,IAAyB,OAASA,EAAuB,EACxIE,EAAiBnD,IAAgB,EACrC,GAAI,CAAC+C,GAA0B,CAACI,EAAgB,CAC9C,IAAIC,EAAOF,EAAUlD,EACjBmD,EACFC,GAAQN,EACCC,IACTK,GAAQN,GAEV,IAAIO,EAAOD,EAAON,EACdQ,EAAOF,EAAON,EAClB,GAAIO,GAAQzB,GAASA,GAAS0B,EAC5B,OAAOnV,EAET4U,EAAyBI,CAC1B,CACF,CAGDJ,EAAyB,GACzB,QAASQ,EAAK5B,EAAe,OAAS,EAAG4B,GAAM,EAAGA,GAAM,EAAG,CACzD,IAAIC,EAAmBC,EACnBC,EAAU/B,EAAe4B,CAAE,EAC3BI,IAAYH,EAAoB7D,EAAY,IAAI+D,CAAO,KAAO,MAAQF,IAAsB,OAASA,EAAoB,EACzHI,IAAgBH,EAAwBhE,EAAgB,IAAIiE,CAAO,KAAO,MAAQD,IAA0B,OAASA,EAAwB,EAC7II,GAAkBD,KAAiB,EAGvC,GAAID,GAAWhB,EAAoBiB,GACjC,OAAO,KAET,GAAI,CAACb,GAA0B,CAACc,GAAiB,CAC/C,IAAIC,GAAQH,GAAWC,GACnBC,GACFC,IAAShB,EACAC,IACTe,IAAShB,GAEX,IAAIiB,GAAQD,GAAQhB,EAChBkB,GAAQF,GAAQhB,EACpB,GAAIiB,IAASnC,GAASA,GAASoC,GAC7B,OAAON,EAETX,EAAyBc,EAC1B,CACF,CACD,OAAO,IACR,CAQD,OAAO,aAAajD,EAAWqD,EAAc,CAC3C,OAAOA,EAAa,IAAIrD,CAAS,IAAM,CACxC,CAQD,OAAO,eAAe9O,EAAayN,EAAS,CAC1C,GAAI,CACF,gBAAAE,CACD,EAAGF,EACJ,OAAOH,EAAU,aAAatN,EAAa2N,CAAe,CAC3D,CAQD,OAAO,cAAc5Q,EAAK0Q,EAAS,CACjC,GAAI1Q,GAAO,KACT,MAAO,GAET,GAAI,CACF,oBAAAgT,EACA,uBAAAC,EACA,SAAAtE,CACD,EAAG+B,EACJ,OAAO1Q,EAAMgT,GAAuBhT,GAAO2O,EAAWsE,CACvD,CAQD,OAAO,iBAAiB3T,EAAQoR,EAAS,CACvC,GAAIpR,GAAU,KACZ,MAAO,GAET,GAAI,CACF,wBAAAsT,EACA,yBAAAC,EACA,YAAAnE,CACD,EAAGgC,EACJ,OAAOpR,EAASsT,GAA2BtT,GAAUoP,EAAcmE,CACpE,CAUD,OAAO,eAAed,EAAWqD,EAAc/B,EAAc,CAC3D,GAAI,CAAC9C,EAAU,aAAawB,EAAWqD,CAAY,EACjD,MAAO,GAIT,QAFIC,EAAc,CAACtD,CAAS,EACxBwB,EAAmBF,EAAa,UAAU9mB,GAASA,IAAUwlB,CAAS,EACjE5d,EAAIof,EAAmB,EAAGpf,GAAK,EAAGA,GAAK,EAAG,CACjD,IAAIjD,EAAOmiB,EAAalf,CAAC,EACzB,GAAI,CAACoc,EAAU,aAAarf,EAAMkkB,CAAY,EAC5C,MAEFC,EAAY,KAAKnkB,CAAI,CACtB,CACD,OAAOmkB,CACR,CAQD,OAAO,iBAAiBpS,EAAayN,EAAS,CAC5C,GAAI,CACF,eAAAoC,EACA,gBAAAlC,CACD,EAAGF,EACJ,OAAOH,EAAU,eAAetN,EAAa2N,EAAiBkC,CAAc,CAC7E,CAUD,OAAO,qBAAqBtC,EAAGC,EAAGC,EAASiD,EAAO,CAChD,GAAI,CACF,eAAAC,EACA,mBAAAvC,EACA,YAAA6B,EACA,SAAAnC,EACA,cAAAF,CACD,EAAGH,EACA,CACF,eAAA4E,EACA,0BAAAtB,CACD,EAAGL,EACJ,GAAIC,EAAiBpD,GAAK,CAAC8E,GAAkBtB,GAA6B,EACxE,OAAO,KAOT,QALIb,EAAQ1C,EAAIY,EACZ4C,EAAoBD,EAA4B,GAGhDuB,EAAsB,GACjBphB,EAAI+e,EAAY,OAAS,EAAG/e,GAAK,EAAGA,GAAK,EAAG,CACnD,IAAIqhB,EAAeC,EACfzV,EAAMkT,EAAY/e,CAAC,EACnBuhB,GAAQF,EAAgBzE,EAAS,IAAI/Q,CAAG,KAAO,MAAQwV,IAAkB,OAASA,EAAgB,EAClGpE,GAAaqE,EAAqB5E,EAAc,IAAI7Q,CAAG,KAAO,MAAQyV,IAAuB,OAASA,EAAqB,EAC3HE,EAAcvE,IAAc,EAChC,GAAI,CAACmE,GAAuB,CAACI,EAAa,CACxC,IAAIC,EAAOF,EAAOtE,EACduE,EACFC,GAAQ3B,EACCsB,IACTK,GAAQ3B,GAEV,IAAI4B,EAAOD,EAAO3B,EACd6B,EAAOF,EAAO3B,EAClB,GAAI4B,GAAQ1C,GAASA,GAAS2C,EAC5B,OAAO9V,EAETuV,EAAsBI,CACvB,CACF,CACD,OAAO,IACR,CAQD,OAAO,YAAYI,EAAUrF,EAAS,CACpC,GAAI,CACF,cAAAG,CACD,EAAGH,EACJ,OAAOH,EAAU,aAAawF,EAAUlF,CAAa,CACtD,CAQD,OAAO,cAAckF,EAAUrF,EAAS,CACtC,GAAI,CACF,YAAAwC,EACA,cAAArC,CACD,EAAGH,EACJ,OAAOH,EAAU,eAAewF,EAAUlF,EAAeqC,CAAW,CACrE,CASD,OAAO,SAAS8C,EAAMC,EAAIC,EAAe,CACvC,GAAIF,IAASC,EACX,MAAO,CAAC,GAAGC,CAAa,EAE1B,IAAIC,EAAa,CAAC,GAAGD,CAAa,EAC9BE,EAAgBD,EAAWA,EAAW,OAAS,CAAC,EAIpD,OAAIC,GAAiB,MAAQ,CAAChG,GAAmBgG,EAAc,IAAI,GAAKA,EAAc,KAAOJ,EAEvFI,EAAc,OAASH,EACzBE,EAAW,IAAG,EAEdA,EAAWA,EAAW,OAAS,CAAC,EAAIliB,GAAcA,GAAc,CAAE,EAAEmiB,CAAa,EAAG,GAAI,CACtF,GAAAH,CACV,CAAS,EAGHE,EAAW,KAAK,CACd,KAAAH,EACA,GAAAC,CACR,CAAO,EAEIE,CACR,CAoBD,OAAO,UAAUH,EAAMK,EAASH,EAAe,CAC7C,IAAII,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACtF,GAAIN,EAAK,CAAC,IAAMA,EAAK,CAAC,EACpB,OAAOzF,EAAU,SAASyF,EAAK,CAAC,EAAGK,EAASH,CAAa,EAE3D,IAAID,EAAKI,EAIT,GAHIC,GAAeN,EAAK,CAAC,EAAIK,IAC3BJ,GAAMD,EAAK,CAAC,EAAIA,EAAK,CAAC,GAEpBA,EAAK,CAAC,IAAMC,EACd,MAAO,CAAC,GAAGC,CAAa,EAE1B,IAAIC,EAAa,CAAC,GAAGD,CAAa,EAC9BE,EAAgBD,EAAWA,EAAW,OAAS,CAAC,EAIhDC,GAAiB,MAAQhG,GAAmBgG,EAAc,IAAI,GAAKA,EAAc,KAAK,CAAC,EAAIA,EAAc,KAAK,CAAC,IAAMJ,EAAK,CAAC,EAAIA,EAAK,CAAC,GAAKI,EAAc,KAAOJ,EAAK,CAAC,EACvKG,EAAWA,EAAW,OAAS,CAAC,EAAIliB,GAAcA,GAAc,CAAE,EAAEmiB,CAAa,EAAG,GAAI,CACtF,GAAAH,CACR,CAAO,EAEDE,EAAW,KAAK,CACd,KAAAH,EACA,GAAAC,CACR,CAAO,EAEH,IAAIM,EAAmBJ,EAAWA,EAAW,OAAS,CAAC,EAEvD,OAAI/F,GAAmBmG,EAAiB,IAAI,GAAKA,EAAiB,KAAK,CAAC,IAAMA,EAAiB,IAC7FJ,EAAW,IAAG,EAETA,CACR,CACD,OAAO,gBAAgBH,EAAMC,EAAIC,EAAe,CAC9C,IAAII,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACtF,OAAO,MAAM,QAAQN,CAAI,EAAIzF,EAAU,UAAUyF,EAAMC,EAAIC,EAAeI,CAAW,EAAI/F,EAAU,SAASyF,EAAMC,EAAIC,CAAa,CACpI,CAUD,OAAO,eAAevV,EAAOC,EAAKuV,EAAY,CA2E5C,QA1EIK,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC9E3Z,EAAS,CAAC,CAAC8D,EAAOC,CAAG,CAAC,EACtB6V,EAAQ,UAAiB,CAC3B,GAAI,CACF,KAAMC,EACN,GAAIC,CACZ,EAAUR,EAAWhiB,CAAC,EACZyiB,EAAS,EACTC,EACAzG,GAAmBsG,CAAe,GACpCE,EAASF,EAAgB,CAAC,EAAIA,EAAgB,CAAC,EAAI,EACnD,CAACG,CAAQ,EAAIH,GAEbG,EAAWH,EAmDb,QAjDII,EAAYN,EAAUG,EAASE,EAC/BE,EAAUD,EAAYF,EAAS,EAC/BI,EAAUR,EAAUK,EAAWF,EAC/BM,EAAeD,EAAUF,EACzBI,EAAa,GACbC,EAAS,UAAkB,CAC7B,IAAIC,EAAYC,EACZC,GAAgBF,EAAava,EAAOwI,CAAC,EAAE,CAAC,KAAO,MAAQ+R,IAAe,OAASA,EAAa,OAAO,kBACnGG,GAAcF,EAAcxa,EAAOwI,CAAC,EAAE,CAAC,KAAO,MAAQgS,IAAgB,OAASA,EAAc,OAAO,kBACpGG,EACAC,EAAgB,CAAC,CAACH,EAAcR,EAAY,CAAC,EAAG,CAACA,EAAWC,CAAO,EAAG,CAACA,EAAU,EAAGQ,CAAU,CAAC,EAAE,IAAIjP,GAAS,CAChH,GAAI,CAAC3F,EAAGhR,CAAC,EAAI2W,EACb,MAAO,CAEP,KAAK,IAAI3F,EAAG2U,CAAY,EAAG,KAAK,IAAI3lB,EAAG4lB,CAAU,CAAC,CAC5D,CAAS,EAAE,OAAOG,GAAS,CACjB,GAAI,CAAC/U,EAAGhR,CAAC,EAAI+lB,EACb,OAAO/U,GAAKhR,CACtB,CAAS,EACA,IAAIyb,GAAS,CACZ,GAAI,CAACzK,EAAGhR,CAAC,EAAIyb,EACb,OAAI0J,GAAanU,GAAKoU,GAAWplB,GAE/B6lB,EAAa,CAAC7U,EAAIsU,EAActlB,EAAIslB,CAAY,EACzCO,GAELT,EAAUpU,EAEL,CAACA,EAAIiU,EAAQjlB,EAAIilB,CAAM,EAEzBxJ,CACjB,CAAS,EAAE,IAAIA,GAAS,CACd,GAAI,CAACzK,EAAGhR,CAAC,EAAIyb,EACb,OAAI4J,EAAUrU,GAAKqU,GAAWrlB,EAErB,CAAC,CAACgR,EAAGqU,EAAU,CAAC,EAAG,CAACA,EAAUJ,EAAQjlB,EAAIilB,CAAM,CAAC,EAEtDxJ,IAAUoK,EAEL,CAACpK,CAAK,EAEX4J,GAAWrU,EAEN,CAAC,CAACA,EAAIiU,EAAQjlB,EAAIilB,CAAM,CAAC,EAE3B,CAACxJ,CAAK,CACvB,CAAS,EAAE,KAAI,EACP8J,EAAW,KAAK,GAAGO,CAAa,CACxC,EACepS,EAAI,EAAGA,EAAIxI,EAAO,OAAQwI,GAAK,EACtC8R,IAIFta,EAASqa,EAAW,IAAI/W,GAAQ,CAC9B,GAAI,CAACwC,EAAGhR,CAAC,EAAIwO,EACb,MAAO,CAAC,OAAO,SAASwC,CAAC,EAAIA,EAAI,KAAM,OAAO,SAAShR,CAAC,EAAIA,EAAI,IAAI,CAC5E,CAAO,CACP,EACawC,EAAIqiB,EAAUL,EAAW,OAAS,EAAI,EAAGK,EAAUriB,GAAK,EAAIA,EAAIgiB,EAAW,OAAQK,EAAUriB,GAAK,EAAIA,GAAK,EAClHsiB,IAEF,OAAO5Z,CACR,CAUD,OAAO,eAAeuQ,EAAOuK,EAAcC,EAAWpB,EAAS,CAI7D,QAHIqB,EAAetH,EAAU,eAAenD,EAAM,YAAaA,EAAM,UAAWuK,EAAcnB,CAAO,EACjGsB,EAAYvH,EAAU,eAAenD,EAAM,SAAUA,EAAM,OAAQwK,EAAWpB,CAAO,EACrFtJ,EAAS,GACJ/Y,EAAI,EAAGA,EAAI0jB,EAAa,OAAQ1jB,GAAK,EAE5C,QADI0X,EAAIgM,EAAa1jB,CAAC,EACbkR,EAAI,EAAGA,EAAIyS,EAAU,OAAQzS,GAAK,EAAG,CAC5C,IAAI2J,EAAI8I,EAAUzS,CAAC,EACnB6H,EAAO,KAAK,IAAIT,EAAUZ,EAAE,CAAC,EAAGmD,EAAE,CAAC,EAAGnD,EAAE,CAAC,EAAGmD,EAAE,CAAC,CAAC,CAAC,CAClD,CAEH,OAAO9B,CACR,CAQD,OAAO,cAAc6K,EAAc5B,EAAY,CAC7C,IAAI3C,EAAajD,EAAU,eAAewH,EAAcA,EAAc5B,EAAY,EAAI,EAAE,CAAC,EAAE,CAAC,EAC5F,OAAO3C,CACR,CAQD,OAAO,gBAAgBwE,EAAgB7B,EAAY,CACjD,OAAO6B,EAAe,IAAI7jB,GAAKoc,EAAU,cAAcpc,EAAGgiB,CAAU,CAAC,CACtE,CAWD,OAAO,qBAAqBxV,EAAOC,EAAKuV,EAAY,CAClD,OAAO5F,EAAU,eAAe5P,EAAOC,EAAKuV,EAAY,EAAI,CAC7D,CAWD,OAAO,cAAc8B,EAAS,CAC5B,IAAIN,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI/rB,EACnFgsB,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIhsB,EACpF,OAAO2kB,EAAU,eAAe0H,EAASN,EAAcC,EAAW,EAAI,CACvE,CAWD,OAAO,eAAeM,EAAU,CAI9B,QAHIP,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI/rB,EACnFgsB,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIhsB,EAChFusB,EAAc,GACT,EAAI,EAAG,EAAID,EAAS,OAAQ,GAAK,EACxCC,EAAY,KAAK,GAAG5H,EAAU,cAAc2H,EAAS,CAAC,EAAGP,EAAcC,CAAS,CAAC,EAEnF,OAAOO,CACR,CAWD,OAAO,uBAAuBxX,EAAOC,EAAKuV,EAAY,CACpD,OAAO5F,EAAU,eAAe5P,EAAOC,EAAKuV,EAAY,EAAK,CAC9D,CAWD,OAAO,gBAAgBiC,EAAY,CACjC,IAAIT,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI/rB,EACnFgsB,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIhsB,EACpF,OAAO,KAAK,eAAewsB,EAAYT,EAAcC,EAAW,EAAK,CACtE,CAWD,OAAO,iBAAiBO,EAAa,CAInC,QAHIR,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI/rB,EACnFgsB,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIhsB,EAChFysB,EAAgB,GACX,EAAI,EAAG,EAAIF,EAAY,OAAQ,GAAK,EAC3CE,EAAc,KAAK,GAAG9H,EAAU,gBAAgB4H,EAAY,CAAC,EAAGR,EAAcC,CAAS,CAAC,EAE1F,OAAOS,CACR,CAQD,OAAO,gBAAgB7E,EAAY2C,EAAY,CAC7C,IAAI4B,EAAexH,EAAU,eAAeiD,EAAYA,EAAY2C,CAAU,EAAE,CAAC,EAAE,CAAC,EACpF,OAAO4B,CACR,CAQD,OAAO,kBAAkB3E,EAAc+C,EAAY,CACjD,OAAO/C,EAAa,IAAIjf,GAAKoc,EAAU,gBAAgBpc,EAAGgiB,CAAU,CAAC,CACtE,CAMD,OAAO,eAAgB,CACrB,GAAI,CACF,SAAA7lB,CACN,EAAQ,OAAO,UACX,OAAOA,EAAS,WAAW,KAAK,CACjC,CAMD,OAAO,gBAAiB,CACtB,OAAIigB,EAAU,gBACL,UAEF,SACR,CAOD,OAAO,kBAAkBhgB,EAAO,CAC9B,IAAIC,EAAc+f,EAAU,iBAC5B,OAAOhgB,EAAMC,CAAW,CACzB,CAQD,OAAO,kBAAkBgjB,EAAYC,EAAkB,CACrD,OAAOA,EAAiB,IAAID,CAAU,IAAM,CAC7C,CAQD,OAAO,sBAAsBlT,EAASmT,EAAkB,CACtD,OAAIA,EAAiB,OAAS,EACrB,GAEFnT,EAAQ,MAAMhB,GAAUmU,EAAiB,IAAInU,CAAM,IAAM,CAAC,CAClE,CAUD,OAAO,oBAAoBoR,EAAS1Q,EAAKV,EAAQ,CAC/C,GAAI,CACF,MAAAyT,EACA,MAAAI,EACA,MAAA9c,EACA,OAAAC,EACA,oBAAA0c,EACA,uBAAAC,EACA,wBAAAL,EACA,yBAAAC,EACA,kBAAAiB,EACA,mBAAAwE,EACA,kBAAAC,EACA,qBAAAC,EACA,YAAA9J,EACA,SAAAC,CACD,EAAG+B,EACA+H,EAAK1F,EACL2F,EAAKvF,EACLwF,EAAKtiB,EACLuiB,EAAKtiB,EACT,OAAIgJ,GAAU,OACRA,EAASsT,IACX6F,GAAM3E,GAEJxU,EAASoP,EAAcmE,IACzB8F,GAAML,IAGNtY,GAAO,OACLA,EAAMgT,IACR0F,GAAMH,GAEJvY,EAAM2O,EAAWsE,IACnB2F,GAAMJ,IAGH,CACL,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,CACN,CACG,CAYD,OAAO,eAAeC,EAAY,CAChC,IAAIC,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAChFC,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IACjFC,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAChFC,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACjF,CACF,OAAAC,EACA,OAAAC,CACD,EAAGN,EAOJ,MAAI,CAACtI,EAAU,cAAe,GAAIsI,EAAW,UAAYA,EAAW,SAAW,GAAKA,EAAW,SAAW,IACxGK,EAASL,EAAW,OACpBM,EAASN,EAAW,SAKjBA,GAAe,KAAgC,OAASA,EAAW,aAAe,WAAW,gBAGhGK,GAAUJ,EACVK,GAAUJ,IACAF,GAAe,KAAgC,OAASA,EAAW,aAAe,WAAW,iBAInGtI,EAAU,iBAGZ2I,EAAS,KAAK,MAAMA,EAASF,CAAS,EACtCG,EAAS,KAAK,MAAMA,EAASF,CAAU,IAKvCC,EAAS,KAAK,MAAMA,EAAS,KAAK,eAAe,EACjDC,EAAS,KAAK,MAAMA,EAAS,KAAK,eAAe,IAG9C,CACL,OAAAD,EACA,OAAAC,CACN,CACG,CACD,OAAO,cAAcC,EAAQC,EAAQ,CACnC,OAAID,EAAO,CAAC,GAAK,MAAQA,EAAO,CAAC,GAAK,MAAQC,EAAO,CAAC,GAAK,MAAQA,EAAO,CAAC,GAAK,KACvE,EAEFD,EAAO,CAAC,IAAMC,EAAO,CAAC,EAAID,EAAO,CAAC,EAAIC,EAAO,CAAC,EAAID,EAAO,CAAC,EAAIC,EAAO,CAAC,CAC9E,CACD,OAAO,kBAAkBnM,EAAQ,CAE/B,QADIoM,EAAe,GACVnlB,EAAI,EAAGA,EAAI+Y,EAAO,OAAQ/Y,GAAK,EAAG,CACzC,IAAIiZ,EAAQF,EAAO/Y,CAAC,EAChBwM,EAAQyM,EAAM,CAAC,EACfxM,EAAMwM,EAAM,CAAC,EACbjZ,IAAM,EACRmlB,EAAa,KAAK,CAAC3Y,EAAOC,CAAG,CAAC,EACrBD,EAAQ,GAAK2Y,EAAaA,EAAa,OAAS,CAAC,EAAE,CAAC,EAC7DA,EAAaA,EAAa,OAAS,CAAC,EAAE,CAAC,EAAI,KAAK,IAAIA,EAAaA,EAAa,OAAS,CAAC,EAAE,CAAC,EAAG1Y,CAAG,EAEjG0Y,EAAa,KAAK,CAAC3Y,EAAOC,CAAG,CAAC,CAEjC,CACD,OAAO0Y,CACR,CAQD,OAAO,kBAAkBC,EAAU7I,EAAS,CAC1C,GAAI,CACF,GAAIta,EACJ,GAAID,EACJ,GAAI2W,EACJ,GAAIC,CACL,EAAGwM,EACA,CACF,MAAAxG,EACA,MAAAI,EACA,MAAOqG,EACP,OAAQC,EACR,iBAAAC,EACA,oBAAAC,CACD,EAAGjJ,EAGAkJ,EAAUnY,GAAMsR,EAAQ3c,EAAM2c,EAAOyG,EAAYE,CAAgB,EACjEG,EAAWpY,GAAMsR,EAAQjG,EAAOiG,EAAOyG,EAAYE,CAAgB,EACnEI,EAASrY,GAAM0R,EAAQhd,EAAKgd,EAAOsG,EAAaE,CAAmB,EACnEI,EAAYtY,GAAM0R,EAAQpG,EAAQoG,EAAOsG,EAAaE,CAAmB,EAC7E,MAAO,CACL,GAAIC,EACJ,GAAIE,EACJ,GAAID,EACJ,GAAIE,EACJ,MAAOR,EAAS,KACtB,CACG,CAYD,OAAO,qBAAqBjkB,EAAOgK,EAAQU,EAAK,CAC9C,GAAI,CACF,QAAA0Q,EACA,MAAArE,EACA,MAAAsH,CACD,EAAGre,EACA,CACF,YAAA0kB,EACA,YAAAlJ,EACA,gBAAAF,EACA,SAAAG,EACA,cAAAF,EACA,UAAAI,EACA,aAAAD,CACD,EAAGN,EACA,CACF,sBAAAuJ,EACA,gBAAAC,EACA,sBAAAC,CACD,EAAGxG,EACAzC,EAAWkJ,GAAWnJ,EAAWjR,CAAG,EACpCsD,EAAc8W,GAAWpJ,EAAc1R,CAAM,EAC7C+a,EAAYhO,EAAM,iBAAiB/I,EAAa4N,CAAQ,EACxDV,EAAI4J,GAAWtJ,EAAaxR,CAAM,EAClCmR,EAAI2J,GAAWrJ,EAAU/Q,CAAG,EAC5BmR,EAAciJ,GAAWxJ,EAAiBtR,CAAM,EAChD8R,EAAYgJ,GAAWvJ,EAAe7Q,CAAG,EACzCsa,EAAgBhb,IAAW0a,EAC3BO,EAAa,EACbhO,GAAsBF,CAAK,GAAKA,EAAM,mBAAqBiO,IAC7DC,EAAaL,GAAmB7N,EAAM,YAAYrM,CAAG,EAAI,GAAKma,GAEhE,IAAIK,EAAYrJ,EAAcoJ,EAC1BE,EAAQjK,EAAIyJ,EACZS,EAAQjK,EAAIW,EAAY,GAC5B,OAAIiJ,IAAc,QAChBI,EAAQjK,EAAIgK,EAAYP,EACfI,IAAc,WACvBI,EAAQjK,EAAIgK,EAAY,IAE1BC,GAASF,EACF,CACL,MAAOC,EAAYP,EAAwB,EAC3C,EAAGQ,EACH,EAAGC,CACT,CACG,CAOD,OAAO,6BAA6BxrB,EAAM,CACxC,IAAIyrB,EAASC,GAAY1rB,CAAI,EAC7B,OAAOyrB,EAAO,OAAOrK,GACfA,EAAM,OAAS,MACV,eAAe,KAAKA,EAAM,KAAK,EAEjC,EACR,CACF,CACH,CACAlkB,GAAgBmkB,EAAW,kBAAmB,IAAM,CAAC,EACrD,MAAAsK,GAAetK,EC5qCf,SAAS5c,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAU9H,EAAK,CAAEF,GAAgB8H,EAAQ5H,EAAK8H,EAAO9H,CAAG,CAAC,CAAI,GAAI,OAAO,0BAA4B,OAAO,iBAAiB4H,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAU9H,EAAK,CAAE,OAAO,eAAe4H,EAAQ5H,EAAK,OAAO,yBAAyB8H,EAAQ9H,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAO4H,CAAS,CAC1f,SAAS9H,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAalX,IAAImuB,GAAe,CAAC7Y,EAAIjN,IAAY,CACzC,IAAI+lB,EAAkB,GAClBC,EAAaC,GAAShZ,EAAIhO,GAAcA,GAAc,CAAE,EAAEe,CAAO,EAAG,GAAI,CAC1E,QAAS,IAAM,CAER+lB,IACHA,EAAkB,GAClBC,EAAW,MAAK,EAChBD,EAAkB,GAErB,CACF,EAAC,EACF,OAAOC,CACT,EACA,MAAAE,GAAeJ,GC/Bf,SAAS1uB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAIzX,IAAIwuB,GAAyB,IAS7B,MAAMC,WAAkBC,EAAY,CAClC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClBjvB,GAAgB,KAAM,wBAAyB0uB,GAAa,CAAC5rB,EAAMosB,IAAkB,CAEnF,GAAIA,GAAiBpsB,EAAK,OACxB,OAAOqhB,GAAU,6BAA6BrhB,CAAI,EAIpD,IAAIqsB,EAA8BrsB,EAAK,MAAMosB,EAAgB,EAAGH,EAAsB,EAAE,OAAO,IAAI,EAE/FK,EAAkBF,EAAgBC,EAElCA,IAAgC,KAClCC,EAAkB,KAAK,IAAIL,GAAwBjsB,EAAK,MAAM,GAEhE,IAAIusB,EAAyBvsB,EAAK,UAAU,EAAGssB,CAAe,EAC9D,OAAOjL,GAAU,6BAA6BkL,CAAsB,CACrE,EAAC,CACH,CAID,IAAI,qBAAsB,CACxB,MAAO,EACR,CAGD,IAAI,wBAAyB,CAC3B,MAAO,EACR,CAGD,IAAI,yBAA0B,CAC5B,MAAO,EACR,CAGD,IAAI,0BAA2B,CAC7B,MAAO,EACR,CASD,IAAI,sBAAuB,CACzB,MAAO,EACR,CAgBD,sBAAsBnc,EAAQU,EAAK,CAElC,CAQD,iBAAiBV,EAAQU,EAAK,CAC5B,MAAO,MACR,CASD,aAAaV,EAAQU,EAAK2T,EAAO,CAC/B,OAAOA,EAAM,SACd,CASD,uBAAuBrU,EAAQU,EAAK2T,EAAO,CACzC,OAAO,IACR,CAcD,qBAAqBrU,EAAQ,CAE3B,OAAO,IACR,CAOD,iBAAiBU,EAAK,CACpB,MAAO,EACR,CAOD,iBAAiBA,EAAK,CACpB,MAAO,EACR,CAMD,gBAAgBV,EAAQ,CAEtB,MAAO,EACR,CAMD,aAAaU,EAAK,CAChB,MAAO,EACR,CACD,qBAAqBwT,EAAYkI,EAAO,CAEvC,CACD,2BAA2BlI,EAAYkI,EAAO,CAE7C,CASD,cAAcpc,EAAQU,EAAK,CACzB,IAAIsb,EAAgB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAIH,GACpFjsB,EAAO,KAAK,YAAYoQ,EAAQU,CAAG,EACvC,OAAO,KAAK,sBAAsB9Q,EAAMosB,CAAa,CACtD,CACD,kBAAkBhc,EAAQU,EAAK,CAC7B,MAAO,MACR,CACH,CACA,MAAA2b,GAAeP,GCjMf,SAAShvB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAIzX,IAAIf,GAAc,GASlB,MAAMgwB,WAAsBR,EAAU,CACpC,YAAYpiB,EAAI,CACd,QACA5M,GAAgB,KAAM,KAAM,MAAM,EAClCA,GAAgB,KAAM,gBAAiB,MAAM,EAC7C,KAAK,GAAK4M,EACV,KAAK,cAAgB,CACtB,CAID,iBAAiB6iB,EAAOC,EAAWC,EAAU,CAC3C,MAAM,iBAAiBF,EAAOC,EAAWC,CAAQ,EACjD,KAAK,eAAiB,EAClB,KAAK,gBAAkB,GACzB,KAAK,eAAc,CAEtB,CACD,oBAAoBF,EAAOC,EAAWC,EAAU,CAC9C,MAAM,oBAAoBF,EAAOC,EAAWC,CAAQ,EACpD,KAAK,eAAiB,EAClB,KAAK,gBAAkB,GACzB,KAAK,cAAa,CAErB,CAMD,gBAAiB,CAEhB,CAMD,eAAgB,CAEf,CAWD,IAAI,gBAAiB,CACnB,OAAOnwB,EACR,CAMD,IAAI,iBAAkB,CACpB,OAAO,KAAK,OACb,CAeD,cAAc0T,EAAQU,EAAK,CACzB,MAAO,CACL,OAAAV,EACA,IAAAU,CACN,CACG,CAOD,oBAAoBV,EAAQ,CAC1B,OAAI,KAAK,aAAaA,CAAM,EACnB,CAACA,EAAQA,CAAM,EAEjB,IACR,CAGD,IAAI,qBAAsB,CACxB,OAAO1T,EACR,CAGD,IAAI,kBAAmB,CACrB,OAAOA,EACR,CAGD,IAAI,2BAA4B,CAC9B,OAAOA,EACR,CA4ED,IAAI,aAAc,CAChB,OAAO,IACR,CAKD,IAAI,cAAe,CACjB,OAAOA,EACR,CAKD,IAAI,aAAc,CAChB,OAAOA,EACR,CAKD,IAAI,eAAgB,CAClB,OAAOA,EACR,CAMD,eAAesJ,EAAO,CACpB,MAAO,EACR,CAMD,iBAAiBA,EAAO,CACtB,MAAO,EACR,CAMD,IAAI,kBAAmB,CACrB,MAAO,EACR,CACD,IAAI,cAAe,CACjB,MAAO,EACR,CASD,IAAI,6BAA8B,CAChC,MAAO,EACR,CAMD,IAAI,aAAc,CAChB,MAAO,EACR,CAUD,IAAI,0BAA2B,CAC7B,MAAO,EACR,CAKD,IAAI,0BAA2B,CAC7B,MAAO,EACR,CAKD,IAAI,mBAAoB,CACtB,MAAO,EACR,CAKD,IAAI,wBAAyB,CAC3B,MAAO,EACR,CAKD,IAAI,yBAA0B,CAC5B,MAAO,EACR,CAKD,IAAI,mBAAoB,CACtB,MAAO,EACR,CAKD,IAAI,2BAA4B,CAC9B,MAAO,EACR,CAKD,IAAI,mBAAoB,CACtB,MAAO,EACR,CA6CD,aAAa+N,EAAa,CACxB,MAAO,EACR,CA8BD,OAAQ,CAEP,CAKD,cAAe,CACb,MAAO,EACR,CAQD,IAAI,oBAAqB,CACvB,MAAO,EACR,CACD,sBAAsB3D,EAAQU,EAAK2T,EAAO,CACxC,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACH,CACAvnB,GAAgBwvB,GAAe,QAAS,OAAO,OAAO,CACpD,QAAS,UACT,kBAAmB,oBACnB,eAAgB,iBAChB,gBAAiB,kBACjB,cAAe,gBACf,gBAAiB,kBACjB,cAAe,gBACf,WAAY,aACZ,UAAW,YACX,eAAgB,iBAChB,qBAAsB,sBACxB,CAAC,CAAC,EACF,MAAAI,EAAeJ,GC3bf,SAASxvB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAIzX,IAAI0H,GAAMC,EAAI,OAAO,mBAAmB,EACjC,SAAS2nB,GAAoBzL,EAAG,CACrC,OAAOA,aAAa0L,EACtB,CACe,MAAMA,EAAkB,CACrC,YAAY/b,EAAM,CAChB,GAAI,CACF,KAAA1S,EACA,SAAAkF,EACA,MAAAwpB,EACA,MAAAT,EACA,aAAAU,EACA,OAAAC,CACD,EAAGlc,EACJ/T,GAAgB,KAAM,OAAQ,MAAM,EACpCA,GAAgB,KAAM,WAAY,MAAM,EACxCA,GAAgB,KAAM,QAAS,MAAM,EACrCA,GAAgB,KAAM,SAAU,MAAM,EACtCA,GAAgB,KAAM,QAAS,MAAM,EACrCA,GAAgB,KAAM,eAAgB,MAAM,EAC5CA,GAAgB,KAAM,kBAAmBkwB,EAAWnG,GAAc,CAChE,IAAIoG,EAAmB,KAAK,aAAa,KAAI,EACzCvE,EAAiBzH,EAAU,kBAAkBgM,EAAkBpG,CAAU,EACzExV,EAAQ,KAAK,IAAI,GAAGqX,CAAc,EAClCpX,EAAM,KAAK,IAAI,GAAGoX,CAAc,EACpC,OAAIpX,EAAMD,IAAU4b,EAAiB,OAAS,GAC5CloB,GAAI,KAAK,uBAAuB,OAAO,KAAK,KAAM,oBAAoB,CAAC,EAElE,CAACsM,EAAOC,CAAG,CACnB,EAAC,EACF,KAAK,KAAOnT,EACZ,KAAK,SAAWkF,EAChB,KAAK,MAAQwpB,EACb,KAAK,MAAQT,EACb,KAAK,aAAeU,EACpB,KAAK,OAASC,CACf,CACD,UAAUA,EAAQ,CAChB,KAAK,OAASA,CACf,CACD,YAAY1pB,EAAU,CACpB,IAAI6pB,EAAc,IAAI,IAAI,KAAK,SAAS,OAAO7pB,CAAQ,CAAC,EACxD,KAAK,SAAW,CAAC,GAAG6pB,CAAW,CAChC,CACD,eAAe7pB,EAAU,CACvB,IAAI6pB,EAAc,IAAI,IAAI,KAAK,QAAQ,EACvC7pB,EAAS,QAAQlF,GAAQ+uB,EAAY,OAAO/uB,CAAI,CAAC,EACjD,KAAK,SAAW,CAAC,GAAG+uB,CAAW,CAChC,CACD,IAAI,OAAQ,CACV,OAAO,KAAK,KAAK,WAAWN,GAAkB,gBAAgB,CAC/D,CACH,CACA9vB,GAAgB8vB,GAAmB,mBAAoB,WAAW,EC3D3D,SAASO,EAA+BpQ,EAAO,CACpD,OAAQA,GAAU,KAA2B,OAASA,EAAM,uBAAyB,SAAcA,GAAU,KAA2B,OAASA,EAAM,oBAAsB,SAAcA,GAAU,KAA2B,OAASA,EAAM,sBAAwB,SAAcA,GAAU,KAA2B,OAASA,EAAM,wBAA0B,SAAcA,GAAU,KAA2B,OAASA,EAAM,kBAAoB,MAC3b,CACO,SAASqQ,GAAuBrQ,EAAO,CAC5C,OAAOoQ,EAA+BpQ,CAAK,GAAKA,EAAM,kBAAoB,MAC5E,CCLA,IAAIsQ,GAAY,CAAC,gBAAgB,EAC/BC,GAAa,CAAC,gBAAgB,EAChC,SAASC,GAAyBzoB,EAAQ0oB,EAAU,CAAE,GAAI1oB,GAAU,KAAM,MAAO,GAAI,IAAIF,EAAS6oB,GAA8B3oB,EAAQ0oB,CAAQ,EAAOxwB,EAAK6H,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAI6oB,EAAmB,OAAO,sBAAsB5oB,CAAM,EAAG,IAAKD,EAAI,EAAGA,EAAI6oB,EAAiB,OAAQ7oB,IAAO7H,EAAM0wB,EAAiB7oB,CAAC,EAAO,EAAA2oB,EAAS,QAAQxwB,CAAG,GAAK,IAAkB,OAAO,UAAU,qBAAqB,KAAK8H,EAAQ9H,CAAG,IAAa4H,EAAO5H,CAAG,EAAI8H,EAAO9H,CAAG,EAAI,CAAG,OAAO4H,CAAS,CAC5e,SAAS6oB,GAA8B3oB,EAAQ0oB,EAAU,CAAE,GAAI1oB,GAAU,KAAM,MAAO,CAAE,EAAE,IAAIF,EAAS,CAAE,EAAM+oB,EAAa,OAAO,KAAK7oB,CAAM,EAAO9H,EAAK,EAAG,IAAK,EAAI,EAAG,EAAI2wB,EAAW,OAAQ,IAAO3wB,EAAM2wB,EAAW,CAAC,EAAO,EAAAH,EAAS,QAAQxwB,CAAG,GAAK,KAAa4H,EAAO5H,CAAG,EAAI8H,EAAO9H,CAAG,GAAK,OAAO4H,CAAS,CACnT,SAASP,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,EAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAU9H,EAAK,CAAEF,GAAgB8H,EAAQ5H,EAAK8H,EAAO9H,CAAG,CAAC,CAAI,GAAI,OAAO,0BAA4B,OAAO,iBAAiB4H,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAU9H,EAAK,CAAE,OAAO,eAAe4H,EAAQ5H,EAAK,OAAO,yBAAyB8H,EAAQ9H,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAO4H,CAAS,CAC1f,SAAS9H,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAUzX,IAAI0H,GAAMC,EAAI,OAAO,eAAe,EAI7B,SAAS4oB,GAAe5nB,EAAO,CACpC,OAAOA,EAAM,YAAc,MAC7B,CACO,SAAS6nB,GAAe7nB,EAAO,CACpC,OAAO,MAAM,QAAQA,EAAM,UAAU,CACvC,CAQA,SAAS8nB,GAAa5M,EAAG6M,EAAO,CAC9B,OAAO7M,GAAK,GAAKA,EAAI6M,EAAM,MAC7B,CACA,SAASC,GAAc/wB,EAAO,CAC5B,OAAQA,GAAU,KAA2B,OAASA,EAAM,SAAW,IACzE,CACA,MAAMgxB,CAAc,CAOlB,OAAO,mBAAmBlR,EAAOmR,EAAW,CAC1C,GAAI,CACF,gBAAAC,EACA,eAAAC,EACA,aAAA/F,EACA,UAAAC,CACD,EAAG4F,EACA,CACF,QAAAld,CACD,EAAG+L,EACJ,MAAO,CACL,gBAAAoR,EACA,eAAAC,EACA,aAAc,CAAC,GAAG/F,CAAY,EAAE,OAAOxX,GAAQ,CAC7C,GAAI,CACF,GAAA8V,EACA,KAAAD,CACD,EAAG7V,EACJ,OAAOid,GAAanH,EAAI3V,CAAO,IAAM,OAAO0V,GAAS,UAAYoH,GAAapH,EAAM1V,CAAO,GAAK,MAAM,QAAQ0V,CAAI,GAAKoH,GAAapH,EAAK,CAAC,EAAG1V,CAAO,GAAK8c,GAAapH,EAAK,CAAC,EAAG1V,CAAO,EAC9L,CAAO,EAAE,IAAIgI,GAAS,CACd,GAAI,CACF,GAAA2N,EACA,KAAAD,CACD,EAAG1N,EACJ,MAAO,CACL,GAAIhI,EAAQ2V,CAAE,EAAE,KAChB,KAAM,MAAM,QAAQD,CAAI,EAAI,CAAC1V,EAAQ0V,EAAK,CAAC,CAAC,EAAE,KAAM1V,EAAQ0V,EAAK,CAAC,CAAC,EAAE,IAAI,EAAI1V,EAAQ0V,CAAI,EAAE,IACrG,CACA,CAAO,EACD,UAAW,CAAC,GAAG4B,CAAS,CAC9B,CACG,CAQD,OAAO,iBAAiBvL,EAAOmR,EAAW,CACxC,IAAIG,EAAgB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACpF,CACF,gBAAAF,EACA,eAAAC,EACA,aAAA/F,EACA,UAAAC,CACD,EAAG4F,EACA,CACF,QAAAld,CACD,EAAG+L,EACAuR,EAAoBL,EAAc,uBAAuBI,CAAa,EACtE3f,EAAcsC,EAAQ,IAAIoX,GAAS,CACrC,GAAI,CACF,KAAAjqB,CACD,EAAGiqB,EACJ,OAAOjqB,CACb,CAAK,EAAE,OAAOmwB,CAAiB,EAC3B,MAAO,CACL,gBAAAH,EACA,eAAAC,EACA,aAAc,CAAC,GAAG/F,CAAY,EAAE,IAAIkG,GAAS,CAC3C,GAAI,CACF,GAAA5H,EACA,KAAAD,CACD,EAAG6H,EACAC,EAAWtN,GAAK,OAAOA,GAAM,SAAWxS,EAAY,UAAUvQ,GAAQA,IAAS+iB,CAAC,EAAIA,EACxF,MAAO,CACL,GAAIsN,EAAS7H,CAAE,EACf,KAAM,MAAM,QAAQD,CAAI,EAAI,CAAC8H,EAAS9H,EAAK,CAAC,CAAC,EAAG8H,EAAS9H,EAAK,CAAC,CAAC,CAAC,EAAI8H,EAAS9H,CAAI,CAC5F,CACA,CAAO,EAAE,OAAO+H,GAAS,CACjB,GAAI,CACF,GAAA9H,EACA,KAAAD,CACD,EAAG+H,EACJ,OAAOX,GAAanH,EAAIjY,CAAW,IAAM,OAAOgY,GAAS,UAAYoH,GAAapH,EAAMhY,CAAW,GAAK,MAAM,QAAQgY,CAAI,GAAKoH,GAAapH,EAAK,CAAC,EAAGhY,CAAW,GAAKof,GAAapH,EAAK,CAAC,EAAGhY,CAAW,EAC9M,CAAO,EACD,UAAW,CAAC,GAAG4Z,CAAS,CAC9B,CACG,CAQD,OAAO,4BAA4BvL,EAAO2R,EAAoB,CAC5D,GAAI,CACF,qBAAAC,EACA,WAAAC,EACA,iBAAAC,CACD,EAAGH,EAGJ,MAAO,CACL,qBAAAC,EACA,WAAAC,EACA,iBAAkB,CAAC,GAAGC,CAAgB,CAC5C,CACG,CAQD,OAAO,0BAA0B9R,EAAO2R,EAAoB,CAC1D,GAAI,CACF,qBAAAC,EACA,iBAAAE,CACD,EAAGH,EACAE,EAAaf,GAAea,CAAkB,EAAIA,EAAmB,WAAa,CAACA,EAAmB,SAAS,EACnH,MAAO,CACL,qBAAAC,EACA,WAAAC,EACA,iBAAkB,IAAI,IAAI,CAAC,GAAG7S,GAAiB,SAAU,GAAG8S,CAAgB,CAAC,CACnF,CACG,CAOD,OAAO,sBAAsBC,EAAc,CACzC,MAAO,CAAC,GAAGA,CAAY,EAAE,IAAIC,GAAS,CACpC,GAAI,CAACpb,EAAaqb,CAAW,EAAID,EAC7B,CACF,KAAAnvB,CACD,EAAGovB,EACJ,MAAO,CAACrb,EAAa,CACnB,KAAA/T,CACR,CAAO,CACP,CAAK,CACF,CACD,OAAO,cAAc3C,EAAO,CAC1B,OAAOA,GAAS,KAAO,GAAG,OAAOA,CAAK,EAAI,IAC3C,CAOD,OAAO,cAAcyW,EAAO,CAC1B,OAAOA,EAAM,IAAIP,GAAQ,CACvB,GAAI,CACF,OAAAnD,EACA,MAAA6D,EACA,UAAAD,CACD,EAAGT,EACJ,MAAO,CACL,OAAQnD,EAAO,KACf,MAAA6D,EACA,UAAAD,CACR,CACA,CAAK,CACF,CAOD,OAAO,qBAAqBqb,EAAY,CACtC,IAAIC,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACnF,CACF,mBAAAR,EACA,cAAAS,CACD,EAAGF,EACAL,EAAaf,GAAea,CAAkB,EAAIA,EAAmB,WAAa,CAACA,EAAmB,SAAS,EAC/G,CACF,gBAAAU,EACA,aAAAN,EACA,MAAApb,CACD,EAAGyb,EACJ,MAAO,CACL,gBAAAC,EACA,aAAAF,EACA,WAAAN,EACA,aAAAE,EACA,MAAApb,CACN,CACG,CACD,OAAO,0BAA0B1C,EAAS,CACxC,IAAIke,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACvF,OAAOA,EAAa,OAAOG,GAAS,CAClC,GAAI,CACF,KAAAlxB,EACA,KAAA6L,CACD,EAAGqlB,EACJ,OAAOre,EAAQ,KAAKse,GAAS,CAC3B,GAAI,CACF,KAAM7f,EACN,KAAM+D,CACP,EAAG8b,EACJ,OAAO7f,IAAetR,GAAQqV,IAAexJ,CACrD,CAAO,CACP,CAAK,CACF,CACD,OAAO,wBAAwBulB,EAAW,CAGxC,QAFInX,EAAU,GACV5T,EAAO,MAAM,KAAK+qB,EAAU,KAAM,GAC7B1qB,EAAI,EAAGA,EAAIL,EAAK,OAAQK,GAAK,EAAG,CACvC,IAAI7H,EAAMwH,EAAKK,CAAC,EACZjD,EAAO2tB,EAAU,IAAIvyB,CAAG,GACvB4E,GAAS,KAA0B,OAASA,EAAK,SAAW,MAC/DwW,EAAQ,KAAKxW,EAAK,MAAM,CAE3B,CACD,OAAOwW,CACR,CAOD,OAAO,iBAAiB+L,EAAkB,CACxC,MAAO,CAAC,GAAGA,EAAiB,QAAS,GAAE,OAAOqL,GAAS,CACrD,GAAI,CAAG,CAAAvyB,CAAK,EAAIuyB,EAChB,OAAOvyB,IAAU,CACvB,CAAK,EAAE,IAAIwyB,GAAU,CACf,GAAI,CAACzyB,CAAG,EAAIyyB,EACZ,OAAOzyB,CACb,CAAK,CACF,CACD,OAAO,uBAAuBqxB,EAAe,CAC3C,OAAOA,EAAc,IAAIqB,GAAgBA,EAAa,MAAM,GAAG,EAAE,CAAC,CAAC,CACpE,CACD,OAAO,4BAA4BC,EAAkBtB,EAAe,CAClE,IAAIuB,EAAwB3B,EAAc,uBAAuB0B,CAAgB,EAC7ErB,EAAoBL,EAAc,uBAAuBI,CAAa,EAC1E,OAAOuB,EAAsB,OAAOC,GAAuB,CAACvB,EAAkB,SAASuB,CAAmB,CAAC,CAC5G,CACD,OAAO,qBAAqBnc,EAAOhF,EAAa,CAC9C,OAAOgF,EAAM,OAAOP,GAAQ,CAACzE,EAAY,SAASyE,EAAK,OAAO,IAAI,CAAC,CACpE,CACD,OAAO,uBAAuBnC,EAASoH,EAAS0X,EAAoB,CAClE,IAAIphB,EAAcsC,EAAQ,IAAI+e,GAAU,CACtC,GAAI,CACF,KAAA5xB,CACD,EAAG4xB,EACJ,OAAO5xB,CACb,CAAK,EACG2Z,EAAY,IAAI,IAAIM,CAAO,EAC/B,OAAA0X,EAAmB,QAAQrgB,GAAcqI,EAAU,OAAOpJ,EAAY,QAAQe,CAAU,CAAC,CAAC,EACnFqI,CACR,CACD,OAAO,6BAA6B9G,EAASqX,EAAcyH,EAAoB,CA+C7E,QA9CIphB,EAAcsC,EAAQ,IAAIgf,GAAU,CACtC,GAAI,CACF,KAAA7xB,CACD,EAAG6xB,EACJ,OAAO7xB,CACb,CAAK,EACG8xB,EAAW,CAAC,GAAG5H,CAAY,EAC3BlB,EAAQ,UAAiB,CAI3B,QAHI+I,EAAoBJ,EAAmBjrB,CAAC,EACxCsrB,EAAqBzhB,EAAY,UAAUvQ,GAAQA,IAAS+xB,CAAiB,EAC7EE,EAAQ,GACHra,EAAI,EAAGA,EAAIka,EAAS,OAAQla,GAAK,EAAG,CAC3C,IAAIsa,EAAOJ,EAASla,CAAC,EACjBua,EAAU3rB,EAAc,CAAE,EAAE0rB,CAAI,EAChC,CAAC7I,EAAWC,CAAO,EAAI,MAAM,QAAQ4I,EAAK,IAAI,EAAIA,EAAK,KAAO,CAACA,EAAK,KAAMA,EAAK,IAAI,EACnFF,GAAsBE,EAAK,KAC7BC,EAAQ,IAAM,GAKZH,EAAqB3I,IACvBA,GAAa,GAEX2I,GAAsB1I,IACxBA,GAAW,GAETD,GAAaC,GAAWD,IAAc8I,EAAQ,KAC5C9I,IAAcC,EAChB2I,EAAM,KAAKzrB,EAAcA,EAAc,GAAI2rB,CAAO,EAAG,GAAI,CACvD,KAAM9I,CACP,EAAC,EAEF4I,EAAM,KAAKzrB,EAAcA,EAAc,GAAI2rB,CAAO,EAAG,GAAI,CACvD,KAAM,CAAC9I,EAAWC,CAAO,CAC1B,EAAC,GAMN0I,EAAqBlP,EAAU,eAAekP,EAAoBA,EAAoB,CAACE,CAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CACnG,CACDJ,EAAWG,EACX1hB,EAAY,OAAOA,EAAY,UAAUvQ,GAAQA,IAAS+xB,CAAiB,EAAG,CAAC,CACrF,EACarrB,EAAI,EAAGA,EAAIirB,EAAmB,OAAQjrB,GAAK,EAClDsiB,IAEF,OAAO8I,CACR,CACD,OAAO,uCAAuCM,EAAuBT,EAAoB,CACvF,OAAOS,EAAsB,OAAO9gB,GAAc,CAACqgB,EAAmB,SAASrgB,CAAU,CAAC,CAC3F,CACD,OAAO,yBAAyB+gB,EAAc1pB,EAAM0W,EAAO6K,EAAcoI,EAAe,CAEtF,QADIzf,EAAU,GACLnM,EAAIiC,EAAMjC,GAAK2Y,EAAO3Y,GAAK,EAAG,CACrC,IAAIqf,EAAajD,EAAU,cAAcpc,EAAGwjB,CAAY,EACpDnE,GAAc,GAAKA,EAAasM,EAAa,QAAU,CAACC,EAAc,SAASvM,CAAU,GAC3FlT,EAAQ,KAAKwf,EAAatM,CAAU,CAAC,CAExC,CACD,OAAOlT,CACR,CACD,OAAO,sBAAsBwf,EAAchvB,EAAYkvB,EAAOrI,EAAcoI,EAAe,CAGzF,QAFIzf,EAAU,GACVnM,EAAIrD,EACDqD,GAAK,GAAKmM,EAAQ,OAAS0f,GAAO,CACvC,IAAIxM,EAAajD,EAAU,cAAcpc,EAAGwjB,CAAY,EACpDnE,GAAc,GAAKA,EAAasM,EAAa,QAAU,CAACC,EAAc,SAASvM,CAAU,GAC3FlT,EAAQ,QAAQwf,EAAatM,CAAU,CAAC,EAE1Crf,GAAK,CACN,CACD,OAAOmM,CACR,CACD,OAAO,sBAAsBwf,EAAchvB,EAAYkvB,EAAOrI,EAAcoI,EAAe,CAGzF,QAFIzf,EAAU,GACVnM,EAAIrD,EACDqD,EAAI2rB,EAAa,QAAUxf,EAAQ,OAAS0f,GAAO,CACxD,IAAIxM,EAAajD,EAAU,cAAcpc,EAAGwjB,CAAY,EACpDnE,GAAc,GAAKA,EAAasM,EAAa,QAAU,CAACC,EAAc,SAASvM,CAAU,GAC3FlT,EAAQ,KAAKwf,EAAatM,CAAU,CAAC,EAEvCrf,GAAK,CACN,CACD,OAAOmM,CACR,CACD,OAAO,kBAAkBwf,EAAcG,EAAiBC,EAAwB,CAC9E,IAAIC,EAAiB,CAAC,GAAGF,CAAe,EACxC,OAAAC,EAAuB,QAAQnhB,GAAc,CAC3C,IAAIO,EAASwgB,EAAa,KAAKM,GAAU,CACvC,GAAI,CACF,KAAA3yB,CACD,EAAG2yB,EACJ,OAAO3yB,IAASsR,CACxB,CAAO,EACGO,GAAU,MAAQ,CAAC2gB,EAAgB,SAAS3gB,CAAM,GACpD6gB,EAAe,KAAK7gB,CAAM,CAElC,CAAK,EACM6gB,CACR,CACD,OAAO,wBAAwB7f,EAASlK,EAAM0W,EAAO6K,EAAc,CACjE,IAAIoI,EAAgB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACpFG,EAAyB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC7FG,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EACtF,GAAI,EAAAjqB,GAAQ,MAAQ0W,GAAS,MAG7B,KAAIwT,EAAgB/C,EAAc,yBAAyBjd,EAASlK,EAAM0W,EAAO6K,EAAcoI,CAAa,EACxGQ,EAAcD,EAAc,OAASD,EACrCG,EAAcjD,EAAc,sBAAsBjd,EAASlK,EAAO,EAAGmqB,EAAa5I,EAAcoI,CAAa,EAC7GU,EAAelD,EAAc,sBAAsBjd,EAASwM,EAAQ,EAAGyT,EAAa5I,EAAcoI,CAAa,EAC/GW,EAAkB,CAAC,GAAGF,EAAa,GAAGF,EAAe,GAAGG,CAAY,EACxE,OAAOlD,EAAc,kBAAkBjd,EAASogB,EAAiBR,CAAsB,EACxF,CASD,OAAO,sBAAsBhT,EAAQ,CACnC,GAAIA,GAAU,MAAQA,EAAO,SAAW,EACtC,MAAO,GAMT,QADIyT,EAAW,IAAI,IACVxsB,EAAI,EAAGA,EAAI+Y,EAAO,OAAQ/Y,GAAK,EAAG,CACzC,IAAIiZ,EAAQF,EAAO/Y,CAAC,EAChBysB,EAAc,GAAG,OAAOxT,EAAM,SAAU,GAAG,EAAE,OAAOA,EAAM,MAAM,EAChEyT,EAAiB,GAAG,OAAOzT,EAAM,YAAa,GAAG,EAAE,OAAOA,EAAM,SAAS,EACxEuT,EAAS,IAAIC,CAAW,GAC3BD,EAAS,IAAIC,EAAa,EAAE,EAE9BD,EAAS,IAAIC,CAAW,EAAE,KAAKC,CAAc,CAC9C,CAGD,QAFI/sB,EAAO,CAAC,GAAG6sB,EAAS,KAAM,GAC1BG,EAAoBH,EAAS,IAAI7sB,EAAK,CAAC,CAAC,EAAE,KAAM,EAAC,KAAK,GAAG,EACpD4gB,EAAK,EAAGA,EAAK5gB,EAAK,OAAQ4gB,GAAM,EACvC,GAAIiM,EAAS,IAAI7sB,EAAK4gB,CAAE,CAAC,EAAE,KAAI,EAAG,KAAK,GAAG,IAAMoM,EAC9C,MAAO,GAGX,MAAO,EACR,CAMD,OAAO,aAAav0B,EAAO,CAIzB,MAHI,CAAC,OAAO,UAAUA,CAAK,GAGrB,OAAOA,GAAU,SACd,GAEFA,GAAS,CACjB,CAQD,OAAO,kBAAkB2gB,EAAQ6T,EAAY,CAC3C,GAAI7T,GAAU,MAAQA,EAAO,SAAW,EACtC,MAAO,GAET,GAAIA,EAAO,CAAC,EAAE,cAAgB,MAAQA,EAAO,CAAC,EAAE,YAAc,KAE5D,MAAO,CAAC,GAAG6T,CAAU,EAGvB,QADIC,EAAY,IAAI,IACX7sB,EAAI,EAAGA,EAAI+Y,EAAO,OAAQ/Y,GAAK,EAAG,CACzC,IAAIiZ,EAAQF,EAAO/Y,CAAC,EACpB8sB,EAAc7T,EAAM,WAAW,EAC/B6T,EAAc7T,EAAM,SAAS,EAC7B,QAASvB,GAAK+C,EAAqBxB,EAAM,eAAiB,MAAQwB,IAAuB,OAASA,EAAqB,EAAG/C,KAAOiD,EAAmB1B,EAAM,aAAe,MAAQ0B,IAAqB,OAASA,EAAmBiS,EAAW,OAAS,GAAIlV,GAAK,EAAG,CAChQ,IAAI+C,EAAoBE,EACxBkS,EAAU,IAAInV,CAAC,CAChB,CACF,CACD,MAAO,CAAC,GAAGmV,CAAS,EAAE,IAAInV,GAAKkV,EAAWlV,CAAC,CAAC,CAC7C,CAOD,OAAO,qBAAqBqV,EAAM,CAMhC,OALI,CACF,QAAA5gB,EACA,KAAAC,CACD,EAAG2gB,EACArkB,EAAS,GACJmS,EAAI,EAAGA,EAAIzO,EAAK,OAAQyO,GAAK,EAAG,CAGvC,QAFIhP,EAAMO,EAAKyO,CAAC,EACZmS,EAAU,GACLtV,EAAI,EAAGA,EAAIvL,EAAQ,OAAQuL,GAAK,EAAG,CAC1C,IAAIvM,EAASgB,EAAQuL,CAAC,EAClBtf,EAAQyT,EAAI,IAAIV,CAAM,EAC1B6hB,EAAQ,KAAK50B,CAAK,CACnB,CACDsQ,EAAO,KAAKskB,CAAO,CACpB,CACD,OAAOtkB,CACR,CASD,OAAO,qBAAqBukB,EAAiBC,EAAQC,EAAqB,CACxE,IAAIC,EAAuBC,EAC3B,KAAMD,EAAwBF,GAAW,OAAsCG,EAAkBH,EAAO,WAAa,MAAQG,IAAoB,OAA5E,OAA8FA,EAAgB,UAAY,MAAQD,IAA0B,OAASA,EAAwB,KAAO,EACvQ,OAAO,KAqBT,OAnBI,CACF,QAASE,EAAkB,CAAE,EAC7B,iBAAkBC,EAAsB,GACxC,yBAAAC,EAA2B,GAC3B,oBAAAC,EAAsB,EAC5B,EAAQP,GAAgD,GAChD,CACF,aAAAQ,EAAe,CAAE,CACvB,EAAQP,GAAuF,GACvFQ,EAAqBD,EAAa,IAAIE,GAAU,CAClD,GAAI,CACF,UAAAte,EACA,SAAAsI,EACA,OAAAC,CACD,EAAG+V,EACJ,OAAO9V,GAAiB,kBAAkBxI,CAAS,EAAI,GAAKwI,GAAiB,wBAAwBmV,EAAiB3d,EAAWsI,EAAUC,CAAM,CACvJ,CAAK,EACGgW,EAAiB,GAEZ7tB,EAAI,EAAGA,EAAI0tB,EAAa,OAAQ1tB,GAAK,EAC5C6tB,EAAeH,EAAa1tB,CAAC,EAAE,SAAS,EAAI2tB,EAAmB3tB,CAAC,EAElE,GAAIwtB,EAA0B,CAE5B,IAAIM,EAAyB,IAAI,IAAIb,EAAgB,IAAIvV,GAAKA,EAAE,IAAI,EAAE,OAAOpe,GAAQ,CAACg0B,EAAgB,SAASh0B,CAAI,CAAC,CAAC,EAIrH,GAHAq0B,EAAmB,QAAQxhB,GAAW,CACpCA,EAAQ,QAAQ7S,GAAQw0B,EAAuB,OAAOx0B,CAAI,CAAC,CACnE,CAAO,EACGw0B,EAAuB,KAAO,EAAG,CACnC,IAAIC,EACAC,GAAmBD,EAAwBF,EAAe1W,EAAqB,KAAK,KAAO,MAAQ4W,IAA0B,OAASA,EAAwB,GAClKF,EAAe1W,EAAqB,KAAK,EAAI,CAAC,GAAG6W,EAAiB,GAAGF,CAAsB,CAC5F,CACF,CACD,MAAO,CACL,gBAAAR,EACA,oBAAAC,EACA,oBAAAE,EACA,aAAcI,CACpB,CACG,CAMD,OAAO,iBAAiBI,EAAgB,CACtCA,EAAe,QAAQ,CAACpiB,EAAK+V,IAAa,CACxC,GAAI,CAACwH,EAAc,aAAaxH,CAAQ,EACtC,MAAM,IAAI,MAAM,oBAAoB,OAAOA,CAAQ,CAAC,EAEtD,GAAI,CACF,KAAAmL,CACD,EAAGlhB,EACJkhB,EAAK,QAAQ,CAAC30B,EAAO0W,IAAgB,CACnC,GAAI,CAACsa,EAAc,aAAata,CAAW,EACzC,MAAM,IAAI,MAAM,uBAAuB,OAAOA,CAAW,CAAC,CAEpE,CAAO,CACP,CAAK,CACF,CAQD,OAAO,UAAU3C,EAAS2C,EAAa,CACrC,OAAIA,EAAc3C,EAAQ,OACjBA,EAAQ2C,CAAW,GAE5B5O,GAAI,MAAM,4BAA6B4O,EAAa,KAAM3C,EAAQ,MAAM,EACjE,KACR,CAOD,OAAO,gBAAgBA,EAASvB,EAAY,CAC1C,IAAIO,EAASgB,EAAQ,KAAK+hB,GAAU,CAClC,GAAI,CACF,KAAA50B,CACD,EAAG40B,EACJ,OAAO50B,IAASsR,CACtB,CAAK,EACD,OAAIO,GAAU,MACZjL,GAAI,MAAM,oCAAqC0K,EAAYuB,EAAQ,IAAIgiB,GAAU,CAC/E,GAAI,CACF,KAAA70B,CACD,EAAG60B,EACJ,OAAO70B,CACR,EAAC,EAEG6R,CACR,CAQD,OAAO,iCAAiCgB,EAASoH,EAAS,CACxD,OAAOA,EAAQ,IAAI6a,GAAU,CAC3B,GAAI,CACF,KAAA90B,EACA,OAAAgS,CACD,EAAG8iB,EACArtB,EAAQoL,EAAQ,UAAUhB,GAAUA,EAAO,OAAS7R,CAAI,EAC5D,OAAOyH,EAAQ,EAAI,KAAO,CAACA,EAAOuK,CAAM,CACzC,GAAE,OAAO+iB,GAAgBA,GAAgB,IAAI,CAC/C,CAOD,OAAO,uBAAuB1f,EAAY2f,EAAY,CACpDA,EAAW,KAAK,CAACrzB,EAAGC,IAEdD,EAAE,WAAa,MAAQC,EAAE,WAAa,KACjC,EAELD,EAAE,WAAa,MAAQC,EAAE,WAAa,KACjC,GAEFD,EAAE,iBAAmBC,EAAE,gBAC/B,EAED,QADIqzB,EAAe,GACVvuB,EAAI,EAAGA,EAAIsuB,EAAW,OAAQtuB,GAAK,EAAG,CAC7C,GAAI,CACF,KAAAjF,EACA,MAAA3C,EACA,SAAAsS,CACR,EAAU4jB,EAAWtuB,CAAC,EAChB,GAAI5H,IAAU,OAAW,CACvB,IAAIo2B,EAAS,GACT9jB,IAAa,SACXtS,GAAS,MAAQsS,IAAa,KAChC8jB,EAAS,IACA9jB,IAAa,OAClBA,IAAa,cAAgBA,IAAa,WAC5C8jB,EAAS,IAETA,EAASvgB,EAAW,wBAAwBvD,CAAQ,IAI1D,IAAI+jB,EAAa,GAAG,OAAOD,CAAM,EAAE,OAAOzzB,CAAI,EAC1C2P,IAAa,eACf+jB,EAAa,GAAG,OAAO1zB,CAAI,EAAE,OAAOyzB,CAAM,GAExC7f,GAAc,MAAQvW,IAAU,MAAQ6V,EAAW,WAAWU,CAAU,IAC1E8f,EAAa,GAAG,OAAOD,CAAM,EAAE,OAAO,OAAO,aAAa,SAASzzB,EAAM,EAAE,CAAC,CAAC,GAE3EiF,IAAM,IACRuuB,GAAgB7jB,IAAa,KAAO,OAAS,QAE/C6jB,GAAgBE,CACjB,CACF,CACD,OAAOF,CACR,CAQD,OAAO,wBAAwBrW,EAAOwW,EAAa,CACjD,IAAIC,EAAW,EACXC,EAAY,IAAI,IAChBC,EAAW,IAAI,IAGfC,EAASJ,GAAgB,KAAiC,OAASA,EAAY,OAAOK,GAAU,CAClG,GAAI,CACF,SAAAvwB,CACD,EAAGuwB,EACJ,OAAOvwB,EAAS,OAAS,CAC/B,CAAK,EACD,GAAIswB,EAAO,SAAW,EACpB,MAAO,CACL,OAAQ,CAAE,EACV,SAAAH,EACA,UAAAC,EACA,SAAAC,CACR,EAEI,IAAIG,EAAmB,IAAI,IAAIF,EAAO,IAAIG,GAAS,CAACA,EAAM,KAAMA,CAAK,CAAC,CAAC,EACnEC,EAAe,IAAI,IACnBC,EAAWF,GAAS,CACtB,GAAI,CACF,KAAA31B,CACD,EAAG21B,EACJ,GAAI/W,EAAM,qBAAqB5e,CAAI,GAAK,KACtC,MAAM,IAAI,MAAM,gDAAgD,OAAOA,CAAI,CAAC,EAE9E,IAAI81B,EAAgBP,EAAS,IAAIv1B,CAAI,EACrC,GAAI81B,EACF,OAAOA,EAET,IAAInH,EAAe,GACfV,EAAQ,EACZ0H,EAAM,SAAS,QAAQI,GAAa,CAClC,GAAIH,EAAa,IAAIG,CAAS,EAC5B,MAAM,IAAI,MAAM,sBAAsB,OAAOA,EAAW,+BAA+B,CAAC,EAE1FH,EAAa,IAAIG,CAAS,EAC1B,IAAIC,EAAaN,EAAiB,IAAIK,CAAS,EAC3CE,EAAarX,EAAM,qBAAqBmX,CAAS,EACrD,GAAIC,EAAY,CAEd,IAAIE,EAAaL,EAASG,CAAU,EACpCrH,EAAa,KAAK,GAAGuH,EAAW,YAAY,EAC5CjI,EAAQ,KAAK,IAAIA,EAAOiI,EAAW,MAAQ,CAAC,CACtD,SAAmBD,GAAc,KAEvBtH,EAAa,KAAKsH,CAAU,EAC5BhI,EAAQ,KAAK,IAAIA,EAAO,CAAC,MAEzB,OAAM,IAAI,MAAM,iBAAiB,OAAO8H,EAAW,YAAY,EAAE,OAAO/1B,CAAI,CAAC,CAEvF,CAAO,EACD,IAAIm2B,EAAoB,IAAI1H,GAAkBjoB,EAAcA,EAAc,GAAImvB,CAAK,EAAG,GAAI,CACxF,MAAA1H,EACA,aAAcU,EAAa,KAAM,CAClC,EAAC,EACF,OAAA4G,EAAS,IAAIv1B,EAAMm2B,CAAiB,EACpCR,EAAM,SAAS,QAAQI,GAAaT,EAAU,IAAIS,EAAWI,CAAiB,CAAC,EAC/Ed,EAAW,KAAK,IAAIA,EAAUc,EAAkB,MAAQ,CAAC,EAClDA,CACb,EACQC,EAAa,IAAI,IACrB,OAAAZ,EAAO,QAAQG,GAAS,CACtB,GAAI,CACF,KAAA31B,CACD,EAAG21B,EACJ,GAAIS,EAAW,IAAIp2B,CAAI,EACrB,MAAM,IAAI,MAAM,gCAAgC,OAAOA,CAAI,CAAC,EAE9Do2B,EAAW,IAAIp2B,CAAI,EACnB61B,EAASF,CAAK,CACpB,CAAK,EACDJ,EAAS,QAAQI,GAAS,CACxB,IAAIU,EACJV,EAAM,WAAWU,EAAiBf,EAAU,IAAIK,EAAM,IAAI,KAAO,MAAQU,IAAmB,OAAS,OAASA,EAAe,IAAI,CACvI,CAAK,EACM,CACL,OAAQ,CAAC,GAAGd,EAAS,QAAQ,EAC7B,SAAAF,EACA,SAAAE,EACA,UAAAD,CACN,CACG,CAOD,OAAO,mBAAmBx2B,EAAOuW,EAAY,CAC3C,GAAIA,GAAc,MAAQV,EAAW,WAAWU,CAAU,GAAKvW,GAAS,MAAQ,OAAOA,GAAU,SAC/F,OAAO,OAAO,aAAaA,CAAK,EAElC,GAAI6V,EAAW,WAAWU,CAAU,GAAKwa,GAAc/wB,CAAK,EAAG,CAC7D,IAAI6P,EAAO,IAAI,KAAK7P,EAAM,OAAQ,GAC9B0T,EAAS7D,EAAK,oBACd2nB,EAAa,IAAI,KAAK3nB,EAAK,QAAO,EAAK6D,EAAS,GAAK,GAAI,EACzDqG,EAAWyd,EAAW,cACtBC,EAAgB1d,EAAS,QAAQ,IAAK,GAAG,EAAE,UAAU,EAAG,EAAE,EAC9D,OAAO0d,CACR,CACD,OAAIz3B,GAAS,KACJ,GAEF,GAAG,OAAOA,CAAK,CACvB,CACD,YAAYyM,EAAI,CACd5M,GAAgB,KAAM,KAAM,MAAM,EAClCA,GAAgB,KAAM,aAAc,MAAM,EAC1C,KAAK,GAAK4M,EACV,KAAK,WAAa,IAAIoJ,EAAWpJ,CAAE,EACnC/L,GAAe,IAAI,CACpB,CAOD,uBAAuBof,EAAOoS,EAAe,CAC3C,GAAI,CACF,oBAAA6C,EAAsB,CACpB,aAAc11B,EACd,UAAW,EACZ,EACD,gBAAA8yB,EACA,sBAAAuF,EACA,iBAAAC,EACA,QAAAxT,EACA,aAAA0N,EACA,cAAAT,EACA,mBAAAwG,EAAqBv4B,EACrB,YAAAw4B,EACA,aAAAC,EAAe,OACf,cAAAC,EACA,YAAAC,EACA,sBAAA1E,EAAwBj0B,EACxB,sBAAA44B,EACA,MAAAxhB,EACA,oBAAAyhB,EACA,eAAArC,EAAiBv2B,GACjB,cAAA64B,EACA,mBAAAC,EACA,gBAAAC,EAAkB,MACnB,EAAGnG,EACJwC,EAAcvQ,CAAO,EACrB,GAAI,CACF,iBAAA+C,EACA,eAAAC,CACD,EAAGhD,EACA,CACF,QAAApQ,CACD,EAAG+L,EACAwY,EAAmBpI,EAA+BpQ,CAAK,EAAIA,EAAM,iBAAmB,GAGxF,MAAO,CACL,gBAAiB,KAAK,yBAAyB/L,EAASoe,CAAe,EACvE,oBAAA4C,EACA,sBAAuB,CAAC,GAAG2C,CAAqB,EAChD,iBAAAC,EACA,aAAc3G,EAAc,sBAAsBa,CAAY,EAC9D,MAAOb,EAAc,cAAcva,CAAK,EACxC,iBAAkB,CAAC,GAAGyQ,CAAgB,EAAE,OAAOqR,GAAU,CACvD,GAAI,CAAC7hB,CAAW,EAAI6hB,EACpB,OAAO7hB,GAAe,MAAQA,GAAe,GAAKA,EAAc3C,EAAQ,MAChF,CAAO,EAAE,IAAIykB,GAAU,CACf,GAAI,CAAC9hB,EAAa5M,CAAK,EAAI0uB,EAC3B,MAAO,CAACzkB,EAAQ2C,CAAW,EAAE,KAAM5M,CAAK,CAChD,CAAO,EACD,eAAgB,CAAC,GAAGqd,CAAc,EAClC,cAAe,CAAC,GAAGiK,CAAa,EAChC,mBAAoB,CAAC,GAAGwG,CAAkB,EAC1C,YAAAC,EACA,aAAAC,EACA,cAAAC,EACA,YAAAC,EACA,sBAAuB,CAAC,GAAG1E,CAAqB,EAChD,sBAAA2E,EACA,oBAAAC,EACA,eAAgB,KAAK,wBAAwBnkB,EAAS8hB,CAAc,EACpE,cAAAsC,EACA,mBAAoBC,GAAuB,KAAwC,OAASA,EAAmB,IAAIzzB,IAAS,CAC1H,KAAMA,EAAK,KACX,SAAUA,EAAK,SACf,MAAOA,EAAK,KACpB,EAAQ,EACF,gBAAiB,KAAK,yBAAyB2zB,EAAkBD,CAAe,CACtF,CACG,CAOD,qBAAqBvY,EAAOoS,EAAe,CACzC,IAAIuG,EAAQC,EACR,CACF,gBAAAvG,EACA,oBAAA4C,EAAsB,CACpB,aAAc,CAAE,EAChB,UAAW,EACZ,EACD,sBAAA2C,EACA,iBAAAC,EACA,aAAA9F,EACA,MAAApb,EACA,cAAA2a,EACA,mBAAAwG,EACA,iBAAA1Q,EACA,eAAAC,EACA,YAAA0Q,EACA,aAAAC,EAAe,OACf,cAAAC,EACA,YAAAC,EACA,sBAAA1E,EACA,sBAAA2E,EACA,oBAAAC,EAAsB,GACtB,eAAArC,EAAiB,CAAE,EACnB,cAAAsC,EACA,mBAAAC,EACA,gBAAAC,CACD,EAAGnG,EACA,CACF,QAAAne,EACA,UAAAwJ,CACD,EAAGuC,EACAwY,EAAmBpI,EAA+BpQ,CAAK,EAAIA,EAAM,iBAAmB,GACxF,MAAO,CACL,gBAAiB,KAAK,uBAAuB/L,EAASoe,EAAiB5U,EAAU,QAAQ,EACzF,oBAAAwX,EACA,sBAAuB,IAAI,IAAI2C,CAAqB,EACpD,iBAAAC,EACA,aAAc,KAAK,oBAAoB5jB,EAAS8d,EAActU,EAAU,QAAQ,EAChF,MAAO,KAAK,YAAYxJ,EAAS0C,CAAK,EACtC,iBAAkB,IAAI,IAAIyQ,EAAiB,IAAIyR,GAAU,CACvD,GAAI,CAAC5lB,EAAQjJ,CAAK,EAAI6uB,EACtB,OAAI,OAAO5lB,GAAW,UAAYA,aAAkB,OAC3C,CAACgB,EAAQ,UAAU6kB,IAAU,CAClC,GAAI,CACF,KAAA13B,EACD,EAAG03B,GACJ,OAAO13B,KAAS6R,CAC5B,CAAW,EAAGjJ,CAAK,EAEJ,CAACiJ,EAAQjJ,CAAK,CAC7B,CAAO,EAAE,OAAO+uB,GAAU,CAClB,GAAI,CAAC9lB,CAAM,EAAI8lB,EACf,OAAO9lB,GAAU,MAAQA,GAAU,GAAKA,EAASgB,EAAQ,MACjE,CAAO,CAAC,EACF,cAAAqd,EACA,mBAAAwG,EACA,eAAgB,IAAI,IAAIzQ,CAAc,EACtC,YAAA0Q,EACA,aAAAC,EACA,cAAAC,EACA,YAAAC,EACA,sBAAA1E,EACA,sBAAA2E,EACA,oBAAAC,EACA,eAAgB,KAAK,sBAAsBnkB,EAAS8hB,CAAc,EAClE,cAAAsC,EACA,mBAAoBnH,EAAc,wBAAwBlR,GAAQ2Y,EAASL,KAAqFM,EAAqB5Y,EAAM,eAAiB,MAAQ4Y,IAAuB,OAAS,OAASA,EAAmB,iBAAkB,MAAQD,IAAW,OAASA,EAAS,EAAE,EAAE,OAC3U,gBAAiB,KAAK,uBAAuBH,EAAkBD,CAAe,CACpF,CACG,CASD,oBAAoBtkB,EAAS+kB,EAAmBjrB,EAAU,CACxD,IAAIkrB,EAAkBD,EAAkB,IAAIE,GAAU,CACpD,GAAI,CAACtiB,EAAaqb,CAAW,EAAIiH,EAC7B,CACF,KAAAr2B,CACD,EAAGovB,EACA7e,EAAS,KACb,GAAI,CACF,IAAIH,EAASie,EAAc,UAAUjd,EAAS2C,CAAW,EACrD3D,GAAU,OACZG,EAAS,KAAK,WAAW,gBAAgBH,EAAQpQ,EAAMkL,CAAQ,EAElE,OAAQ3L,EAAO,CACd4F,GAAI,MAAM,iCAAkCnF,EAAMT,CAAK,CACxD,CACD,MAAO,CAACwU,EAAa,CACnB,KAAA/T,EACA,OAAAuQ,CACR,CAAO,CACP,CAAK,EACD,OAAO,IAAI,IAAI6lB,CAAe,CAC/B,CAQD,yBAAyBhlB,EAASoe,EAAiB,CACjD,MAAO,CAAC,GAAGA,CAAe,EAAE,IAAI8G,GAAU,CACxC,GAAI,CAACviB,EAAawiB,CAAc,EAAID,EAChClmB,EAASie,EAAc,UAAUjd,EAAS2C,CAAW,EACzDge,EAAc3hB,CAAM,EACpB,IAAItK,EAAU,KAAK,+BAA+BsK,EAAQmmB,EAAe,OAAO,EAChF,MAAO,CAACxiB,EAAa,CACnB,QAAAjO,CACR,CAAO,CACP,CAAK,CACF,CASD,uBAAuBsL,EAASolB,EAAsBtrB,EAAU,CAC9D,IAAIkrB,EAAkBI,EAAqB,IAAIC,GAAU,CACvD,GAAI,CAAC1iB,EAAawiB,CAAc,EAAIE,EAChCrmB,EAASie,EAAc,UAAUjd,EAAS2C,CAAW,EACzDge,EAAc3hB,CAAM,EACpB,IAAItK,EAAU,KAAK,6BAA6BsK,EAAQmmB,EAAe,OAAO,EAC1EhmB,EAAS,KACb,GAAI,CACF,IAAImmB,EAAkBrI,EAAc,UAAUjd,EAAS2C,CAAW,EAC9D2iB,GAAmB,OACrBnmB,EAAS,KAAK,WAAW,mBAAmBH,EAAQtK,EAASoF,CAAQ,EAExE,OAAQ3L,EAAO,CACd4F,GAAI,MAAM,oCAAqCW,EAASvG,CAAK,CAC9D,CACD,MAAO,CAACwU,EAAa,CACnB,QAAAjO,EACA,OAAAyK,CACR,CAAO,CACP,CAAK,EACD,OAAO,IAAI,IAAI6lB,CAAe,CAC/B,CACD,+BAA+BhmB,EAAQtK,EAAS,CAC9C,GAAI,CACA,eAAAiS,CACR,EAAUjS,EACJ6wB,EAAehJ,GAAyB7nB,EAAS2nB,EAAS,EAC5D,OAAO1oB,EAAc,CACnB,eAAgBgT,GAAmB,KAAoC,OAASA,EAAe,IAAI1a,GAAS,KAAK,eAAeA,EAAO+S,GAAW,KAA4B,OAASA,EAAO,IAAI,CAAC,CACpM,EAAEumB,CAAY,CAChB,CACD,6BAA6BvmB,EAAQtK,EAAS,CAC5C,GAAI,CACA,eAAAiS,CACR,EAAUjS,EACJ6wB,EAAehJ,GAAyB7nB,EAAS4nB,EAAU,EAC7D,OAAO3oB,EAAc,CACnB,eAAgBgT,GAAmB,KAAoC,OAASA,EAAe,IAAI1a,GAAS,KAAK,aAAaA,EAAO+S,GAAW,KAA4B,OAASA,EAAO,IAAI,CAAC,CAClM,EAAEumB,CAAY,CAChB,CACD,wBAAwBvlB,EAAS8hB,EAAgB,CAC/C,MAAO,CAAC,GAAGA,CAAc,EAAE,IAAI0D,GAAU,CACvC,GAAI,CAAC/P,EAAU,CACb,KAAAmL,CACD,GAAI4E,EACL,MAAO,CAAC/P,EAAU,CAChB,KAAM,CAAC,GAAGmL,CAAI,EAAE,IAAI6E,GAAU,CAC5B,GAAI,CAACla,EAAGtf,CAAK,EAAIw5B,EACjB,MAAO,CAACzlB,EAAQuL,CAAC,EAAE,KAAM,KAAK,eAAetf,EAAO+T,EAAQuL,CAAC,EAAE,IAAI,CAAC,CAC9E,CAAS,CACT,CAAO,CACP,CAAK,CACF,CACD,sBAAsBvL,EAAS8hB,EAAgB,CAC7C,IAAI4D,EAAY,IAAI,IAChBC,EAAiBlnB,IACdinB,EAAU,IAAIjnB,CAAU,GAC3BinB,EAAU,IAAIjnB,EAAYuB,EAAQ,UAAU4lB,GAAU,CACpD,GAAI,CACF,KAAAz4B,CACD,EAAGy4B,EACJ,OAAOz4B,IAASsR,CACjB,EAAC,EAEGinB,EAAU,IAAIjnB,CAAU,GAEjC,OAAO,IAAI,IAAIqjB,EAAe,IAAI+D,GAAU,CAC1C,GAAI,CAACpQ,EAAU,CACb,KAAAmL,CACD,GAAIiF,EACL,MAAO,CAACpQ,EAAU,CAChB,KAAM,IAAI,IAAImL,EAAK,IAAIkF,GAAU,CAC/B,IAAIC,EACA,CAACtnB,EAAYxS,CAAK,EAAI65B,EACtBlxB,EAAQ+wB,EAAelnB,CAAU,EACrC,OAAAkiB,EAAc/rB,CAAK,EACZ,EAAEmxB,EAAkBJ,EAAelnB,CAAU,KAAO,MAAQsnB,IAAoB,OAASA,EAAkB,KAAM,KAAK,aAAa95B,EAAO+T,EAAQpL,CAAK,EAAE,IAAI,CAAC,CAC/K,CAAS,CAAC,CACV,CAAO,CACF,EAAC,CACH,CACD,yBAAyB2vB,EAAkBD,EAAiB,CAC1D,OAAIA,GAAmB,KACdA,EAEF3wB,EAAcA,EAAc,CAAE,EAAE2wB,CAAe,EAAG,GAAI,CAC3D,WAAYA,EAAgB,WAAW,IAAI,CAAC0B,EAAWpxB,IAAU,KAAK,eAAeoxB,EAAWzB,EAAiB3vB,CAAK,EAAE,IAAI,CAAC,CACnI,CAAK,CACF,CACD,uBAAuB2vB,EAAkBD,EAAiB,CACxD,OAAIA,GAAmB,KACdA,EAEF3wB,EAAcA,EAAc,CAAE,EAAE2wB,CAAe,EAAG,GAAI,CAC3D,WAAYA,EAAgB,WAAW,IAAI,CAAC0B,EAAWpxB,IAAU,KAAK,aAAaoxB,EAAWzB,EAAiB3vB,CAAK,EAAE,IAAI,CAAC,CACjI,CAAK,CACF,CAOD,eAAe3I,EAAOuW,EAAY,CAChC,OAAIV,EAAW,WAAWU,CAAU,EAC3B,KAAK,kBAAkBvW,CAAK,EAEjC6V,EAAW,WAAWU,CAAU,EAC3Bya,EAAc,cAAchxB,CAAK,EAEnCA,CACR,CAOD,aAAaA,EAAOuW,EAAY,CAC9B,OAAIV,EAAW,WAAWU,CAAU,EAC3B,KAAK,gBAAgBvW,CAAK,EAE/B6V,EAAW,WAAWU,CAAU,EAC3B,KAAK,YAAYvW,CAAK,EAExBA,CACR,CACD,kBAAkBA,EAAO,CACvB,OAAOA,GAAS,KAAO,KAAK,GAAG,KAAK,eAAe,OAAOwO,EAAU,iBAAkBxO,CAAK,EAAI,IAChG,CACD,gBAAgBA,EAAO,CACrB,OAAOA,GAAS,KAAO,KAAK,GAAG,KAAK,eAAe,MAAMwO,EAAU,iBAAkBxO,CAAK,EAAI,IAC/F,CACD,YAAYA,EAAO,CACjB,OAAOA,GAAS,KAAO,KAAK,GAAG,YAAY,SAASA,CAAK,EAAI,IAC9D,CAQD,YAAY+T,EAAS0C,EAAO,CAC1B,GAAI,CACF,GAAAhK,CACD,EAAG,KACJ,OAAOgK,EAAM,IAAIP,GAAQ,CACvB,GAAI,CACF,OAAQ8jB,EACR,MAAApjB,EACA,UAAAD,CACD,EAAGT,EACJ,GAAIS,IAAcd,EAAW,cAAc,QACzC,OAAOpJ,EAAG,MAAM,UAElB,IAAIsG,EAAS,OAAOinB,GAAsB,SAAWhJ,EAAc,gBAAgBjd,EAASimB,CAAiB,EAAIhJ,EAAc,UAAUjd,EAASimB,CAAiB,EACnK,GAAIjnB,GAAU,KAAM,CAClB,IAAIknB,EAAalnB,EAAO,OACxB,OAAI6D,IACFqjB,EAAaA,EAAW,OAEtBtjB,IAAcd,EAAW,cAAc,WACzCokB,EAAaA,EAAW,OAExBA,EAAaA,EAAW,MAEnBA,CACR,CACD,OAAO,IACb,CAAK,EAIA,OAAOt1B,GAAQA,GAAQ,MAAQA,EAAK,YAAckR,EAAW,cAAc,OAAO,CACpF,CAQD,mBAAmBtB,EAAO2lB,EAAersB,EAAU,CACjD,GAAI,CACF,QAAAkG,CACD,EAAGQ,EACAsd,EAAe,GACfqI,EAAc,eAChBrI,EAAeb,EAAc,wBAAwB,KAAK,oBAAoBjd,EAASmmB,EAAc,aAAcrsB,CAAQ,CAAC,GAE9H,IAAIskB,EAAkB,GAClB+H,EAAc,kBAChB/H,EAAkBnB,EAAc,wBAAwB,KAAK,uBAAuBjd,EAASmmB,EAAc,gBAAiBrsB,CAAQ,CAAC,GAEvI,IAAIokB,EAAe,KAAK,2BAA2Ble,EAASmmB,EAAc,aAAcrsB,CAAQ,EAC5F4I,EAAQ,GACRyjB,EAAc,QAChBzjB,EAAQ,KAAK,YAAY1C,EAASmmB,EAAc,KAAK,GAEvD,IAAI/e,EAAU,CAAC,GAAG0W,EAAc,GAAGM,CAAe,EAC9C,CACF,WAAAR,EACA,iBAAkBwI,CACnB,EAAGD,EACJ,GAAIvI,GAAcA,EAAW,QAAUwI,GAAwBA,IAAyB,MAAQA,IAAyB,QAAUA,EAAqB,QAEtJ,QADI7B,EAAmB6B,EAAqB,IAAIC,GAAuBpJ,EAAc,gBAAgBjd,EAASqmB,CAAmB,CAAC,EACzHxyB,EAAI,EAAGA,EAAI0wB,EAAiB,OAAQ1wB,GAAK,EAChD,GAAI0wB,EAAiB1wB,CAAC,IAAM,QAAa+pB,EAAW/pB,CAAC,GAAK,KAAM,CAE9D,IAAIyyB,EAAkB/B,EAAiB1wB,CAAC,EAAE,OAAQ,EAAC,GAAG,KAAK,GAAG,YAAY,SAAS+pB,EAAW/pB,CAAC,CAAC,CAAC,EACjGuT,EAAU,CAACkf,EAAiB,GAAGlf,CAAO,CACvC,EAGLA,EAAU,CAAC,GAAG8W,EAAc,GAAG9W,CAAO,EACtC5G,EAAM,YAAY4G,CAAO,EACzB5G,EAAM,UAAUkC,CAAK,CACtB,CACD,2BAA2B1C,EAAS,CAClC,IAAIke,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACnFpkB,EAAW,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OACrD,OAAOokB,EAAa,IAAIqI,GAAU,CAChC,GAAI,CACF,KAAAp5B,EACA,KAAA6L,EACA,MAAA/M,CACD,EAAGs6B,EACAvnB,EAASgB,EAAQ,KAAKwmB,GAAU,CAClC,GAAI,CACF,KAAM/nB,EACN,KAAM+D,CACP,EAAGgkB,EACJ,OAAO/nB,IAAetR,GAAQqV,IAAexJ,CACrD,CAAO,EACD,GAAIgG,EACF,GAAI,CACF,OAAO,KAAK,WAAW,gBAAgBA,EAAQ/S,EAAO6N,CAAQ,CAC/D,OAAQzI,EAAG,CAEV0C,GAAI,MAAM,gCAAiC1C,CAAC,CAC7C,CAEH,OAAO,IACR,GAAE,OAAO8N,GAAUA,GAAU,IAAI,CACnC,CASD,mBAAmByN,EAAQ,CACzB,GAAI,CACF,GAAAlU,CACD,EAAG,KACA+tB,EAAY7Z,EAAO,MAAK,EAAG,KAAK,CAAC9d,EAAGC,KACtC4xB,EAAc7xB,EAAE,QAAQ,EACxB6xB,EAAc5xB,EAAE,QAAQ,EACjBD,EAAE,SAAWC,EAAE,SACvB,EAAE,IAAI+d,GAAS,CACd,GAAI,CACF,SAAAT,EACA,OAAAE,CACD,EAAGO,EACJ,OAAA6T,EAActU,CAAQ,EACtBsU,EAAcpU,CAAM,EACb7T,EAAG,SAAS,QAAQ2T,EAAUE,CAAM,CACjD,CAAK,EACD,OAAO7T,EAAG,SAAS,SAAS+tB,CAAS,CACtC,CACH,CACA,MAAAC,GAAezJ,ECvxCf,SAASnxB,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CACzX,MAAMs6B,WAA8B,KAAM,CACxC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB76B,GAAgB,KAAM,0BAA2B,EAAI,CACtD,CACH,CACO,SAAS86B,GAAwBt4B,EAAK,CAC3C,OAAQA,GAAQ,KAAyB,OAASA,EAAI,2BAA6B,EACrF,CACA,MAAAu4B,GAAeF,GCZf,SAAS76B,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CACzX,MAAMy6B,WAAwB,KAAM,CAClC,YAAYrR,EAAUhX,EAAY,CAChC,MAAM,GAAG,OAAOA,EAAY,kCAAkC,EAAE,OAAOgX,EAAW,EAAG,GAAG,CAAC,EACzF3pB,GAAgB,KAAM,eAAgB,EAAI,EAC1CA,GAAgB,KAAM,WAAY,MAAM,EACxCA,GAAgB,KAAM,aAAc,MAAM,EAC1C,KAAK,SAAW2pB,EAChB,KAAK,WAAahX,CACnB,CACH,CACA,MAAAsoB,GAAeD,GCbf,SAASzzB,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAU9H,EAAK,CAAEF,EAAgB8H,EAAQ5H,EAAK8H,EAAO9H,CAAG,CAAC,CAAI,GAAI,OAAO,0BAA4B,OAAO,iBAAiB4H,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAU9H,EAAK,CAAE,OAAO,eAAe4H,EAAQ5H,EAAK,OAAO,yBAAyB8H,EAAQ9H,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAO4H,CAAS,CAC1f,SAASyN,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQxV,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIsV,EAAOH,EAAItV,CAAG,EAAEG,CAAG,EAAOF,EAAQwV,EAAK,YAAgBtT,EAAO,CAAEF,EAAOE,CAAK,EAAG,MAAS,CAAKsT,EAAK,KAAQzT,EAAQ/B,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKsV,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAU7T,EAASC,EAAQ,CAAE,IAAIqT,EAAMK,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMtV,EAAO,CAAEoV,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,OAAQvV,CAAK,CAAI,CAAC,SAASuV,EAAOlT,EAAK,CAAE+S,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,QAASlT,CAAG,EAAKiT,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAASzV,EAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAczX,IAAI0H,EAAMC,EAAI,OAAO,4BAA4B,EAC7CgzB,GAAwB,IACxBC,GAA0B,EACvB,SAASC,GAA6Bnb,EAAO,CAClD,OAAOA,EAAM,QAAU,MACzB,CAMA,MAAMob,WAAmC7L,CAAc,CACrD,QAAQjP,EAAUrN,EAAQooB,EAAWn7B,EAAOo7B,EAAaC,EAAUC,EAAa,CAC9E,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,QAAS,CACP,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,iBAAiBvoB,EAAQ,CACvB,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,eAAgB,CAClB,MAAO,EACR,CACD,IAAI,cAAcqe,EAAe,CAC/B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,eAAgB,CAClB,MAAO,EACR,CACD,IAAI,cAAcmK,EAAe,CAC/B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,oBAAoBxnB,EAAS,CAC3B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,cAAe,CACjB,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,aAAa+jB,EAAc,CAC7B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,uBAAwB,CAC1B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,sBAAsB0D,EAAO,CAC/B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CAMD,IAAI,SAAU,CACZ,OAAO,KAAK,MAAM,OACnB,CAWD,YAAY/uB,EAAI8H,EAAO,CACrB,IAAIknB,EAAuBC,EACvBC,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAIrf,GAAU7P,CAAE,EACjGmvB,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACrF,MAAMnvB,CAAE,EACR5M,EAAgB,KAAM,KAAM,MAAM,EAClCA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,aAAc,MAAM,EAC1CA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,aAAc,MAAM,EAC1CA,EAAgB,KAAM,eAAgB,MAAM,EAC5CA,EAAgB,KAAM,QAAS,MAAM,EACrCA,EAAgB,KAAM,WAAY,MAAM,EACxCA,EAAgB,KAAM,eAAgB,MAAM,EAC5CA,EAAgB,KAAM,sBAAuB,MAAM,EACnDA,EAAgB,KAAM,oBAAqB,MAAM,EACjDA,EAAgB,KAAM,mBAAoB,MAAM,EAChDA,EAAgB,KAAM,cAAe,MAAM,EAC3CA,EAAgB,KAAM,qBAAsB,MAAM,EAClDA,EAAgB,KAAM,SAAU,MAAM,EACtCA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,oBAAqB,MAAM,EACjDA,EAAgB,KAAM,qBAAsB,CAAC,EAC7CA,EAAgB,KAAM,wBAAyB,IAAI,GAAK,EACxDA,EAAgB,KAAM,wBAAyB,IAAI,GAAK,EACxDA,EAAgB,KAAM,wBAAyB,IAAI,EACnDA,EAAgB,KAAM,sBAAuB,EAAE,EAC/CA,EAAgB,KAAM,gBAAiB,IAAI,EAC3CA,EAAgB,KAAM,iCAAkCg8B,EAAQC,GAAe,CAC7E,IAAIC,EACJ,GAAI,CAACD,EACH,MAAO,GAET,IAAI1Q,EAAe,GACf,CACF,SAAAqL,CACR,EAAUzF,GAAc,wBAAwB,MAAO+K,EAAwBD,GAAgB,KAAiC,OAASA,EAAY,gBAAkB,MAAQC,IAA0B,OAASA,EAAwB,EAAE,EAClOC,EAAa,CAAC96B,EAAM+6B,IAAY,CAClC,IAAIhV,EAAa,KAAK,qBAAqB/lB,CAAI,EAC/C,GAAI+lB,GAAc,KAChB,MAAM,IAAI,MAAM,+BAA+B,OAAO/lB,CAAI,CAAC,EAE7D,IAAIsqB,EAAexH,EAAU,gBAAgBiD,EAAYmE,CAAY,EACrEA,EAAepH,EAAU,SAASwH,EAAcyQ,EAAS7Q,CAAY,CAC7E,EACU8Q,EAAY,CAACh7B,EAAM+6B,IAAY,CACjC,IAAIpF,EAAQJ,EAAS,IAAIv1B,CAAI,EAC7B,GAAI21B,GAAS,KACX,MAAM,IAAI,MAAM,8BAA8B,OAAO31B,CAAI,CAAC,EAE5D,IAAIi7B,EAAetF,EAAM,gBAAgBzL,CAAY,EACrDA,EAAepH,EAAU,UAAUmY,EAAcF,EAAS7Q,CAAY,CAC9E,EACU,CACF,aAAAgR,EAAe,CAAE,EACjB,YAAAC,EAAc,CAAE,EAChB,cAAAlE,EAAgB,CAAE,CACnB,EAAG2D,EACJ,GAAIM,EAAa,QAAUC,EAAY,QAAUlE,EAAc,OAAQ,CACrE,IAAImE,EAAc,IAAI,IAClBC,EAAa,EACjBpE,EAAc,QAAQj3B,GAAQ,CAC5B,GAAIo7B,EAAY,IAAIp7B,CAAI,EACtB,MAAM,IAAI,MAAM,8CAA8C,OAAOA,CAAI,CAAC,EAE5E86B,EAAW96B,EAAMq7B,CAAU,EAC3BA,GAAc,CACxB,CAAS,EACDH,EAAa,QAAQl7B,GAAQ,CAC3B,GAAIo7B,EAAY,IAAIp7B,CAAI,EACtB,MAAM,IAAI,MAAM,8CAA8C,OAAOA,CAAI,CAAC,EAE5E86B,EAAW96B,EAAMq7B,CAAU,EAC3BA,GAAc,CACxB,CAAS,EACD,IAAIC,EAAY,KAAK,UAAU,KAAO,EACtCH,EAAY,QAAQn7B,GAAQ,CAC1B,GAAIo7B,EAAY,IAAIp7B,CAAI,EACtB,MAAM,IAAI,MAAM,8CAA8C,OAAOA,CAAI,CAAC,EAE5E86B,EAAW96B,EAAMs7B,CAAS,EAC1BA,GAAa,CACvB,CAAS,CACF,CACD,IAAIC,EAAyBX,GAAgB,KAAiC,OAASA,EAAY,aACnG,GAAIW,EAAwB,CAC1B,IAAIC,EAAe,CAAC,GAAGjG,EAAS,OAAQ,GACxCiG,EAAa,KAAK,CAAC75B,EAAGC,IAAMD,EAAE,MAAQC,EAAE,KAAK,EAC7C45B,EAAa,QAAQ7F,GAAS,CAC5B,IAAI8F,EAAiB9F,EAAM,SAAS,CAAC,EACjC+F,EAAkB,KAAK,qBAAqBD,CAAc,EAC1DE,EACJ,GAAID,GAAmB,KACrBC,EAAoB7Y,EAAU,gBAAgB4Y,EAAiBxR,CAAY,MACtE,CACL,IAAI0R,EAAkBrG,EAAS,IAAIkG,CAAc,EACjD,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,kBAAkB,OAAOH,EAAgB,YAAY,EAAE,OAAO9F,EAAM,IAAI,CAAC,EAE3F,IAAIsF,EAAeW,EAAgB,gBAAgB1R,CAAY,EAE/D,CAAG,CAAAyR,CAAiB,EAAIV,CACzB,CACD,QAASv0B,EAAI,EAAGA,EAAIivB,EAAM,SAAS,OAAQjvB,GAAK,EAAG,CACjD,IAAIqvB,EAAYJ,EAAM,SAASjvB,CAAC,EAC5BsvB,EAAaT,EAAS,IAAIQ,CAAS,EACnC8F,EAAc,KAAK,qBAAqB9F,CAAS,EACrD,GAAIC,EAAY,CAGd,IAAI8F,EAAgB9F,EAAW,gBAAgB9L,CAAY,EAAE,CAAC,EAAIyR,EAC9DI,GAAcD,EAAgBH,EAAoB3F,EAAW,aAAa,OAAS,EAAI2F,EAAoB,EAC/GX,EAAUjF,EAAWgG,EAAW,EAChCJ,EAAoBI,GAAc/F,EAAW,aAAa,OAAS,CACjF,SAAuB6F,GAAe,KAAM,CAC9B,IAAIG,GAAiBlZ,EAAU,gBAAgB+Y,EAAa3R,CAAY,EAAIyR,EACxEM,GAAeD,GAAiBL,EAAoBA,EAAoB,EAC5Eb,EAAW/E,EAAWkG,EAAY,EAClCN,EAAoBM,EACrB,CACF,CACX,CAAS,CACF,CACD,YAAK,cAAgB/R,EACdA,CACR,EAAC,EACFvrB,EAAgB,KAAM,uCAAwCg8B,EAAQC,GAAe,CACnF,IAAIsB,EACJ,OAAOpM,GAAc,wBAAwB,MAAOoM,EAAyBtB,GAAgB,KAAiC,OAASA,EAAY,gBAAkB,MAAQsB,IAA2B,OAASA,EAAyB,EAAE,EAAE,MAC/O,EAAC,EACFv9B,EAAgB,KAAM,uBAAwBg8B,EAAQtI,GAAgB,CACpE,IAAIkG,EAAY,IAAI,IACpB,OAAAlG,EAAa,QAAQxhB,GAAO0nB,EAAU,IAAI1nB,EAAI,KAAMA,CAAG,CAAC,EACjD0nB,CACR,EAAC,EACF55B,EAAgB,KAAM,4BAA6Bg8B,EAAQ9nB,GAAW,CACpE,IAAIspB,EAAU,IAAI,IAClB,OAAAtpB,EAAQ,QAAQ,CAACH,EAAMhM,IAAM,CAC3B,GAAI,CACF,KAAA1G,CACD,EAAG0S,EACJ,OAAOypB,EAAQ,IAAIn8B,EAAM0G,CAAC,CAClC,CAAO,EACMy1B,CACR,EAAC,EACFx9B,EAAgB,KAAM,cAAey9B,GAAS,CAAC1zB,EAAK4W,EAAQzM,IAAY,CACtE,GAAIyM,EAAS5W,EAAK,CAChB9B,EAAI,MAAM,mBAAoB8B,EAAK4W,CAAM,EACzC,MACD,CACD,GAAI,CACF,SAAA+c,CACD,EAAG,KACJ,GAAIA,GAAY,MAAQA,EAAS,MAAQ3zB,GAAO2zB,EAAS,SAAW/c,GAAU+c,EAAS,UAAYxpB,EAAS,CAC1GjM,EAAI,OAAO,8BAA+By1B,CAAQ,EAClD,MACD,CACD,KAAK,SAAW,CACd,IAAA3zB,EACA,OAAA4W,EACA,QAAAzM,CACR,EACMjM,EAAI,OAAO,cAAe,KAAK,QAAQ,EACvC,KAAK,cAAa,CACxB,EAAOizB,EAAqB,CAAC,EACzBl7B,EAAgB,KAAM,gBAAiBy9B,GAAS,IAAM,CACpD,GAAK,KAAK,SAGVx1B,GAAI,OAAO,gBAAiB,KAAK,QAAQ,EACzC,GAAI,CACF,IAAA8B,EACA,OAAA4W,EACA,QAAAzM,CACR,EAAU,KAAK,SACL,CAACypB,EAAaC,CAAc,EAAI,KAAK,0BAA0B7zB,EAAK4W,CAAM,EAC9E,KAAK,sBAAsBgd,EAAaC,EAAgB1pB,CAAO,EAChE,EAAEinB,GAAyB,CAC1B,QAAS,EACV,EAAC,EACFn7B,EAAgB,KAAM,2BAA4B0uB,GAAa,CAAChR,EAAWvd,EAAOuW,EAAY/D,EAAY8K,IAAmBC,EAAU,mBAAmBvd,EAAOuW,EAAY/D,EAAY8K,CAAc,EAAG,CACxM,IAAK,GACN,EAAC,EACFzd,EAAgB,KAAM,kCAAmC0uB,GAAazQ,GAAe,4BAA6B,CAChH,IAAK,GACN,EAAC,EACFje,EAAgB,KAAM,4BAA6Bg8B,EAAQ,CAACjyB,EAAK4W,IAAW,CAC1E,IAAIkd,EAAald,EAAS5W,EACtB4zB,EAAc,KAAK,IAAI,EAAG5zB,EAAM8zB,EAAaxC,GAA2B,gBAAgB,EACxFuC,EAAiBjd,EAASkd,EAAaxC,GAA2B,iBACtE,MAAO,CAACsC,EAAaC,CAAc,CACpC,EAAC,EACF59B,EAAgB,KAAM,yBAA0Bg8B,EAAQ,CAAChG,EAAgB9hB,EAAS4pB,IAAmB,CACnG,IAAInhB,EAAM,IAAI,IACd,OAAAqZ,EAAe,QAAQ,CAACpiB,EAAK+V,IAAa,CAIxC,OAHI,CACF,KAAMoL,CACP,EAAGnhB,EACK7L,EAAI,EAAGA,EAAI+1B,EAAgB/1B,GAAK,EACvC,GAAI,CAACgtB,EAAQ,IAAIhtB,CAAC,EAAG,CACnB,IAAIg2B,EACCphB,EAAI,IAAIgN,CAAQ,GACnBhN,EAAI,IAAIgN,EAAU,EAAE,GAErBoU,EAAWphB,EAAI,IAAIgN,CAAQ,KAAO,MAAQoU,IAAa,QAAkBA,EAAS,KAAK,IAAI/C,GAAgBrR,EAAUzV,EAAQnM,CAAC,EAAE,IAAI,CAAC,CACvI,CAEX,CAAO,EACM4U,CACR,EAAC,EACF,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,2BAA6B,KAAK,2BAA2B,KAAK,IAAI,EAC3E,KAAK,GAAK/P,EACV,KAAK,cAAgBkvB,EACrB,KAAK,cAAgB,IAAI3K,GAAcvkB,CAAE,EACzC,KAAK,WAAamvB,EAClB,KAAK,aAAe,KACpB,KAAK,MAAQrnB,EACb,KAAK,WAAa,IAAIsB,EAAWpJ,CAAE,EACnC,KAAK,SAAW,KAChB,KAAK,aAAe,KACpB,KAAK,oBAAsB,GAC3B,KAAK,kBAAoB,GACzB,KAAK,iBAAmB,GACxB,KAAK,YAAc,KACnB,KAAK,mBAAqB,KAC1B,KAAK,OAAS,KACd,KAAK,cAAgB,KAKrB,KAAK,kBAAoB,IAAI,IAC7B,KAAK,mBAAqB,EAC1B,KAAK,mBAAqBukB,GAAc,wBAAwB,MAAOyK,GAAyBC,EAAoB,KAAK,eAAiB,MAAQA,IAAsB,OAAS,OAASA,EAAkB,gBAAkB,MAAQD,IAA0B,OAASA,EAAwB,CAAE,GAAE,MACtS,CACD,OAAQ,CACN,KAAK,MAAM,QACP,KAAK,cAAgB,MACvB,KAAK,YAAY,QAEf,KAAK,qBAAuB,MAC9B,KAAK,mBAAmB,QAE3B,CACD,gBAAiB,CACf,MAAM,eAAc,EACpB,GAAI,CACF,GAAAhvB,CACD,EAAG,KACJ,KAAK,MAAM,iBAAiBA,EAAG,MAAM,iBAAkB,KAAK,qBAAqB,EACjF,KAAK,MAAM,iBAAiBA,EAAG,MAAM,gBAAiB,KAAK,oBAAoB,EAC/E,KAAK,MAAM,iBAAiBA,EAAG,MAAM,cAAe,KAAK,iBAAiB,EAC1E,KAAK,MAAM,iBAAiBA,EAAG,OAAO,qBAAsB,KAAK,mBAAmB,EACpF,KAAK,MAAM,iBAAiBA,EAAG,MAAM,2BAA4B,KAAK,0BAA0B,EAC5F,KAAK,aAAe,MACtB,KAAK,mBAAmB,KAAK,WAAW,EAE1C,KAAK,cAAa,CACnB,CACD,eAAgB,CACd,MAAM,cAAa,EACnB,GAAI,CACF,GAAAA,CACD,EAAG,KACJ,KAAK,MAAM,oBAAoBA,EAAG,MAAM,iBAAkB,KAAK,qBAAqB,EACpF,KAAK,MAAM,oBAAoBA,EAAG,MAAM,gBAAiB,KAAK,oBAAoB,EAClF,KAAK,MAAM,oBAAoBA,EAAG,MAAM,cAAe,KAAK,iBAAiB,EAC7E,KAAK,MAAM,oBAAoBA,EAAG,OAAO,qBAAsB,KAAK,mBAAmB,EACvF,KAAK,MAAM,oBAAoBA,EAAG,MAAM,2BAA4B,KAAK,0BAA0B,EAC/F,KAAK,aAAe,MACtB,KAAK,sBAAsB,KAAK,WAAW,EAE7C,KAAK,kBAAiB,CACvB,CACD,mBAAmBoxB,EAAa,CAC9B,GAAI,CACF,GAAApxB,CACD,EAAG,KACJoxB,EAAY,iBAAiBpxB,EAAG,MAAM,cAAe,KAAK,kBAAkB,EAG5EoxB,EAAY,YAAY,EAAG,CAAC,CAC7B,CACD,sBAAsBA,EAAa,CACjC,GAAI,CACF,GAAApxB,CACD,EAAG,KACJoxB,EAAY,oBAAoBpxB,EAAG,MAAM,cAAe,KAAK,kBAAkB,CAChF,CACD,uBAAwB,CACtB,KAAK,cAAc,IAAItL,EAAqBkuB,EAAc,MAAM,UAAU,CAAC,CAC5E,CACD,sBAAuB,CACrB,KAAK,cAAc,IAAIluB,EAAqBkuB,EAAc,MAAM,SAAS,CAAC,CAC3E,CACD,kBAAkBrrB,EAAO,CACvB,KAAK,iBAAiBA,EAAM,MAAM,EAClC,KAAK,cAAc,IAAI7C,EAAqBkuB,EAAc,MAAM,OAAO,CAAC,CACzE,CACD,mBAAmBrrB,EAAO,CACxB,KAAK,eAAeA,EAAM,MAAM,EAChC,KAAK,cAAc,IAAI7C,EAAqBkuB,EAAc,MAAM,OAAO,CAAC,CACzE,CACD,oBAAoBrrB,EAAO,CACzB,KAAK,cAAc,IAAI7C,EAAqBkuB,EAAc,MAAM,eAAgBrrB,CAAK,CAAC,CACvF,CACD,4BAA6B,CAC3B,KAAK,cAAc,IAAI7C,EAAqBkuB,EAAc,MAAM,gBAAiB,CAC/E,OAAQ,KAAK,OACd,EAAC,CACH,CACD,IAAI,UAAW,CACb,IAAIyO,EAAuBC,EAAcC,EACzC,OAEE,KAAK,IAAI,KAAK,MAAM,KAAM,CAAC,EAAI,KAAK,qBAAuBF,GAAyBC,EAAe,KAAK,UAAY,MAAQA,IAAiB,SAAmBC,EAAyBD,EAAa,kBAAoB,MAAQC,IAA2B,OAAvG,OAAyHA,EAAuB,UAAY,MAAQF,IAA0B,OAASA,EAAwB,EAExX,CACD,IAAI,mBAAoB,CACtB,IAAIG,EAAuBC,EAC3B,OAAO,KAAK,uBAAuB,KAAK,kBAAmB,KAAK,SAAUD,GAAyBC,EAAmB,KAAK,cAAgB,MAAQA,IAAqB,OAAS,OAASA,EAAiB,WAAW,UAAY,MAAQD,IAA0B,OAASA,EAAwB,CAAC,CACvS,CACD,IAAI,gBAAiB,CACnB,OAAO,KAAK,iBACb,CACD,IAAI,eAAezhB,EAAK,CAClBA,IAAQ,KAAK,oBAGjBA,EAAI,QAAQ,CAAC/I,EAAK+V,IAAa,CAC7B,GAAI,CAACwH,GAAc,aAAaxH,CAAQ,EACtC,MAAM,IAAI,MAAM,oBAAoB,OAAOA,CAAQ,CAAC,EAEtD,GAAI,CACF,KAAAmL,CACD,EAAGlhB,EACJkhB,EAAK,QAAQ,CAAC30B,EAAO0W,IAAgB,CACnC,GAAI,CAACsa,GAAc,aAAata,CAAW,EACzC,MAAM,IAAI,MAAM,uBAAuB,OAAOA,CAAW,CAAC,CAEpE,CAAO,CACP,CAAK,EACD,KAAK,kBAAoB8F,EACzB,KAAK,mBAAqB,KAAK,IAAI,KAAK,mBAAoB,KAAK,iBAAiB,EAClF,KAAK,oBAAsB,GAC3B,KAAK,cAAc,IAAIrb,EAAqBkuB,EAAc,MAAM,oBAAoB,CAAC,EACtF,CACD,IAAI,iBAAkB,CACpB,OAAO,KAAK,kBACb,CACD,IAAI,gBAAgBoE,EAAO,CACrBA,IAAU,KAAK,qBAGnB,KAAK,mBAAqB,KAAK,IAAI,EAAGA,EAAO,KAAK,iBAAiB,EACnE,KAAK,cAAc,IAAItyB,EAAqBkuB,EAAc,MAAM,OAAO,CAAC,EACzE,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,kBAAkB,KAAO,EAAI,KAAK,IAAI,GAAG,KAAK,kBAAkB,KAAM,GAAI,EAAI,CAC3F,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,QAAQ,MACrB,CACD,IAAI,wBAAyB,CAC3B,IAAI8O,EAAwBC,EAAeC,EAC3C,OAAO,KAAK,QAAU,MAAQ,KAAK,OAAO,UAAY,GAAKF,GAA0BC,EAAgB,KAAK,UAAY,MAAQA,IAAkB,SAAmBC,EAAwBD,EAAc,kBAAoB,MAAQC,IAA0B,OAAtG,OAAwHA,EAAsB,UAAY,MAAQF,IAA2B,OAASA,EAAyB,CACzX,CACD,IAAI,qBAAsB,CACxB,IAAIG,EAAwBC,EAAeC,EAC3C,OAAO,KAAK,QAAU,MAAQ,KAAK,OAAO,YAAaF,GAA0BC,EAAgB,KAAK,UAAY,MAAQA,IAAkB,SAAmBC,EAAwBD,EAAc,kBAAoB,MAAQC,IAA0B,OAAtG,OAAwHA,EAAsB,UAAY,MAAQF,IAA2B,OAASA,EAA6B,CACzX,CACD,IAAI,yBAA0B,CAC5B,MAAO,EACR,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,gBAAkB,IACrC,CACD,IAAI,YAAa,CACf,MAAO,CAAC,KAAK,kBAAoB,KAAK,YAAc,IACrD,CACD,oBAAoBra,EAAGC,EAAGvhB,EAAM,CAC1B,KAAK,oBAAoBshB,CAAC,GAAK,OACjC,KAAK,oBAAoBA,CAAC,EAAI,IAEhC,KAAK,oBAAoBA,CAAC,EAAEC,CAAC,EAAIvhB,CAClC,CACD,kBAAkBshB,EAAGC,EAAGvhB,EAAM,CACxB,KAAK,kBAAkBshB,CAAC,GAAK,OAC/B,KAAK,kBAAkBA,CAAC,EAAI,IAE9B,KAAK,kBAAkBA,CAAC,EAAEC,CAAC,EAAIvhB,CAChC,CACD,kBAAkBshB,EAAGC,EAAG,CACtB,IAAInR,EAAS,KAAK,kBAAkBkR,CAAC,EACjClR,GAAU,MACZ,OAAOA,EAAOmR,CAAC,CAElB,CACD,iBAAiBD,EAAGC,EAAG,CACrB,IAAIua,EAAuBC,EAE3B,KAAMD,EAAwB,KAAK,kBAAkBxa,CAAC,KAAO,MAAQwa,IAA0B,OAAS,OAASA,EAAsBva,CAAC,KAAO,OAC7I,OAAO,KAAK,kBAAkBD,CAAC,EAAEC,CAAC,EAIpC,KAAMwa,EAAwB,KAAK,oBAAoBza,CAAC,KAAO,MAAQya,IAA0B,OAAS,OAASA,EAAsBxa,CAAC,KAAO,OAAW,CAC1J,IAAI3K,EAAS,KAAK,aAAa0K,EAAGC,CAAC,EACnC,GAAI3K,IAAW,KACb,OAAO,KAET,GAAIA,IAAW,OACb,OAEF,IAAI+O,EAAU,KAAK,aAAarE,EAAGC,CAAC,EAChCya,EAAwB,KAAK,gCAAgC,KAAK,UAAWrW,EAAQ,KAAMA,EAAQ,IAAI,EACvGhL,EACJ,GAAI,CAACqhB,EAAuB,CAC1B,IAAIC,EAAgB,KAAK,cAAc3a,EAAGC,CAAC,GACtC0a,GAAkB,KAAmC,OAASA,EAAc,eAAiB,OAChGthB,EAAiBshB,EAEpB,CACD,IAAIj8B,EAAO,KAAK,cAAc4W,EAAQ+O,EAAQ,KAAMA,EAAQ,KAAMhL,CAAc,EAChF,KAAK,oBAAoB2G,EAAGC,EAAGvhB,CAAI,CACpC,CACD,OAAO,KAAK,oBAAoBshB,CAAC,EAAEC,CAAC,CACrC,CACD,YAAYD,EAAGC,EAAG,CAChB,IAAI2a,EACAl8B,EAAO,KAAK,iBAAiBshB,EAAGC,CAAC,EACrC,GAAIvhB,GAAQ,MAAQ,KAAK,YAAYshB,CAAC,EAAG,CACvC,IAAI6a,EAAa,KAAK,WAAW5a,CAAC,EAClC,GAAI4a,GAAc,MAAQ,KAAK,eAAe,IAAIA,CAAU,EAE1D,MAAO,GAEV,CACD,GAAIjpB,EAAW,YAAYgpB,EAAkB,KAAK,QAAQ5a,CAAC,KAAO,MAAQ4a,IAAoB,OAAS,OAASA,EAAgB,IAAI,EAAG,CACrI,GAAIl8B,IAAS,KACX,OAAO,KAAK,UAAU,gBAAkB,OAAS,GAEnD,GAAIA,IAAS,GACX,OAAO,KAAK,UAAU,iBAAmB,QAAU,EAEtD,CACD,OAAOA,GAA0C,EAClD,CACD,sBAAsBshB,EAAG,CACvB,IAAIlR,EAAS,KAAK,QAAQkR,CAAC,EACvB,CACF,KAAAlX,CACD,EAAGgG,EACJ,GAAI8C,EAAW,aAAa9I,CAAI,GAAK,KAAK,UAAU,yBAClD,MAAO,GAGV,CACD,aAAakX,EAAGC,EAAGkD,EAAO,CACxB,IAAIuN,EAAO,KAAK,YAAY1Q,EAAGC,CAAC,EAChC,GAAIyQ,EAAM,CACR,GAAI,CACF,OAAAjoB,EACA,MAAO2M,CACR,EAAGsb,EACJ,GAAItb,GAAW,MAAQA,IAAY,GACjC,OAAAqb,EAActN,EAAM,eAAe,EAC5BA,EAAM,gBAEf,GAAI1a,GAAUA,EAAO,MACnB,OAAOA,EAAO,MAEhB,GAAI,KAAK,aAAawX,CAAC,EAErB,OAAAwQ,EAActN,EAAM,gBAAgB,EAC7BA,EAAM,iBAIf,GAAI/N,GAAW,KAAM,CACnB,IAAI0lB,EAAW,KAAK,aAAa9a,EAAGC,CAAC,EACrC,GAAIrO,EAAW,WAAWkpB,EAAS,IAAI,GAAKA,EAAS,OAAS,OAC5D,OAAArK,EAActN,EAAM,SAAS,EACtBA,EAAM,UAEf,GAAIvR,EAAW,aAAakpB,EAAS,IAAI,EACvC,OAAI1lB,EAAU,GACZqb,EAActN,EAAM,mBAAmB,EAChCA,EAAM,qBAEX/N,EAAU,GACZqb,EAActN,EAAM,mBAAmB,EAChCA,EAAM,sBAEfsN,EAActN,EAAM,eAAe,EAC5BA,EAAM,gBAEhB,CACP,SAAe,KAAK,aAAalD,CAAC,GAAK,KAAK,YAAYD,CAAC,EACnD,OAAAyQ,EAActN,EAAM,cAAc,EAC3BA,EAAM,eAEf,OAAOA,EAAM,SACd,CACD,uBAAuBnD,EAAGC,EAAGkD,EAAO,CAClC,IAAI4X,EAAuBC,EAC3B,OAAQD,GAAyBC,EAAsB,KAAK,cAAchb,EAAGC,CAAC,KAAO,MAAQ+a,IAAwB,OAAS,OAASA,EAAoB,mBAAqB,MAAQD,IAA0B,OAASA,EAAwB,IACpP,CACD,iBAAiB/a,EAAG,CAClB,IAAIlR,EAAS,KAAK,QAAQkR,CAAC,EACvB,CACF,KAAAlX,CACD,EAAGgG,EACJ,OAAI8C,EAAW,aAAa9I,CAAI,EACvB,QAEL8I,EAAW,WAAW9I,CAAI,GAAKgG,EAAO,OAAS,OAC1C,SAEF,MACR,CACD,oBAAoBkR,EAAG,CACrB,IAAIib,EACA/P,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC5EgQ,EAAS,KAAK,cAAclb,EAAGkL,CAAK,EACxC,OAAIO,GAAoByP,CAAM,EACrBA,EAAO,MAAQ,GAAKA,EAAO,MAE5BD,EAAsBC,GAAW,KAA4B,OAASA,EAAO,eAAiB,MAAQD,IAAwB,OAASA,EAAsBC,GAAW,KAA4B,OAASA,EAAO,IAC7N,CACD,qBAAqBlb,EAAG,CACtB,IAAIkL,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC5Epc,EAAS,KAAK,cAAckR,EAAGkL,CAAK,EACxC,GAAIO,GAAoB3c,CAAM,EAAG,CAC/B,IAAIqsB,EACJ,OAAQA,EAAgBrsB,EAAO,SAAW,MAAQqsB,IAAkB,OAASA,EAAgB,IAC9F,CACD,OAAO,IACR,CACD,qBAAqBnY,EAAYkI,EAAO,CACtC,IAAI0H,EAAQ,KAAK,cAAc5P,EAAYkI,CAAK,EAChD,GAAIO,GAAoBmH,CAAK,EAC3B,OAAOA,CAGV,CACD,2BAA2B5P,EAAYkI,EAAO,CAC5C,IAAIkQ,EAAuBC,EAC3B,OAAO,KAAK,sBAAsB,KAAKD,GAAyBC,EAAsB,KAAK,cAAcrY,EAAYkI,CAAK,KAAO,MAAQmQ,IAAwB,OAAS,OAASA,EAAoB,QAAU,MAAQD,IAA0B,OAASA,EAAwB,EAAE,CACvR,CACD,cAAcpb,EAAG,CACf,IAAIsb,EACApQ,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAChF,GAAIA,IAAU,EACZ,OAAO,KAAK,QAAQlL,CAAC,EAEvB,IAAIzR,GAAc+sB,EAAmB,KAAK,QAAQtb,CAAC,KAAO,MAAQsb,IAAqB,OAAS,OAASA,EAAiB,KACtH1I,EAAQ,KAAK,sBAAsB,IAAIrkB,CAAU,EACrD,GAAKqkB,EAIL,SADI2I,EAAe3I,EAAM,MAClB2I,EAAerQ,GAAO,CAE3B,GADA0H,EAAQ,KAAK,sBAAsB,IAAIA,EAAM,IAAI,EAC7C,CAACA,EACH,OAEF2I,EAAe3I,EAAM,KACtB,CACD,GAAIA,EAAM,QAAU1H,EAClB,OAAO0H,EAGV,CACD,iBAAiB3S,EAAG,CAClB,IAAIub,EAAY,KAAK,UAAUvb,CAAC,EAChC,OAAIub,GAAa,MAAQ,KAAK,OACrB,KAAK,OAAO,eAAeA,CAAS,EAEtC,EACR,CAID,IAAI,qBAAsB,CACxB,IAAIC,EACJ,OAAO,KAAK,gCAAgCA,EAAqB,KAAK,eAAiB,MAAQA,IAAuB,OAASA,EAAqB,MAAS,CAC9J,CACD,IAAI,2BAA4B,CAC9B,IAAIC,EACJ,OAAO,KAAK,sCAAsCA,EAAqB,KAAK,eAAiB,MAAQA,IAAuB,OAASA,EAAqB,MAAS,CACpK,CACD,IAAI,WAAY,CACd,OAAO,KAAK,qBAAqB,KAAK,MAAM,OAAO,CACpD,CACD,IAAI,sBAAuB,CACzB,IAAIC,EACJ,OAAQA,EAAwB,KAAK,yBAA2B,MAAQA,IAA0B,OAASA,EAAwB,CACpI,CACD,IAAI,qBAAqBzQ,EAAO,CAC9B,KAAK,sBAAwBA,CAC9B,CACD,IAAI,sBAAuB,CACzB,OAAO,KAAK,qBACb,CACD,IAAI,oBAAqB,CACvB,OAAO,KAAK,mBACb,CACD,IAAI,mBAAmBuH,EAAQ,CAC7B,GAAIA,IAAW,KAAK,oBAGpB,IAAI,CACF,OAAQmJ,EACR,SAAAtJ,EACA,UAAAC,EACA,SAAAC,CACD,EAAGzF,GAAc,wBAAwB,KAAM0F,GAAgD,KAAK,yBAAyB,EAC9H,KAAK,oBAAsBmJ,EAC3B,KAAK,qBAAuBtJ,EAC5B,KAAK,sBAAwBC,EAC7B,KAAK,sBAAwBC,EAC9B,CACD,IAAIvS,EAAG,CACL,IAAI4b,EAAwBC,EAAeC,EAAuBC,EAAuBC,EAAeC,EAAuBC,EAAoBC,EAAuBC,EAAqBC,EAC3LC,GAAkBV,GAA0BC,EAAgB,KAAK,UAAY,MAAQA,IAAkB,SAAmBC,EAAwBD,EAAc,kBAAoB,MAAQC,IAA0B,OAAtG,OAAwHA,EAAsB,UAAY,MAAQF,IAA2B,OAASA,EAAyB,EAC/UW,GAAaR,GAAyBC,EAAgB,KAAK,UAAY,MAAQA,IAAkB,OAAS,OAASA,EAAc,aAAe,MAAQD,IAA0B,OAASA,EAAwB,GACnNR,EAAY,KAAK,UAAUvb,CAAC,EAChC,GAAIub,GAAa,KAAM,CACrB,IAAIiB,EAAeC,EAAuBC,EACtC1pB,GAAawpB,EAAgB,KAAK,UAAY,MAAQA,IAAkB,OAAS,OAASA,EAAc,eAAejB,CAAS,EACpI,OAAA/K,EAAcxd,CAAS,GACfypB,GAAyBC,EAAsB,KAAK,iBAAmB,MAAQA,IAAwB,OAAS,OAASA,EAAoB,IAAI1pB,CAAS,KAAO,MAAQypB,IAA0B,OAASA,EAAwB,IAC7O,CACD,IAAI7B,EAAa,KAAK,WAAW5a,CAAC,EAClC,GAAI4a,GAAc,KAAM,CACtB,IAAI+B,EACJ,OAAQA,EAAwB,KAAK,kBAAkB,IAAI/B,CAAU,KAAO,MAAQ+B,IAA0B,OAASA,EAAwB,IAChJ,CACD,IAAIntB,GAAUysB,GAAyBC,EAAqB,KAAK,gBAAkB,MAAQA,IAAuB,OAAS,OAASA,EAAmB,UAAY,MAAQD,IAA0B,OAASA,EAAwB,EAClOW,GAAaL,EAAYvc,EAAIsc,EAAiBtc,GAAKxQ,EACvD,OAAQ2sB,GAAyBC,EAAsB,KAAK,gBAAkB,MAAQA,IAAwB,SAAmBC,EAAwBD,EAAoB,QAAU,MAAQC,IAA0B,OAAlG,OAAoHA,EAAsBO,CAAS,KAAO,MAAQT,IAA0B,OAASA,EAAwB,IACrV,CAUD,aAAattB,EAAQU,EAAK,CACxB,IAAIgsB,EAAY,KAAK,UAAUhsB,CAAG,EAClC,GAAIgsB,GAAa,KAAM,CACrB,IAAIsB,EAAeC,EAAuBC,EAAeC,EACrDhqB,GAAa6pB,EAAgB,KAAK,UAAY,MAAQA,IAAkB,OAAS,OAASA,EAAc,eAAetB,CAAS,EAChI0B,GAAoBH,GAAyBC,EAAgB,KAAK,UAAY,MAAQA,IAAkB,OAAS,OAASA,EAAc,oBAAsB,MAAQD,IAA0B,OAASA,EAAwBjiB,EAAqB,IACtPqiB,EAAc,KAAK,QAAQruB,CAAM,EAKjCsuB,GAAgBH,EAAoB,KAAK,eAAiB,MAAQA,IAAsB,OAAS,OAASA,EAAkB,QAAQ,KAAKnvB,GAAO,CAClJ,IAAIuvB,EACJ,OAAOvvB,EAAI,OAAS,GAAG,OAAOqvB,EAAY,KAAM,IAAI,EAAE,OAAOlqB,CAAS,IAAMA,IAAciqB,KAAsBG,EAAgB,KAAK,UAAY,MAAQA,IAAkB,OAAS,OAASA,EAAc,eAAe,UAAY,IAAMvvB,EAAI,OAASqvB,EAAY,IAC7Q,CAAO,EACD,GAAIC,GAAgB,KAClB,OAAOA,CAGV,CAED,OAAO,KAAK,QAAQtuB,CAAM,CAC3B,CAQD,UAAUmR,EAAG,CACX,IAAIqd,EAAwBC,EAAgBC,EAAuBC,EAAwBC,EACvFnB,GAAkBe,GAA0BC,EAAiB,KAAK,UAAY,MAAQA,IAAmB,SAAmBC,EAAwBD,EAAe,kBAAoB,MAAQC,IAA0B,OAAvG,OAAyHA,EAAsB,UAAY,MAAQF,IAA2B,OAASA,EAAyB,EAClVd,GAAaiB,GAA0BC,EAAiB,KAAK,UAAY,MAAQA,IAAmB,OAAS,OAASA,EAAe,aAAe,MAAQD,IAA2B,OAASA,EAAyB,GACzNjC,EAAYgB,EAAYvc,EAAIA,EAAI,KAAK,MAAM,KAC/C,OAAIub,GAAa,GAAKA,EAAYe,EACzBf,EAEF,IACR,CAQD,WAAWvb,EAAG,CACZ,IAAI4a,EAAa5a,EAAI,KAAK,oBAAsB,KAAK,MAAM,KAC3D,OAAI4a,GAAc,GAAKA,EAAa,KAAK,mBAChCA,EAEF,IACR,CAOD,YAAY5a,EAAG,CACb,OAAO,KAAK,UAAUA,CAAC,GAAK,IAC7B,CAOD,aAAaA,EAAG,CACd,OAAO,KAAK,WAAWA,CAAC,GAAK,IAC9B,CACD,YAAYD,EAAGC,EAAG,CAChB,IAAI0d,EACJ,OAAQA,EAAY,KAAK,IAAI1d,CAAC,KAAO,MAAQ0d,IAAc,OAAS,OAASA,EAAU,KAAK,IAAI3d,CAAC,CAClG,CACD,cAAcA,EAAGC,EAAG,CAClB,IAAI2d,EACJ,OAAQA,EAAoB,KAAK,YAAY5d,EAAGC,CAAC,KAAO,MAAQ2d,IAAsB,OAAS,OAASA,EAAkB,MAC3H,CACD,aAAa5d,EAAGC,EAAG,CACjB,IAAIyQ,EAAO,KAAK,YAAY1Q,EAAGC,CAAC,EAMhC,GAAIyQ,EAAM,CACR,IAAImN,EACJ,OAAQA,EAAcnN,EAAK,SAAW,MAAQmN,IAAgB,OAASA,EAAc,IACtF,CAEF,CACD,iBAAiBnN,EAAM,CACrB,GAAIA,GAAQ,KAAM,CAChB7sB,EAAI,KAAK,eAAe,EACxB,MACD,CACD,KAAK,aAAe,KAAK,oBAAoB6sB,CAAI,EACjD,KAAK,oBAAsB,EAC5B,CACD,eAAeoN,EAAY,CACzB,IAAIC,EACFC,EACAC,EACArqB,EAAQ,KACV,GAAIkqB,GAAc,KAAM,CACtBj6B,EAAI,KAAK,eAAe,EACxB,MACD,CACD,GAAI,CACF,QAAAiM,EACA,KAAAC,CACD,EAAG+tB,EACJ,GAAI/tB,EAAK,SAAW,EAAG,CACrBlM,EAAI,MAAM,sEAAsE,EAChF,MACD,CAuBD,QAtBIq6B,EAAU,IAAI,IACd1uB,EAAMO,EAAK,CAAC,EACZmtB,GAAoBa,GAA0BC,EAAiB,KAAK,UAAY,MAAQA,IAAmB,OAAS,OAASA,EAAe,oBAAsB,MAAQD,IAA2B,OAASA,EAAyBjjB,EAAqB,IAC5PqjB,GAAgBF,EAAiB,KAAK,UAAY,MAAQA,IAAmB,OAAS,OAASA,EAAe,aAC9GhY,EAAQ,UAAiB,CAC3B,IAAImY,EAAqBC,EACrBvvB,EAASgB,EAAQuL,CAAC,EAClB,CAACpe,EAAMgW,GAAamrB,EAAsBD,GAAiB,OAA4CE,EAAqBF,EAAalhC,CAAI,KAAO,MAAQohC,IAAuB,OAAtF,OAAwGA,EAAmB,CAAC,KAAO,MAAQD,IAAwB,OAASA,EAAsBlB,CAAgB,EAAIpuB,EAAO,KAAK,MAAM,IAAI,EACxUovB,EAAQ,IAAIjrB,CAAS,GACxBirB,EAAQ,IAAIjrB,EAAW,CACrB,KAAM,IAAI,GACpB,CAAS,EAEH,GAAI,CACF,KAAM0d,CACd,EAAUuN,EAAQ,IAAIjrB,CAAS,EACrBR,EAAcmB,EAAM,QAAQ,UAAU9F,GAAOA,EAAI,OAAS7Q,CAAI,EAClE0zB,EAAQ,IAAIle,EAAa,CACvB,MAAOjD,EAAI,IAAIV,CAAM,EACrB,OAAQU,EAAI,UAAUV,CAAM,CACpC,CAAO,CACP,EACauM,EAAI,EAAGA,EAAIvL,EAAQ,OAAQuL,GAAK,EACvC4K,IAEFpiB,EAAI,OAAO,iBAAkBq6B,CAAO,EACpC,KAAK,cAAgBA,EACrB,KAAK,oBAAsB,EAC5B,CAMD,qBAAqBjhC,EAAM,CACzB,OAAO,KAAK,0BAA0B,KAAK,OAAO,EAAE,IAAIA,CAAI,CAC7D,CAKD,oBAAoByzB,EAAM,CAQxB,QAPI4N,EAAU,CACZ,OAAQ5N,EAAK,OACb,KAAM,CAAE,CACd,EACQ,CACF,QAAA5gB,CACD,EAAG4gB,EACKlS,EAAI,EAAGA,EAAIkS,EAAK,KAAK,OAAQlS,GAAK,EAAG,CAC5C,IAAI+f,EAAO7N,EAAK,KAAKlS,CAAC,EAClBggB,EAAS,KAAK,mBAAmBD,EAAMzuB,CAAO,EAClDwuB,EAAQ,KAAK,KAAKE,CAAM,CACzB,CACD,OAAOF,CACR,CACD,mBAAmB9uB,EAAKM,EAAS,CAE/B,QADI4gB,EAAO,IAAI,IACNrV,EAAI,EAAGA,EAAIvL,EAAQ,OAAQuL,GAAK,EAAG,CAC1C,IAAIojB,EAAW3uB,EAAQuL,CAAC,EACpB3W,EAAQ,KAAK,qBAAqB+5B,EAAS,IAAI,EACnDhO,EAAc/rB,CAAK,EACnBgsB,EAAK,IAAIhsB,EAAO,CACd,MAAO8K,EAAI,IAAIivB,CAAQ,EACvB,OAAQjvB,EAAI,UAAUivB,CAAQ,CACtC,CAAO,CACF,CACD,MAAO,CACL,KAAA/N,CACN,CACG,CACD,mBAAoB,CAClB7sB,EAAI,OAAO,oBAAqB,KAAK,YAAY,EAC7C,KAAK,eACP,KAAK,aAAa,QAClB,KAAK,aAAe,MAEtB,KAAK,YAAY,SACjB,KAAK,cAAc,QACpB,CACD,IAAI,QAAS,CACX,OAAO,KAAK,MAAM,MACnB,CACD,IAAI,OAAOoL,EAAQ,CACjB,KAAK,kBAAiB,EACtB,KAAK,MAAM,YAAYA,CAAM,EAC7B,KAAK,cAAa,CACnB,CACD,IAAI,WAAY,CACd,OAAO,KAAK,aACb,CACD,IAAI,UAAUqK,EAAW,CACvB,KAAK,cAAgBA,EACrB,KAAK,oBAAsB,GAC3B,KAAK,cAAc,IAAIpc,EAAqBkuB,EAAc,MAAM,iBAAiB,CAAC,CACnF,CACD,cAAcrvB,EAAOuW,EAAY,CAC/B,IAAI/D,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACjF8K,EAAiB,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OAC3D,OAAO,KAAK,yBAAyB,KAAK,UAAWtd,EAAOuW,EAAY/D,EAAY8K,CAAc,CACnG,CACD,IAAI,MAAO,CACT,OAAO,KAAK,MAAM,IACnB,CACD,IAAI,KAAKpH,EAAM,CACb,KAAK,kBAAiB,EACtB,KAAK,MAAM,UAAUA,CAAI,EACzB,KAAK,cAAa,CACnB,CACD,IAAI,aAAaysB,EAAc,CAE7B,GADA76B,EAAI,MAAM,mBAAoB66B,CAAY,EACtCA,IAAiB,KAAK,OAU1B,IANA,KAAK,OAASA,EACd,KAAK,oBAAsB,GACvB,KAAK,oBAAsB,MAC7B,KAAK,mBAAmB,SAE1B,KAAK,eAAe,IAAI,EACpBA,GAAgB,KAAM,CACxB,KAAK,cAAc,IAAIxhC,EAAqBkuB,EAAc,MAAM,OAAO,CAAC,EACxE,MACD,CACD,KAAK,mBAAqB7tB,GAAa,eAAe,KAAK,MAAM,eAAemhC,CAAY,EAAGpuB,GAASA,EAAM,MAAO,GACrH,KAAK,mBAAmB,KAAKspB,GAAe,CAC1C,KAAK,mBAAqB,KAC1B,KAAK,eAAeA,CAAW,CACrC,CAAK,EAAE,MAAMx7B,GAAO,CACVb,GAAa,WAAWa,CAAG,IAG/ByF,EAAI,MAAM,iCAAkCzF,CAAG,EAC/C,KAAK,mBAAqB,KAC1B,KAAK,cAAc,IAAIlB,EAAqBkuB,EAAc,MAAM,eAAgB,CAC9E,OAAQhtB,CACT,EAAC,EACR,CAAK,EACF,CACD,eAAew7B,EAAa,CAC1B/1B,EAAI,MAAM,iBAAkB+1B,CAAW,EACnC,KAAK,cAAgB,OACnB,KAAK,cAAgB,GACvB,KAAK,sBAAsB,KAAK,WAAW,EAE7C,KAAK,YAAY,SAEnB,KAAK,YAAcA,EACnB,KAAK,cAAgB,KACjB,KAAK,cAAgB,GAAK,KAAK,aAAe,MAChD,KAAK,mBAAmB,KAAK,WAAW,CAE3C,CAMD,sBAAsBL,EAAaC,EAAgB1pB,EAAS,CAC1DjM,EAAI,OAAO,wBAAyB01B,EAAaC,EAAgB1pB,CAAO,EACpE,KAAK,cAAgB,MACvBjM,EAAI,OAAO,iDAAiD,EAC5D,KAAK,aAAe,KAAK,MAAM,YAAY01B,EAAaC,EAAgB1pB,CAAO,IAE/EjM,EAAI,OAAO,mDAAmD,EAC9D,KAAK,aAAa,YAAY01B,EAAaC,EAAgB1pB,CAAO,EAErE,CACD,SAAS4M,EAAQ,CACf,IAAI7K,EAAa,UACfuC,EAAS,KACX,OAAO5C,GAAkB,WAAa,CACpC,IAAImtB,EAAiB9sB,EAAW,OAAS,GAAKA,EAAW,CAAC,IAAM,OAAYA,EAAW,CAAC,EAAI,GACxF+sB,EAAc/sB,EAAW,OAAS,GAAKA,EAAW,CAAC,IAAM,OAAYA,EAAW,CAAC,EAAI9V,GAASA,EAC9F8iC,EAAoBhtB,EAAW,OAAS,GAAKA,EAAW,CAAC,IAAM,OAAYA,EAAW,CAAC,EAAI,GAC/F,GAAIuC,EAAO,cAAgB,KACzB,MAAM,IAAI,MAAM,2BAA2B,EAE7C,IAAI0qB,EAAeD,EAAoB5iB,EAAU,YAAYS,CAAM,EAAIA,EACvE,GAAI,CAACqQ,GAAc,sBAAsB+R,CAAY,EACnD,MAAM,IAAI,MAAM,2BAA2B,OAAOpiB,CAAM,CAAC,EAO3D,QAHIqiB,EAAqB,IAAI,IACzBC,EAAc,GACdC,EAAwB,IAAI,IACvBt7B,EAAI,EAAGA,EAAIm7B,EAAa,OAAQn7B,GAAK,EAAG,CAC/C,IAAIiZ,EAAQkiB,EAAan7B,CAAC,EAC1B8sB,EAAc7T,EAAM,MAAM,EAC1B6T,EAAc7T,EAAM,QAAQ,EAE5B,QAAS4B,EAAI5B,EAAM,SAAU4B,GAAK5B,EAAM,QAAU4B,EAAIpK,EAAO,oBAAqBoK,GAAK,EACrFugB,EAAmB,IAAIvgB,CAAC,EAItB5B,EAAM,QAAUxI,EAAO,qBAAuBwI,EAAM,UAAYxI,EAAO,oBAAsBA,EAAO,MAAM,MAC5G4qB,EAAY,KAAK,IAAI/iB,EAAUW,EAAM,YAAa,KAAK,IAAI,KAAK,IAAI,EAAGA,EAAM,SAAWxI,EAAO,mBAAmB,CAAC,EAAGwI,EAAM,UAAW,KAAK,IAAI,KAAK,IAAI,EAAGA,EAAM,OAASxI,EAAO,mBAAmB,EAAGA,EAAO,MAAM,KAAOA,EAAO,mBAAmB,CAAC,CAAC,EAG1P,QAAS8qB,EAAK,KAAK,IAAItiB,EAAM,SAAUxI,EAAO,oBAAsBA,EAAO,MAAM,IAAI,EAAG8qB,GAAMtiB,EAAM,QAAUsiB,EAAK9qB,EAAO,oBAAsBA,EAAO,MAAM,KAAOA,EAAO,uBAAwB8qB,GAAM,EACvMD,EAAsB,IAAIC,CAAE,CAE/B,CACD,IAAIpvB,EAAUid,GAAc,kBAAkB+R,EAAc1qB,EAAO,OAAO,EACtE/H,EAAS,GACTsyB,GACFtyB,EAAO,KAAKyD,EAAQ,IAAIuL,GAAKA,EAAE,IAAI,CAAC,EAetC,QAbI8jB,EAAkB,CAAC,GAAGJ,CAAkB,EAAE,KAAI,EAC9CpY,EAAS,WAAmB,CAC9B,IAAInX,EAAM2vB,EAAgBjb,CAAE,EACxByM,EAAU7gB,EAAQ,IAAIhB,GAAU,CAClC,IAAIpK,EAAQ0P,EAAO,qBAAqBtF,EAAO,IAAI,EACnD,OAAA2hB,EAAc/rB,CAAK,EACZk6B,EAAYxqB,EAAO,aAAa1P,EAAO8K,CAAG,EAAGV,CAAM,CACpE,CAAS,EACG6vB,GACFhO,EAAQ,KAAKvc,EAAO,iBAAiB5E,CAAG,CAAC,EAE3CnD,EAAO,KAAKskB,CAAO,CAC3B,EACezM,EAAK,EAAGA,EAAKib,EAAgB,OAAQjb,GAAM,EAClD,MAAOyC,EAAM,EAEf,GAAIqY,EAAY,OAAS,EAAG,CAC1B,IAAII,EAAWhrB,EAAO,cAAc,mBAAmB4qB,CAAW,EAC9DK,EAAW,MAAMjrB,EAAO,aAAa,SAASgrB,EAAUtvB,CAAO,EACnEzD,EAAO,KAAK,GAAGgzB,EAAS,KAAK,IAAI1O,GAAW7gB,EAAQ,IAAIhB,GAAU8vB,EAAYjO,EAAQ,IAAI7hB,CAAM,EAAGA,CAAM,CAAC,CAAC,CAAC,CAC7G,CAcD,QAbIwwB,EAAqB,CAAC,GAAGL,CAAqB,EAAE,KAAI,EACpDM,EAAS,WAAmB,CAC9B,IAAI/vB,EAAM8vB,EAAmBE,CAAG,EAC5B7O,EAAU7gB,EAAQ,IAAIhB,GAAU,CAClC,IAAIpK,EAAQ0P,EAAO,qBAAqBtF,EAAO,IAAI,EACnD,OAAA2hB,EAAc/rB,CAAK,EACZk6B,EAAYxqB,EAAO,aAAa1P,EAAO8K,CAAG,EAAGV,CAAM,CACpE,CAAS,EACG6vB,GACFhO,EAAQ,KAAKvc,EAAO,iBAAiB5E,CAAG,CAAC,EAE3CnD,EAAO,KAAKskB,CAAO,CAC3B,EACe6O,EAAM,EAAGA,EAAMF,EAAmB,OAAQE,GAAO,EACxD,MAAOD,EAAM,EAEf,OAAOlzB,CACR,IACF,CASD,aAAaqQ,EAAQ,CACnB,IAAI/I,EAAc,UAChBsD,EAAS,KACX,OAAOzF,GAAkB,WAAa,CACpC,IAAImtB,EAAiBhrB,EAAY,OAAS,GAAKA,EAAY,CAAC,IAAM,OAAYA,EAAY,CAAC,EAAI,GAC3FirB,EAAcjrB,EAAY,OAAS,GAAKA,EAAY,CAAC,IAAM,OAAYA,EAAY,CAAC,EAAI5X,GAAS,GAAG,OAAOA,CAAK,EACpH8H,EAAI,OAAO,eAAgB6Y,EAAQiiB,CAAc,EACjD,IAAIjO,EAAO,MAAMzZ,EAAO,SAASyF,EAAQiiB,EAAgBC,EAAa,EAAK,EAC3E,OAAOlO,EAAK,IAAIlhB,GAAOA,EAAI,KAAK,GAAI,CAAC,EAAE,KAAK;AAAA,CAAI,CACjD,IACF,CACD,YAAYM,EAAS,CACnB,IAAIsH,EAAS,KACb,OAAO5F,GAAkB,WAAa,CACpC,IAAIlB,EAAQ,KACZ,GAAI,CACF,OAAAA,EAAQ,MAAM8G,EAAO,MAAM,KAAI,EAC/B9G,EAAM,YAAY,EAAE,EACpBA,EAAM,UAAU,EAAE,EACXA,EAAM,eAAe,MAAM,QAAQR,CAAO,EAAIA,EAAU,CAACA,CAAO,CAAC,CAChF,QAAgB,CACJQ,GAAS,MACXA,EAAM,MAAK,CAEd,CACF,IACF,CACD,gBAAgB0S,EAAYkI,EAAO,CACjC,GAAIlI,EAAa,GAAKA,GAAc,KAAK,YACvC,MAAO,GAIT,GAAIkI,EAAQ,EACV,MAAO,GAET,IAAI3c,EAAa,KAAK,QAAQyU,CAAU,EAAE,KAC1C,OAAI,KAAK,aAAa,SAASzU,CAAU,GAAK,KAAK,YAAY,SAASA,CAAU,GAAK,KAAK,cAAc,SAASA,CAAU,GAAK,CAACA,EAC1H,GAEF,CAAC,KAAK,YAAYyU,CAAU,CACpC,CACD,iBAAiBA,EAAY,CAC3B,IAAIyc,EACJ,OAAQA,EAAwB,KAAK,QAAQzc,CAAU,EAAE,cAAgB,MAAQyc,IAA0B,OAASA,EAAwB,EAC7I,CACD,YAAYzf,EAAG,CACb,IAAI0f,EAAwBC,EAC5B,OAAO3f,IAAM0f,GAA0BC,EAAoB,KAAK,cAAgB,MAAQA,IAAsB,OAAS,OAASA,EAAkB,WAAW,UAAY,MAAQD,IAA2B,OAASA,EAAyB,EAC/O,CACD,cAAe,CACb,MAAO,EACR,CACD,gBAAgB9iB,EAAO,CAErB,GAAI,KAAK,YAAc,MAAQ,CAACX,EAAU,UAAUW,CAAK,EACvD,MAAO,GAOT,IAAIgjB,EAAiB,KAAK,aAAahjB,EAAM,QAAQ,GAAK,KAAK,aAAaA,EAAM,MAAM,EAMxF,MALI,IAAEgjB,GAAkB,KAAK,WAAW,WAAW,SAAW,GAAKhjB,EAAM,aAAe,KAAK,WAAW,WAAW,QAAUA,EAAM,WAAa,KAAK,WAAW,WAAW,SAKvKA,EAAM,SAAW,KAAK,qBAAuBA,EAAM,UAAY,KAAK,oBAAsB,KAAK,MAAM,KAAO,KAAK,iBAAmBA,EAAM,QAAU,KAAK,oBAAsB,KAAK,MAAM,KAAO,KAAK,gBAI3M,CACD,iBAAiBA,EAAO,CACtB,OAAO,KAAK,YAAc,MAAQA,EAAM,UAAY,MAAQA,EAAM,QAAU,MAAQA,EAAM,UAAY,KAAK,qBAAuBA,EAAM,SAAW,KAAK,oBAAsB,KAAK,MAAM,KAAO,KAAK,iBAAmBA,EAAM,OAAS,KAAK,oBAAsB,KAAK,MAAM,KAAO,KAAK,eAC1R,CACD,iBAAiBF,EAAQ,CACvB,OAAOA,EAAO,MAAME,GAAS,KAAK,gBAAgBA,CAAK,CAAC,CACzD,CACD,kBAAkBF,EAAQ,CACxB,OAAOA,EAAO,MAAME,GAAS,KAAK,iBAAiBA,CAAK,CAAC,CAC1D,CAKD,mBAAoB,CAClB,OAAO,IAAIX,EAAU,KAAM,KAAK,oBAAqB,KAAM,KAAK,oBAAsB,KAAK,MAAM,KAAO,CAAC,CAC1G,CAKD,qBAAsB,CACpB,OAAO,IAAIA,EAAU,KAAM,KAAK,oBAAsB,KAAK,MAAM,KAAM,KAAM,KAAK,oBAAsB,KAAK,MAAM,KAAO,KAAK,mBAAqB,CAAC,CACtJ,CASD,gBAAgB+D,EAAGC,EAAGvhB,EAAM,CAC1B,IAAI6Y,EAAS,KACb,OAAO/F,GAAkB,WAAa,CAEpC,OAAO+F,EAAO,kBAAkB,CAAC,IAAI0E,EAAU+D,EAAGC,EAAGD,EAAGC,CAAC,CAAC,EAAGvhB,CAAI,CAClE,IACF,CAQD,kBAAkBge,EAAQhe,EAAM,CAC9B,IAAI+Y,EAAS,KACb,OAAOjG,GAAkB,WAAa,CACpC,GAAI,CAACiG,EAAO,iBAAiBiF,CAAM,EACjC,MAAM,IAAI,MAAM,qBAAqB,OAAOA,CAAM,CAAC,EAErD,GAAI,CAEF,IAAI8T,EAAY,IAAI,IAIhBgD,EAAgB,GACpBvX,EAAU,YAAYS,EAAQ,CAACsD,EAAGC,IAAM,CACtC,IAAInR,EAAS2I,EAAO,QAAQuI,CAAC,EAE7B,GADAwQ,EAAU,IAAI1hB,CAAM,EAChB0kB,EAAcxT,CAAC,IAAM,OAAW,CAClC,IAAIxK,EAAUiC,EAAO,WAAW,UAAU3I,EAAO,KAAMpQ,EAAM+Y,EAAO,UAAU,QAAQ,EACtF+b,EAAcxT,CAAC,EAAIxK,GAAW,KAAOiC,EAAO,cAAcjC,EAAS1G,EAAO,KAAMA,EAAO,IAAI,EAAI,IAChG,CACD2I,EAAO,kBAAkBuI,EAAGC,EAAGuT,EAAcxT,CAAC,CAAC,CACzD,CAAS,EAGD,IAAI6f,EAAmBpoB,EAAO,sBAC1BqoB,EAAgBpjB,EAAO,IAAIE,GAASX,EAAU,aAAa4jB,EAAkBjjB,CAAK,CAAC,EAAE,OAAOA,GAASA,GAAS,IAAI,EAAE,IAAIA,IAC1H6T,EAAc7T,CAAK,EACZX,EAAU,OAAOW,EAAO,EAAG,EAAEnF,EAAO,oBAAsBA,EAAO,MAAM,KAAK,EACpF,EACD,GAAIqoB,EAAc,OAAS,EAAG,CAC5B,IAAIC,EAAa,IAAI,IAAItoB,EAAO,iBAAiB,EACjDwE,EAAU,YAAY6jB,EAAe,CAACrtB,EAAa8S,IAAa,CACzDwa,EAAW,IAAIxa,CAAQ,GAC1Bwa,EAAW,IAAIxa,EAAU,CACvB,KAAM,IAAI,GAC1B,CAAe,EAEH,IAAIzW,EAAS2I,EAAO,QAAQhF,CAAW,EACnCjD,EAAMuwB,EAAW,IAAIxa,CAAQ,EACjCkL,EAAcjhB,CAAG,EACjB,GAAI,CACF,KAAMmhB,CACP,EAAGnhB,EACAwwB,EAAa,IAAI,IAAIrP,CAAO,EAC5B50B,EAAQ0b,EAAO,WAAW,UAAU3I,EAAO,KAAMpQ,EAAM+Y,EAAO,UAAU,QAAQ,EAChF1b,GAAS,KACXikC,EAAW,IAAIvtB,EAAa,CAC1B,MAAA1W,CAChB,CAAe,EAEDikC,EAAW,OAAOvtB,CAAW,EAE3ButB,EAAW,KAAO,EACpBD,EAAW,IAAIxa,EAAU9hB,GAAcA,GAAc,GAAI+L,CAAG,EAAG,GAAI,CACjE,KAAMwwB,CACP,EAAC,EAEFD,EAAW,OAAOxa,CAAQ,CAExC,CAAW,EACD9N,EAAO,eAAiBsoB,CACzB,CACDtoB,EAAO,cAAc,IAAIva,EAAqBkuB,EAAc,MAAM,OAAO,CAAC,EAC1E,IAAI6U,EAAiBxoB,EAAO,oBACxBunB,EAActiB,EAAO,IAAIE,GAASX,EAAU,aAAagkB,EAAgBrjB,CAAK,CAAC,EAAE,OAAOA,GAASA,GAAS,IAAI,EAClH,GAAIoiB,EAAY,OAAS,EAAG,CAC1B,IAAIkB,EAEAxP,EAAO,MAAMjZ,EAAO,SAASunB,EAAY,IAAIpiB,GAAS,CACxD,IAAIyB,EAAiBE,EACrB,OAAO,IAAItC,EAAU,MAAOoC,EAAkBzB,GAAU,KAA2B,OAASA,EAAM,YAAc,MAAQyB,IAAoB,OAASA,EAAkB,KAAM,MAAOE,EAAgB3B,GAAU,KAA2B,OAASA,EAAM,UAAY,MAAQ2B,IAAkB,OAASA,EAAgB,IAAI,CAC5T,EAAC,EACE4hB,EAAUzP,EAAK,IAAIlhB,GAAO,CAE5B,QADIgvB,EAAS,GACJnjB,EAAI,EAAGA,EAAI5D,EAAO,QAAQ,OAAQ4D,GAAK,EAC9CmjB,EAAO/mB,EAAO,QAAQ4D,CAAC,EAAE,IAAI,EAAI7L,EAAI6L,CAAC,EAExC,OAAAmV,EAAU,QAAQ1hB,GAAU,CAC1B0vB,EAAO1vB,EAAO,IAAI,EAAI2I,EAAO,WAAW,UAAU3I,EAAO,KAAMpQ,EAAM+Y,EAAO,UAAU,QAAQ,CAC5G,CAAa,EACM+mB,CACnB,CAAW,EACGnyB,EAAS,MAAO6zB,EAAoBzoB,EAAO,cAAgB,MAAQyoB,IAAsB,OAAS,OAASA,EAAkB,QAAQC,CAAO,EAChJt8B,EAAI,MAAM,qBAAsB6Y,EAAQ,IAAKhe,EAAM,oBAAqBsgC,EAAa,SAAU3yB,CAAM,CACtG,CAKD4P,EAAU,YAAYS,EAAQ,CAACsD,EAAGC,IAAM,CACtC,IAAImgB,EAAW5M,EAAcxT,CAAC,EAC9ByQ,EAAc2P,CAAQ,EACtB3oB,EAAO,oBAAoBuI,EAAGC,EAAGmgB,CAAQ,CACnD,CAAS,CACF,OAAQhiC,EAAK,CACZyF,EAAI,MAAM,uBAAwB6Y,EAAQhe,EAAMN,CAAG,CAC3D,QAAgB,CACR6d,EAAU,YAAYS,EAAQ,CAACsD,EAAGC,IAAM,CACtCxI,EAAO,kBAAkBuI,EAAGC,CAAC,CACvC,CAAS,CACF,CACF,IACF,CACD,WAAY,CACV,IAAIjJ,EAAc,UAChBqpB,EAAS,KACX,OAAO7uB,GAAkB,WAAa,CACpC,IAAI8uB,EAAQtpB,EAAY,OAAS,GAAKA,EAAY,CAAC,IAAM,OAAYA,EAAY,CAAC,EAAI,GAEtF,GADAnT,EAAI,MAAM,aAAcy8B,EAAO,GAAG,EAC9B,CAACA,EAAM,MAAMC,GAAQ,CACvB,IAAIC,EAAcC,EAClB,OAAOJ,EAAO,gBAAgBpkB,EAAU,UAAUukB,EAAeD,EAAK,UAAY,MAAQC,IAAiB,OAASA,EAAeD,EAAK,GAAIE,EAAYF,EAAK,OAAS,MAAQE,IAAc,OAASA,EAAYF,EAAK,CAAC,CAAC,CAChO,CAAO,EACC,MAAM,IAAI,MAAM,qBAAqB,OAAOD,CAAK,CAAC,EAEpD,GAAI,CACF,IAAIP,EAAa,IAAI,IAAIM,EAAO,iBAAiB,EAGjDC,EAAM,QAAQC,GAAQ,CACpB,IAAIG,EAAeC,EACf,CACF,KAAAjiC,CACD,EAAG6hC,EACAvgB,GAAK0gB,EAAgBH,EAAK,UAAY,MAAQG,IAAkB,OAASA,EAAgBH,EAAK,EAC9FtgB,GAAK0gB,EAAaJ,EAAK,OAAS,MAAQI,IAAe,OAASA,EAAaJ,EAAK,EAClFzxB,EAASuxB,EAAO,QAAQrgB,CAAC,EACzBjkB,EAAQskC,EAAO,WAAW,UAAUvxB,EAAO,KAAMpQ,EAAM2hC,EAAO,UAAU,QAAQ,EAChF7M,EAAgBz3B,GAAS,KAAOskC,EAAO,cAActkC,EAAO+S,EAAO,KAAMA,EAAO,IAAI,EAAI,KAC5FuxB,EAAO,kBAAkBrgB,EAAGC,EAAGuT,CAAa,EAG5C,IAAIqH,EAAawF,EAAO,WAAWpgB,CAAC,EACpC,GAAI4a,GAAc,KAAM,CACjBkF,EAAW,IAAIlF,CAAU,GAC5BkF,EAAW,IAAIlF,EAAY,CACzB,KAAM,IAAI,GAC1B,CAAe,EAEH,IAAI+F,EAAQb,EAAW,IAAIlF,CAAU,EACrCpK,EAAcmQ,CAAK,EACnB,GAAI,CACF,KAAMjQ,CACP,EAAGiQ,EACAZ,EAAa,IAAI,IAAIrP,CAAO,EAC5B50B,GAAS,KACXikC,EAAW,IAAIhgB,EAAG,CAChB,MAAAjkB,CAChB,CAAe,EAEDikC,EAAW,OAAOhgB,CAAC,EAEjBggB,EAAW,KAAO,EACpBD,EAAW,IAAIlF,EAAYp3B,GAAcA,GAAc,GAAIm9B,CAAK,EAAG,GAAI,CACrE,KAAMZ,CACP,EAAC,EAEFD,EAAW,OAAOlF,CAAU,CAE/B,CACX,CAAS,EACDwF,EAAO,eAAiBN,EAGxBM,EAAO,cAAc,IAAInjC,EAAqBkuB,EAAc,MAAM,OAAO,CAAC,EAG1E,IAAIyV,EAAaP,EAAM,OAAO,CAACQ,EAAQP,IAAS,CAC9C,IAAIQ,EAAYC,EACZ/gB,GAAK8gB,EAAaR,EAAK,OAAS,MAAQQ,IAAe,OAASA,EAAaR,EAAK,EACtF,OAAKO,EAAO,IAAI7gB,CAAC,GACf6gB,EAAO,IAAI7gB,EAAG,EAAE,GAEjB+gB,EAAcF,EAAO,IAAI7gB,CAAC,KAAO,MAAQ+gB,IAAgB,QAAkBA,EAAY,KAAKT,CAAI,EAC1FO,CACjB,EAAW,IAAI,GAAK,EACRpkB,EAAST,EAAU,YAAYqkB,EAAM,IAAIC,GAAQ,CACnD,IAAIU,EAAeC,EACnB,OAAOjlB,EAAU,UAAUglB,EAAgBV,EAAK,UAAY,MAAQU,IAAkB,OAASA,EAAgBV,EAAK,GAAIW,EAAaX,EAAK,OAAS,MAAQW,IAAe,OAASA,EAAaX,EAAK,CAAC,CACvM,EAAC,EACEN,EAAiBI,EAAO,oBACxBrB,EAActiB,EAAO,IAAIE,GAASX,EAAU,aAAagkB,EAAgBrjB,CAAK,CAAC,EAAE,OAAOA,GAASA,GAAS,IAAI,EAClH,GAAIoiB,EAAY,OAAS,EAAG,CAC1B,IAAImC,EAEAzQ,EAAO,MAAM2P,EAAO,SAASrB,EAAY,IAAIpiB,IAC/C6T,EAAc7T,CAAK,EACZ,IAAIX,EAAU,KAAMW,EAAM,SAAU,KAAMA,EAAM,MAAM,EAC9D,CAAC,EACEujB,EAAUzP,EAAK,IAAI,CAAClhB,EAAK4xB,IAAc,CAGzC,QAFI7b,EAAW,KACX/G,EAAI4iB,EACCz9B,EAAI,EAAGA,EAAIq7B,EAAY,OAAQr7B,GAAK,EAAG,CAC9C,IAAIiZ,EAAQoiB,EAAYr7B,CAAC,EACzB8sB,EAAc7T,CAAK,EACnB,IAAIykB,EAAgBplB,EAAU,SAAS,CAACW,CAAK,CAAC,EAC9C,GAAI4B,EAAI6iB,EAAe,CACrB5Q,EAAc7T,EAAM,QAAQ,EAC5B2I,EAAW3I,EAAM,SAAW4B,EAC5B,KACD,CACDA,GAAK6iB,CACN,CAED,QADI7C,EAAS,GACJnjB,EAAI,EAAGA,EAAIglB,EAAO,QAAQ,OAAQhlB,GAAK,EAC9CmjB,EAAO6B,EAAO,QAAQhlB,CAAC,EAAE,IAAI,EAAI7L,EAAI6L,CAAC,EAExCoV,EAAclL,CAAQ,EACtB,IAAI+b,EAAWT,EAAW,IAAItb,CAAQ,EACtC,OAAI+b,GAAY,MACdA,EAAS,QAAQf,GAAQ,CACvB,IAAIgB,EACAzyB,EAASuxB,EAAO,SAASkB,EAAgBhB,EAAK,UAAY,MAAQgB,IAAkB,OAASA,EAAgBhB,EAAK,CAAC,EACvH/B,EAAO1vB,EAAO,IAAI,EAAIuxB,EAAO,WAAW,UAAUvxB,EAAO,KAAMyxB,EAAK,KAAMF,EAAO,UAAU,QAAQ,CACnH,CAAe,EAEI7B,CACnB,CAAW,EACD36B,EAAI,KAAK,gCAAiCm7B,CAAW,EACrD,IAAI3yB,EAAS,MAAO80B,EAAoBd,EAAO,cAAgB,MAAQc,IAAsB,OAAS,OAASA,EAAkB,QAAQhB,CAAO,EAChJt8B,EAAI,KAAK,4BAA6Bm7B,EAAa,UAAW3yB,CAAM,CACrE,CAMDi0B,EAAM,QAAQC,GAAQ,CACpB,IAAIiB,EAAeC,EACf,CACF,KAAA/iC,CACD,EAAG6hC,EACAvgB,GAAKwhB,EAAgBjB,EAAK,UAAY,MAAQiB,IAAkB,OAASA,EAAgBjB,EAAK,EAC9FtgB,GAAKwhB,EAAalB,EAAK,OAAS,MAAQkB,IAAe,OAASA,EAAalB,EAAK,EAClFzxB,EAASuxB,EAAO,QAAQrgB,CAAC,EACzBjkB,EAAQskC,EAAO,WAAW,UAAUvxB,EAAO,KAAMpQ,EAAM2hC,EAAO,UAAU,QAAQ,EAChF7M,EAAgBz3B,GAAS,KAAOskC,EAAO,cAActkC,EAAO+S,EAAO,KAAMA,EAAO,IAAI,EAAI,KAC5FuxB,EAAO,oBAAoBrgB,EAAGC,EAAGuT,CAAa,CACxD,CAAS,CACT,QAAgB,CACR8M,EAAM,QAAQC,GAAQ,CACpBF,EAAO,kBAAkBE,EAAK,OAAQA,EAAK,GAAG,CACxD,CAAS,CACF,CACF,IACF,CACD,eAAgB,CACd,IAAImB,EAAS,KACb,OAAOlwB,GAAkB,WAAa,CACpC,GAAIkwB,EAAO,kBAAkB,MAAQ,EACnC,MAAM,IAAI,MAAM,8BAA8B,EAEhD,GAAI,CACF,IAAIC,EAAmBC,EAAuBC,EAC9CH,EAAO,iBAAmB,GAC1B,IAAIvB,EAAU,GACduB,EAAO,kBAAkB,QAAQlyB,GAAO,CACtC,IAAIgvB,EAAS,GACbhvB,EAAI,KAAK,QAAQ,CAACsI,EAAOrF,IAAgB,CACvC,GAAI,CACF,MAAA1W,CACD,EAAG+b,EACAhJ,EAAS4yB,EAAO,QAAQjvB,CAAW,EACvC+rB,EAAO1vB,EAAO,IAAI,EAAI/S,CAClC,CAAW,EACDokC,EAAQ,KAAK3B,CAAM,CAC7B,CAAS,EACD,IAAInyB,EAAS,MAAOs1B,EAAoBD,EAAO,cAAgB,MAAQC,IAAsB,OAAS,OAASA,EAAkB,QAAQxB,CAAO,EAChJt8B,EAAI,MAAM,kBAAmB69B,EAAO,kBAAmB,SAAUr1B,CAAM,EACvEq1B,EAAO,kBAAoB,IAAI,IAC/BA,EAAO,mBAAqB,KAAK,IAAI,IAAKE,GAAyBC,EAAkBH,EAAO,YAAc,MAAQG,IAAoB,OAAS,OAASA,EAAgB,UAAY,MAAQD,IAA0B,OAASA,EAAwB,GAAKF,EAAO,MAAM,IAAI,EAC7QA,EAAO,oBAAsB,GAC7BA,EAAO,cAAc,IAAIxkC,EAAqBkuB,EAAc,MAAM,oBAAoB,CAAC,CAC/F,QAAgB,CACRsW,EAAO,iBAAmB,EAC3B,CACF,IACF,CACD,iBAAiB1hB,EAAGC,EAAG,CACrB,OAAO,KAAK,iBAAiBD,EAAGC,CAAC,CAClC,CACD,OAAOvD,EAAQ,CACb,OAAOlL,GAAkB,WAAa,CACpC,MAAM,IAAI,MAAM,wBAAwB,CACzC,IACF,CACD,eAAewO,EAAGC,EAAGlkB,EAAO,CAC1B,GAAI,CACF,IAAI+lC,EAAW,KAAK,QAAQ9hB,CAAC,EAC7B,YAAK,WAAW,UAAU8hB,EAAS,KAAM/lC,EAAO,KAAK,UAAU,QAAQ,EAChE,EACR,MAAW,CACV,MAAO,EACR,CACF,CACH,CACAH,EAAgBq7B,GAA4B,mBAAoB,CAAC,EACjE,MAAA8K,GAAe9K,GChgDf,SAAS9lB,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQxV,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIsV,EAAOH,EAAItV,CAAG,EAAEG,CAAG,EAAOF,EAAQwV,EAAK,YAAgBtT,EAAO,CAAEF,EAAOE,CAAK,EAAG,MAAS,CAAKsT,EAAK,KAAQzT,EAAQ/B,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKsV,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAU7T,EAASC,EAAQ,CAAE,IAAIqT,EAAMK,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMtV,EAAO,CAAEoV,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,OAAQvV,CAAK,CAAI,CAAC,SAASuV,EAAOlT,EAAK,CAAE+S,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,QAASlT,CAAG,EAAKiT,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAASzV,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CASzX,IAAI0H,GAAMC,EAAI,OAAO,oBAAoB,EAMzC,MAAMk+B,WAA2B/K,EAA2B,CAO1D,YAAYzuB,EAAI8H,EAAO,CACrB,IAAIgJ,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAIjB,GAAU7P,CAAE,EAChGmvB,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACrF,MAAMnvB,EAAI8H,EAAOgJ,EAAWqe,CAAU,EACtC/7B,GAAgB,KAAM,oBAAqB,MAAM,EACjDA,GAAgB,KAAM,mBAAoB,MAAM,EAChDA,GAAgB,KAAM,mBAAoB,MAAM,EAChDA,GAAgB,KAAM,iBAAkB,EAAE,EAC1CA,GAAgB,KAAM,0BAA2Bg8B,EAAQqK,GAA2BA,GAAmG,EAAE,CAAC,EAC1LrmC,GAAgB,KAAM,yBAA0Bg8B,EAAQsK,GAA0BA,GAAgG,EAAE,CAAC,EACrLtmC,GAAgB,KAAM,2BAA4Bg8B,EAAQ,CAACuK,EAA0BC,IAAsB,CACzG,IAAIzyB,EACJ,OAAQA,EAAOyyB,GAAiFD,KAA8B,MAAQxyB,IAAS,OAASA,EAAO,EAChK,EAAC,EACF/T,GAAgB,KAAM,+BAAgCg8B,EAAQ9nB,GAAW,IAAI,IAAIA,EAAQ,IAAI,CAACuyB,EAAG39B,IAAUA,CAAK,CAAC,CAAC,CAAC,EACnH9I,GAAgB,KAAM,4BAA6Bg8B,EAAQ9nB,GAAWA,EAAQ,OAAOhB,GAAUA,EAAO,iBAAiB,CAAC,CAAC,EACzH,KAAK,iBAAmB,GACxB,KAAK,iBAAmB,GACxB,KAAK,eAAiBwB,EAAM,MAC7B,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,QAAU,IAC7B,CACD,IAAI,6BAA8B,CAChC,OAAO,KAAK,MAAM,qBAAuB,IAC1C,CACD,IAAI,wBAAyB,CAC3B,OAAO,KAAK,MAAM,gBAAkB,MAAQ,KAAK,MAAM,MAAQ,IAChE,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,QAAU,IAC7B,CACD,IAAI,2BAA4B,CAC9B,OAAO,KAAK,MAAM,gBAAkB,IACrC,CACD,IAAI,0BAA2B,CAC7B,OAAO,KAAK,MAAM,oBAAsB,IACzC,CACD,IAAI,0BAA2B,CAC7B,OAAO,KAAK,MAAM,oBAAsB,IACzC,CACD,IAAI,cAAe,CACjB,IAAImnB,EACJ,OAAO,KAAK,yBAAyBA,EAAoB,KAAK,eAAiB,MAAQA,IAAsB,OAAS,OAASA,EAAkB,YAAY,CAC9J,CACD,IAAI,aAAc,CAChB,IAAIgE,EACJ,OAAO,KAAK,wBAAwBA,EAAqB,KAAK,eAAiB,MAAQA,IAAuB,OAAS,OAASA,EAAmB,WAAW,CAC/J,CACD,IAAI,eAAgB,CAClB,IAAIC,EACJ,OAAO,KAAK,0BAA0BA,EAAqB,KAAK,eAAiB,MAAQA,IAAuB,OAAS,OAASA,EAAmB,cAAe,KAAK,iBAAiB,CAC3L,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,yBAA0B,CAC5B,OAAO,KAAK,cAAc,MAC3B,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,eAAgB,CAClB,OAAO,KAAK,gBACb,CACD,IAAI,cAAcvO,EAAe,CAE/B,GADAtpB,GAAI,OAAO,oBAAqBspB,EAAe,KAAK,iBAAkBA,IAAkB,KAAK,gBAAgB,EACzG,KAAK,iBAAiB,SAAW,GAAKA,EAAc,SAAW,EAAG,CACpEtpB,GAAI,MAAM,oCAAoC,EAC9C,KAAK,iBAAmBspB,EACxB,MACD,CACD,GAAI,KAAK,mBAAqBA,EAAe,CAC3CtpB,GAAI,MAAM,2BAA2B,EACrC,MACD,CACD,KAAK,kBAAiB,EACtB,KAAK,iBAAmBspB,EACxB,KAAK,MAAM,mBAAmB,CAAC,GAAGA,EAAe,GAAG,KAAK,aAAa,CAAC,EACvE,KAAK,cAAa,CACnB,CACD,IAAI,eAAgB,CAClB,OAAO,KAAK,gBACb,CACD,IAAI,cAAcmK,EAAe,CAE/B,GADAzzB,GAAI,OAAO,oBAAqByzB,EAAe,KAAK,iBAAkBA,IAAkB,KAAK,gBAAgB,EACzG,KAAK,iBAAiB,SAAW,GAAKA,EAAc,SAAW,EAAG,CACpEzzB,GAAI,MAAM,oCAAoC,EAC9C,KAAK,iBAAmByzB,EACxB,MACD,CACD,GAAI,KAAK,mBAAqBA,EAAe,CAC3CzzB,GAAI,MAAM,2BAA2B,EACrC,MACD,CACD,KAAK,kBAAiB,EACtB,KAAK,iBAAmByzB,EACxB,KAAK,MAAM,mBAAmB,CAAC,GAAG,KAAK,cAAe,GAAGA,CAAa,CAAC,EACvE,KAAK,cAAa,CACnB,CACD,oBAAoBxnB,EAAS,CAC3B,KAAK,kBAAoBA,EACzB,KAAK,cAAc,IAAI5S,EAAqBkuB,EAAc,MAAM,cAAe,CAC7E,OAAQ,KAAK,KACd,EAAC,CACH,CACD,IAAI,kBAAmB,CACrB,OAAO,KAAK,0BAA0B,KAAK,OAAO,CACnD,CACD,oBAAqB,CACnB,IAAIxX,EAAQ,KACZ,OAAOpC,GAAkB,WAAa,CACpC,OAAOoC,EAAM,YAAYA,EAAM,gBAAgB,CAChD,IACF,CACD,sBAAuB,CACrB,IAAIQ,EAAS,KACb,OAAO5C,GAAkB,WAAa,CACpC,IAAI,EAAI,MAAM4C,EAAO,MAAM,KAAI,EAC/B,SAAE,YAAY,EAAE,EACT,CACR,IACF,CACD,eAAesZ,EAAY,CACzB,IAAIzW,EAAS,KACb,OAAOzF,GAAkB,WAAa,CACpC3N,GAAI,MAAM,yCAA0C6pB,CAAU,EAE9D,QADI4U,EAAmB,GACd3+B,EAAI,EAAGA,EAAIsT,EAAO,iBAAiB,OAAQtT,GAAK,EAAG,CAC1D,IAAImyB,EAAYpI,EAAW/pB,CAAC,EACxB4+B,EAAkBtrB,EAAO,iBAAiBtT,CAAC,EAC3CyyB,EAAkBnf,EAAO,WAAW,mBAAmBsrB,EAAgB,KAAMzM,CAAS,EAC1FwM,EAAiB,KAAKC,EAAgB,OAAQ,EAAC,GAAGnM,CAAe,CAAC,CACnE,CACD,IAAI/e,EAAI,MAAMJ,EAAO,MAAM,KAAI,EAC/B,OAAAI,EAAE,YAAY,CAAC,GAAGJ,EAAO,eAAgB,GAAGqrB,CAAgB,CAAC,EACtDjrB,CACR,IACF,CACD,IAAI,OAAOpI,EAAQ,CACjB,KAAK,kBAAiB,EACtB,KAAK,MAAM,YAAY,CAAC,GAAG,KAAK,eAAgB,GAAGA,CAAM,CAAC,EAC1D,KAAK,cAAa,CACnB,CACD,IAAI,aAAayvB,EAAc,CAE7B,GADA76B,GAAI,MAAM,mBAAoB66B,CAAY,EACtCA,IAAiB,KAAK,OAU1B,IANA,KAAK,OAASA,EACd,KAAK,oBAAsB,GACvB,KAAK,oBAAsB,MAC7B,KAAK,mBAAmB,SAE1B,KAAK,eAAe,IAAI,EACpBA,GAAgB,KAAM,CACxB,KAAK,cAAc,IAAIxhC,EAAqBkuB,EAAc,MAAM,OAAO,CAAC,EACxE,MACD,CACD,KAAK,mBAAqB7tB,GAAa,eAAe,KAAK,MAAM,eAAemhC,CAAY,EAAGpuB,GAASA,EAAM,MAAO,GACrH,KAAK,mBAAmB,KAAKspB,GAAe,CAC1C,KAAK,mBAAqB,KAC1B,KAAK,eAAeA,CAAW,CACrC,CAAK,EAAE,MAAMx7B,GAAO,CACVb,GAAa,WAAWa,CAAG,IAG/ByF,GAAI,MAAM,iCAAkCzF,CAAG,EAC/C,KAAK,mBAAqB,KAC1B,KAAK,cAAc,IAAIlB,EAAqBkuB,EAAc,MAAM,eAAgB,CAC9E,OAAQhtB,CACT,EAAC,EACR,CAAK,EACF,CACD,IAAI,kBAAmB,CACrB,OAAO,KAAK,MAAM,aACnB,CACD,IAAI,qBAAsB,CACxB,OAAO,KAAK,MAAM,eAAiB,KAAK,wBAA0B,KAAK,iBAAiB,OAAS,CAClG,CACD,aAAaqU,EAAa,CACxB,OAAO,KAAK,6BAA6B,KAAK,OAAO,EAAE,IAAIA,CAAW,CACvE,CACD,QAAS,CACP,IAAI2E,EAAS,KACb,OAAO5F,GAAkB,WAAa,CACpC,OAAO4F,EAAO,MAAM,QACrB,IACF,CACD,iBAAiBtI,EAAQ,CACvB,OAAO,KAAK,MAAM,oBAAoBA,CAAM,CAC7C,CACD,gBAAgBkU,EAAY,CAC1B,IAAIzU,EAAa,KAAK,QAAQyU,CAAU,EAAE,KAC1C,OAAI,KAAK,aAAa,SAASzU,CAAU,GAAK,KAAK,YAAY,SAASA,CAAU,GAAK,KAAK,cAAc,SAASA,CAAU,EACpH,GAEF,CAAC,KAAK,YAAYyU,CAAU,CACpC,CACD,eAAeA,EAAY,CACzB,OAAO,KAAK,cAAc,SAAS,KAAK,QAAQA,CAAU,EAAE,IAAI,CACjE,CACD,OAAOtG,EAAQ,CACb,IAAI8lB,EAA+B,IAAM,MAAM,eAC7CC,EAA+BntB,GAAU,MAAM,eAAiBA,EAChEiC,EAAS,KACX,OAAO/F,GAAkB,WAAa,CACpC,IAAIkxB,EACJ,GAAI,CAACnrB,EAAO,kBAAkBmF,CAAM,EAClC,MAAM,IAAI,MAAM,sBAAsB,OAAOA,CAAM,CAAC,EAEtD+T,EAAclZ,EAAO,UAAU,EAC/B,GAAI,CACF,WAAAorB,CACR,EAAUprB,EAAO,WACX,GAAIorB,EAAW,SAAW,EACxB,MAAM,IAAI,MAAM,kCAAkC,EAEpD,IAAI9C,EAAmBtoB,EAAO,sBAC1BuoB,EAAgBpjB,EAAO,IAAIE,GAASX,EAAU,aAAa4jB,EAAkBjjB,CAAK,CAAC,EAAE,OAAOA,GAASA,GAAS,IAAI,EAAE,IAAIA,IAC1H6T,EAAc7T,CAAK,EACZX,EAAU,OAAOW,EAAO,EAAG,EAAErF,EAAO,oBAAsBA,EAAO,MAAM,KAAK,EACpF,EACD,GAAIuoB,EAAc,OAAS,EAAG,CAE5B,QADIC,EAAa,IAAI,IAAIyC,EAA8B,GAC9C7+B,EAAI,EAAGA,EAAIm8B,EAAc,OAAQn8B,GAAK,EAAG,CAChD,IAAIi/B,EAAe9C,EAAcn8B,CAAC,EAClC8sB,EAAcmS,EAAa,QAAQ,EACnCnS,EAAcmS,EAAa,MAAM,EACjC,QAASpkB,EAAIokB,EAAa,SAAUpkB,GAAKokB,EAAa,OAAQpkB,GAAK,EACjEuhB,EAAW,OAAOvhB,CAAC,CAEtB,CACDikB,EAA6B1C,CAAU,EACvCxoB,EAAO,oBAAsB,GAC7BA,EAAO,cAAc,IAAIra,EAAqBkuB,EAAc,MAAM,oBAAoB,CAAC,EACvF7T,EAAO,cAAc,IAAIra,EAAqBkuB,EAAc,MAAM,OAAO,CAAC,CAC3E,CACD,IAAI6U,EAAiB1oB,EAAO,oBACxBynB,EAActiB,EAAO,IAAIE,GAASX,EAAU,aAAagkB,EAAgBrjB,CAAK,CAAC,EAAE,OAAOA,GAASA,GAAS,IAAI,EAClH,GAAI,EAAAoiB,EAAY,QAAU,GAG1B,IAAI,CAACtO,EAAMmS,CAAW,EAAI,MAAM,QAAQ,IAAI,CAE5CtrB,EAAO,SAASynB,EAAY,IAAIpiB,IAC9B6T,EAAc7T,CAAK,EAEZ+lB,EAAW,IAAIG,GAAa,CACjC,IAAIC,EAAWxrB,EAAO,qBAAqBurB,EAAU,IAAI,EACzD,GAAIC,GAAY,KACd,MAAM,IAAI,MAAM,cAAc,OAAOD,EAAU,KAAM,YAAY,CAAC,EAEpE,OAAO,IAAI7mB,EAAU8mB,EAAUnmB,EAAM,SAAUmmB,EAAUnmB,EAAM,MAAM,CAC/E,CAAS,EACF,EAAE,KAAI,CAAE,EAAGrF,EAAO,MAAM,KAAM,EAAC,EAG5BL,EAAUwZ,EAAK,IAAIlhB,GAAO,CAE5B,QADIwzB,EAAgB,GACX3nB,EAAI,EAAGA,EAAIsnB,EAAW,OAAQtnB,GAAK,EAAG,CAC7C,IAAIvM,EAAS6zB,EAAWtnB,CAAC,EACrBtf,EAAQyT,EAAI6L,CAAC,EACb/E,EAAciB,EAAO,WAAW,mBAAmBzI,EAAO,KAAM/S,CAAK,EACrEknC,EAAUn0B,EAAO,OAAQ,EAAC,GAAGwH,CAAW,EAC5C0sB,EAAc,KAAKC,CAAO,CAC3B,CACD,OAAOD,EAAc,OAAO,CAACE,EAAKC,IAAS,CACzC,IAAIC,EACJ,OAAQA,EAAWF,GAAQ,KAAyB,OAASA,EAAI,IAAIC,CAAI,KAAO,MAAQC,IAAa,OAASA,EAAWD,CACnI,CAAS,CACT,CAAO,EACGl0B,EAASiI,EAAQ,OAAO,CAACgsB,EAAKC,IAAS,CACzC,IAAIE,EACJ,OAAQA,EAAUH,GAAQ,KAAyB,OAASA,EAAI,GAAGC,CAAI,KAAO,MAAQE,IAAY,OAASA,EAAUF,CAC7H,CAAO,EACDN,EAAY,YAAY,CAAC5zB,CAAM,CAAC,EAChC,MAAOyzB,EAAoBnrB,EAAO,cAAgB,MAAQmrB,IAAsB,OAAS,OAASA,EAAkB,YAAYG,CAAW,EAC3IA,EAAY,MAAK,EAClB,IACF,CACD,QAAQ1mB,EAAUrN,EAAQooB,EAAWn7B,EAAOo7B,EAAaC,EAAUC,EAAa,CAC9E,IAAI5f,EAAS,KACb,OAAOjG,GAAkB,WAAa,CACpC,OAAOiG,EAAO,MAAM,QAAQ0E,EAAUrN,EAAQooB,EAAWn7B,EAAOo7B,EAAaC,EAAUC,CAAW,CACnG,IACF,CACD,IAAI,oBAAqB,CACvB,OAAO,KAAK,MAAM,SAAW,IAC9B,CACH,CACA,MAAAiM,GAAetB,GC9Tf,SAASpmC,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAMzX,MAAMonC,WAA2BnY,CAAc,CAC7C,YAAY5iB,EAAI,CACd,IAAI8Q,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAIjB,GAAU7P,CAAE,EACpG,MAAMA,CAAE,EACR5M,GAAgB,KAAM,iBAAkB,MAAM,EAC9C,KAAK,eAAiB0d,CACvB,CACD,IAAI,UAAW,CACb,MAAO,EACR,CACD,IAAI,aAAc,CAChB,MAAO,EACR,CACD,YAAYxK,EAAQU,EAAK,CACvB,MAAO,EACR,CACD,oBAAoBV,EAAQoc,EAAO,CAElC,CACD,IAAI,SAAU,CACZ,OAAO9vB,CACR,CACD,qBAAqB6B,EAAM,CAE1B,CACD,IAAI,qBAAsB,CACxB,OAAO7B,CACR,CACD,IAAI,kBAAmB,CACrB,OAAOA,CACR,CACD,IAAI,2BAA4B,CAC9B,OAAOA,CACR,CACD,IAAI,gBAAiB,CACnB,OAAOA,CACR,CACD,cAAc0T,EAAQU,EAAK,CAE1B,CACD,aAAaV,EAAQU,EAAK,CAEzB,CACD,IAAI,QAAS,CACX,OAAOpU,CACR,CACD,IAAI,OAAO6T,EAAQ,CAElB,CACD,IAAI,WAAY,CACd,OAAO7T,CACR,CACD,IAAI,UAAU06B,EAAW,CAExB,CACD,IAAI,kBAAmB,CACrB,OAAO16B,CACR,CACD,IAAI,WAAY,CACd,OAAO,KAAK,cACb,CACD,IAAI,UAAUke,EAAW,CACvB,KAAK,eAAiBA,CACvB,CACD,cAAcvd,EAAOuW,EAAY/D,EAAY,CAC3C,MAAO,EACR,CACD,IAAI,MAAO,CACT,OAAOnT,CACR,CACD,IAAI,KAAK6W,EAAM,CAEd,CACD,IAAI,eAAgB,CAClB,OAAO7W,CACR,CACD,IAAI,cAAc+xB,EAAe,CAEhC,CACD,IAAI,eAAgB,CAClB,OAAO/xB,CACR,CACD,oBAAoB0U,EAAS,CAE5B,CACD,IAAI,cAAe,CACjB,OAAO,IACR,CACD,IAAI,aAAa+jB,EAAc,CAE9B,CACD,IAAI,cAAe,CACjB,OAAO,IACR,CACD,IAAI,aAAa6K,EAAc,CAE9B,CACD,QAAS,CACP,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,iBAAiB5vB,EAAQ,CACvB,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,uBAAwB,CAC1B,OAAO1T,CACR,CACD,IAAI,sBAAsBi0B,EAAuB,CAEhD,CACD,IAAI,gBAAiB,CACnB,OAAOh0B,EACR,CACD,IAAI,eAAekd,EAAK,CAEvB,CACD,IAAI,iBAAkB,CACpB,MAAO,EACR,CACD,IAAI,gBAAgBiX,EAAO,CAE1B,CACD,IAAI,mBAAoB,CACtB,OAAOn0B,EACR,CACD,eAAgB,CACd,OAAO,QAAQ,SAChB,CACD,YAAYsK,EAAK4W,EAAQzM,EAAS,CAEjC,CACD,SAAS4M,EAAQ,CACf,OAAO,QAAQ,QAAQ,EAAE,CAC1B,CACD,aAAaA,EAAQiiB,EAAgBC,EAAa,CAChD,OAAO,QAAQ,QAAQ,EAAE,CAC1B,CACD,YAAY9uB,EAAS,CACnB,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,OAAO4M,EAAQ,CACb,OAAO,QAAQ,SAChB,CACD,QAAQP,EAAUrN,EAAQooB,EAAWn7B,EAAOo7B,EAAaC,EAAUC,EAAa,CAC9E,OAAO,QAAQ,QAAQ,CAAC,CACzB,CACD,IAAI,oBAAqB,CACvB,OAAOj8B,CACR,CACD,IAAI,mBAAmBq3B,EAAQ,CAE9B,CACD,IAAI,sBAAuB,CACzB,OAAOp3B,EACR,CACD,2BAA2B2nB,EAAYkI,EAAO,CAE7C,CACH,CACA,MAAAsY,GAAeD,GCtKf,SAASpyB,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQxV,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIsV,EAAOH,EAAItV,CAAG,EAAEG,CAAG,EAAOF,EAAQwV,EAAK,YAAgBtT,EAAO,CAAEF,EAAOE,CAAK,EAAG,MAAS,CAAKsT,EAAK,KAAQzT,EAAQ/B,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKsV,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAU7T,EAASC,EAAQ,CAAE,IAAIqT,EAAMK,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMtV,EAAO,CAAEoV,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,OAAQvV,CAAK,CAAI,CAAC,SAASuV,EAAOlT,EAAK,CAAE+S,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,QAASlT,CAAG,EAAKiT,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAASzV,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAMzX,MAAMsnC,WAAsCF,EAAmB,CAM7D,YAAY/6B,EAAIk7B,EAAkB,CAChC,IAAIpqB,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAIjB,GAAU7P,CAAE,EACpG,MAAMA,EAAI8Q,CAAS,EACnB1d,GAAgB,KAAM,mBAAoB,MAAM,EAChD,KAAK,iBAAmB8nC,CACzB,CACD,IAAI,qBAAsB,CACxB,MAAO,EACR,CACD,IAAI,cAAe,CACjB,MAAO,EACR,CACD,cAAc3nC,EAAOuW,EAAY/D,EAAY,CAC3C,MAAO,EACR,CACD,OAAQ,CACN,KAAK,iBAAiB,OACvB,CACD,IAAI,SAAU,CACZ,OAAO,KAAK,iBAAiB,OAC9B,CACD,IAAI,kBAAmB,CACrB,OAAO,KAAK,iBAAiB,UAC9B,CACD,oBAAqB,CACnB,IAAIqF,EAAQ,KACZ,OAAOpC,GAAkB,WAAa,CACpC,OAAOoC,EAAM,iBAAiB,aAC/B,IACF,CACD,sBAAuB,CACrB,IAAIQ,EAAS,KACb,OAAO5C,GAAkB,WAAa,CACpC,OAAO4C,EAAO,iBAAiB,gBAChC,IACF,CACD,eAAesZ,EAAY,CACzB,IAAIzW,EAAS,KACb,OAAOzF,GAAkB,WAAa,CACpC,GAAI,CACF,IAAIlB,EAAQ,MAAM2G,EAAO,iBAAiB,SAASyW,CAAU,EAC7D,GAAIpd,GAAS,KAEX,MAAM,IAAImmB,GAAsB,qBAAqB,EAEvD,OAAOnmB,CACR,OAAQnP,EAAG,CACV,MAAKu1B,GAAwBv1B,CAAC,EAGtBA,EAFA,IAAIs1B,GAAsB,8BAA8B,CAIjE,CACF,IACF,CACH,CACA,MAAAkN,GAAeF,GCxEf,SAAStyB,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQxV,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIsV,EAAOH,EAAItV,CAAG,EAAEG,CAAG,EAAOF,EAAQwV,EAAK,YAAgBtT,EAAO,CAAEF,EAAOE,CAAK,EAAG,MAAS,CAAKsT,EAAK,KAAQzT,EAAQ/B,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKsV,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAU7T,EAASC,EAAQ,CAAE,IAAIqT,EAAMK,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMtV,EAAO,CAAEoV,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,OAAQvV,CAAK,CAAI,CAAC,SAASuV,EAAOlT,EAAK,CAAE+S,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,QAASlT,CAAG,EAAKiT,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAASlO,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAU9H,EAAK,CAAEF,GAAgB8H,EAAQ5H,EAAK8H,EAAO9H,CAAG,CAAC,CAAI,GAAI,OAAO,0BAA4B,OAAO,iBAAiB4H,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAU9H,EAAK,CAAE,OAAO,eAAe4H,EAAQ5H,EAAK,OAAO,yBAAyB8H,EAAQ9H,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAO4H,CAAS,CAC1f,SAAS9H,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAQzX,IAAI0H,GAAMC,EAAI,OAAO,wBAAwB,EAC7C,MAAM8/B,WAA+B3M,EAA2B,CAG9D,YAAYzuB,EAAI8H,EAAO,CACrB,IAAIgJ,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAIjB,GAAU7P,CAAE,EAChGmvB,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACrF,MAAMnvB,EAAI8H,EAAOgJ,EAAWqe,CAAU,EACtC/7B,GAAgB,KAAM,iBAAkB,MAAM,EAC9CA,GAAgB,KAAM,mBAAoBg8B,EAAQ,CAACiM,EAAgBvU,IAAiB,CAAC,GAAGuU,EAAgB,GAAGvU,CAAY,CAAC,CAAC,EACzH1zB,GAAgB,KAAM,wBAAyBg8B,EAAQ,CAACiM,EAAgBC,IAAwB,CAAC,GAAGD,EAAgB,GAAGC,CAAmB,CAAC,CAAC,EAC5IloC,GAAgB,KAAM,+BAAgCg8B,EAAQ,CAAC9nB,EAASi0B,EAAgBF,IAAmB,IAAI,MAAME,GAAmB,KAAoC,OAASA,EAAe,QAAU,EAAIA,EAAiBj0B,GAAS,OAAOuL,GAAK,CAACwoB,EAAe,SAASxoB,CAAC,CAAC,EAAE,IAAI2oB,GAAMl0B,EAAQ,UAAUm0B,GAAMD,EAAG,OAASC,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAC9UroC,GAAgB,KAAM,4BAA6Bg8B,EAAQmM,GAAkB,IAAI,IAAIA,EAAe,IAAIC,GAAM,KAAK,QAAQ,UAAUC,GAAMD,EAAG,OAASC,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAClK,KAAK,eAAiB,CAAC,CACrB,KAAM,kBACN,YAAa,QACb,KAAMryB,EAAW,SAAS,OAC1B,gBAAiBA,EAAW,SAAS,OACrC,kBAAmB,GACnB,WAAY,GACZ,QAAS,GACT,YAAa,aACb,OAAQ,IAAM,CACZ,MAAM,IAAI,MAAM,2CAA2C,CAC5D,EACD,KAAM,IAAM,CACV,MAAM,IAAI,MAAM,qCAAqC,CACtD,EACD,YAAa,IAAM,CACjB,MAAM,IAAI,MAAM,0CAA0C,CAC3D,EACD,eAAgB,IAAM,CACpB,MAAM,IAAI,MAAM,0CAA0C,CAC3D,CACP,CAAK,CACF,CACD,sBAAsB2nB,EAAaC,EAAgB1pB,EAAS,CAC1D,IAAI2f,EAAkB,CAGtB,GAAG,KAAK,MAAM,eAAgB,GAAG3f,EAAQ,OAAOuL,GAAK,CAAC,KAAK,eAAe,SAASA,CAAC,GAAK,CAAC,KAAK,eAAe,SAASA,CAAC,CAAC,CAAC,EAC1H,KAAK,MAAM,YAAYke,EAAaC,EAAgB/J,CAAe,CACpE,CACD,YAAYzP,EAAGC,EAAG,CAChB,IAAInR,EAAS,KAAK,aAAakR,EAAGC,CAAC,EAC/BzQ,EAAM,KAAK,IAAIyQ,CAAC,EACpB,GAAIzQ,GAAO,MAAQV,GAAU,KAAM,CACjC,GAAI,CAACU,EAAI,aAAeV,EAAO,iBAAmB,KAAM,CACtD,IAAIwG,EAAS,KAAK,aAAa0K,EAAGC,CAAC,EACnC,OAAO,KAAK,cAAc3K,EAAQxG,EAAO,gBAAiBA,EAAO,IAAI,CACtE,CAED,GAAIU,EAAI,aAAeA,EAAI,OAASwQ,EAAI,GAAK,KAAK,aAAaA,EAAGC,CAAC,IAAM,MAAQ,KAAK,0BAA0B,KAAK,cAAc,EAAE,IAAID,CAAC,EACxI,MAAO,EAEV,CACD,OAAO,MAAM,YAAYA,EAAGC,CAAC,CAC9B,CACD,mBAAmBzQ,EAAKM,EAAS,CAC/B,GAAI,CACF,WAAAo0B,EACA,YAAAC,EACA,MAAAjZ,CACD,EAAG1b,EACA40B,EAAe,MAAM,mBAAmB50B,EAAKM,CAAO,EACpDu0B,EAAe,IAAI,IAAID,EAAa,IAAI,EAC5C,GAAID,EACF,QAASxgC,EAAI,EAAGA,EAAI,KAAK,eAAe,OAAQA,GAAK,EAAG,CACtD,IAAI7H,EAAM6H,GAAKunB,EAAQ,IAAM,KAAK,eAAe,OAAS,GACtDoZ,EAAWD,EAAa,IAAIvoC,CAAG,EAC/BwoC,GAAY,KACdzgC,GAAI,KAAK,sCAAuCF,EAAGunB,EAAOpvB,EAAK0T,CAAG,EAElE60B,EAAa,IAAI1gC,EAAG2gC,CAAQ,CAE/B,CAEH,OAAO7gC,GAAcA,GAAc,CAAE,EAAE2gC,CAAY,EAAG,GAAI,CACxD,KAAMC,EACN,WAAAH,EACA,YAAAC,EACA,MAAAjZ,CACN,CAAK,CACF,CACD,SAASxO,EAAQiiB,EAAgBC,EAAa,CAC5C,IAAIhrB,EAAQ,KACZ,OAAOpC,GAAkB,WAAa,CACpC,IAAI+yB,EAAuBpI,EAC3B1L,EAAc7c,EAAM,QAAQ,EAC5B6c,EAAc7c,EAAM,YAAY,EAChC,IAAI9D,GAAWy0B,EAAwB3wB,EAAM,SAAS,WAAa,MAAQ2wB,IAA0B,OAASA,EAAwB3wB,EAAM,QACxIvH,EAAS,GACTsyB,GAAkB,MAAQA,GAC5BtyB,EAAO,KAAKyD,EAAQ,IAAIuL,GAAKA,EAAE,IAAI,CAAC,EAGtC,QADImpB,EAAgB,IAAIvoB,EAAU,GAAIkgB,EAAqBvoB,EAAM,gBAAkB,MAAQuoB,IAAuB,OAAS,OAASA,EAAmB,OAAQrsB,EAAQ,OAAQ8D,EAAM,aAAa,OAASA,EAAM,aAAa,KAAK,MAAM,EAChOjQ,EAAI,EAAGA,EAAI+Y,EAAO,OAAQ/Y,GAAK,EAAG,CACzC,IAAI8gC,EAAexoB,EAAU,aAAauoB,EAAe9nB,EAAO/Y,CAAC,CAAC,EAClE8sB,EAAcgU,CAAY,EAC1BhU,EAAcgU,EAAa,QAAQ,EACnChU,EAAcgU,EAAa,MAAM,EACjC,QAASjmB,EAAIimB,EAAa,SAAUjmB,GAAKimB,EAAa,OAAQjmB,GAAK,EAAG,CACpE,IAAIkmB,EAAY,GACZC,EAAc/wB,EAAM,aAAa,KAAK4K,EAAI5K,EAAM,aAAa,MAAM,EACvE6c,EAAcgU,EAAa,WAAW,EACtChU,EAAcgU,EAAa,SAAS,EACpC,QAAS,EAAIA,EAAa,YAAa,GAAKA,EAAa,UAAW,GAAK,EAAG,CAC1E,IAAIG,EACJnU,EAAcmO,CAAW,EACzB8F,EAAU,KAAK9F,GAAagG,EAAwBD,EAAY,KAAK,IAAI,CAAC,KAAO,MAAQC,IAA0B,OAAS,OAASA,EAAsB,MAAOhxB,EAAM,QAAQ,CAAC,CAAC,CAAC,CACpL,CACDvH,EAAO,KAAKq4B,CAAS,CACtB,CACF,CACD,OAAOr4B,CACR,IACF,CACD,IAAI,SAAU,CACZ,OAAO,KAAK,iBAAiB,KAAK,eAAgB,MAAM,OAAO,CAChE,CACD,IAAI,gBAAiB,CACnB,OAAO,KAAK,sBAAsB,KAAK,eAAgB,KAAK,MAAM,cAAc,CACjF,CACD,cAAcyC,EAAQU,EAAK,CACzB,GAAIV,GAAU,KAAK,eAAe,OAChC,MAAO,CACL,OAAAA,EACA,IAAAU,CACR,EAEI,IAAI0b,EAAQ,KAAK,YAAY1b,CAAG,EAChC,MAAO,CACL,OAAQV,EAASoc,EACjB,IAAA1b,CACN,CACG,CACD,aAAaV,EAAQU,EAAK,CACxB,GAAIV,GAAU,KAAK,eAAe,OAChC,OAAO,MAAM,aAAaA,EAAQU,CAAG,EAEvC,IAAI0b,EAAQ,KAAK,YAAY1b,CAAG,EAChC,OAAO,KAAK,QAAQV,EAASoc,CAAK,CACnC,CACD,oBAAoBpc,EAAQ,CAC1B,OAAIA,GAAU,KAAK,eAAe,OACzB,MAAM,oBAAoBA,CAAM,EAIlC,CAAC,KAAK,eAAe,OAAQ,KAAK,eAAe,MAAM,CAC/D,CACD,IAAI,mBAAoB,CACtB,MAAO,EACR,CACD,IAAI,sBAAuB,CACzB,OAAO,KAAK,MAAM,YAAc,MACjC,CACD,IAAI,yBAA0B,CAC5B,MAAO,EACR,CACD,IAAI,2BAA4B,CAC9B,MAAO,EACR,CACD,IAAI,cAAe,CACjB,MAAO,EACR,CACD,aAAa2D,EAAa,CACxB,OAAO,KAAK,6BAA6B,KAAK,QAAS,KAAK,eAAgB,KAAK,cAAc,EAAE,IAAIA,CAAW,CACjH,CACD,gBAAgB3D,EAAQ,CACtB,OAAOA,GAAU,KAAK,eAAe,MACtC,CACD,gBAAgBmR,EAAG,CACjB,IAAI4kB,EACAr1B,EAAM,KAAK,IAAIyQ,CAAC,EACpB,OAAQ4kB,EAAmBr1B,GAAQ,KAAyB,OAASA,EAAI,eAAiB,MAAQq1B,IAAqB,OAASA,EAAmB,EACpJ,CACD,cAAc5kB,EAAG,CACf,IAAI6kB,EACAt1B,EAAM,KAAK,IAAIyQ,CAAC,EACpB,OAAQ6kB,EAAkBt1B,GAAQ,KAAyB,OAASA,EAAI,cAAgB,MAAQs1B,IAAoB,OAASA,EAAkB,EAChJ,CACD,eAAe7kB,EAAGikB,EAAY,CAC5B,IAAIa,EAAoB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACxF,KAAK,qBACP,KAAK,MAAM,YAAY9kB,EAAGikB,EAAYa,CAAiB,EAEvD,KAAK,MAAM,YAAY9kB,EAAGikB,CAAU,CAEvC,CACD,WAAY,CACN,KAAK,MAAM,WACb,KAAK,MAAM,WAEd,CACD,aAAc,CACR,KAAK,MAAM,aACb,KAAK,MAAM,aAEd,CACD,YAAYjkB,EAAG,CACb,IAAI+kB,EACAx1B,EAAM,KAAK,IAAIyQ,CAAC,EACpB,QAAS+kB,EAAax1B,GAAQ,KAAyB,OAASA,EAAI,SAAW,MAAQw1B,IAAe,OAASA,EAAa,GAAK,CAClI,CACD,oBAAoBl1B,EAAS,CAC3B,GAAIA,EAAQ,OAAS,EACnB,MAAM,IAAI,MAAM,uCAAuC,CAE1D,CACH,CACA,MAAAm1B,GAAerB,GCjOf,SAASzyB,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQxV,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIsV,EAAOH,EAAItV,CAAG,EAAEG,CAAG,EAAOF,EAAQwV,EAAK,YAAgBtT,EAAO,CAAEF,EAAOE,CAAK,EAAG,MAAS,CAAKsT,EAAK,KAAQzT,EAAQ/B,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKsV,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAU7T,EAASC,EAAQ,CAAE,IAAIqT,EAAMK,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMtV,EAAO,CAAEoV,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,OAAQvV,CAAK,CAAI,CAAC,SAASuV,EAAOlT,EAAK,CAAE+S,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,QAASlT,CAAG,EAAKiT,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAASzV,EAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,GAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,GAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAM,CAC5O,SAASG,GAAeC,EAAK,CAAE,IAAIH,EAAMI,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAASI,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAazX,IAAI0H,GAAMC,EAAI,OAAO,oBAAoB,EACzC,SAASohC,GAAU18B,EAAI8H,EAAOgJ,EAAWqe,EAAY,CACnD,OAAI/lB,EAAW,YAAYtB,CAAK,EACvB,IAAIszB,GAAuBp7B,EAAI8H,EAAOgJ,CAAS,EAEpD1H,EAAW,mBAAmBtB,CAAK,EAC9B,IAAImzB,GAA8Bj7B,EAAI8H,EAAOgJ,CAAS,EAExD,IAAI0oB,GAAmBx5B,EAAI8H,EAAOgJ,EAAWqe,CAAU,CAChE,CAMA,MAAMwN,WAA2B/Z,CAAc,CAQ7C,YAAY5iB,EAAI8H,EAAO,CACrB,IAAIsD,EACA0F,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAIjB,GAAU7P,CAAE,EAChGmvB,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACrF,MAAMnvB,CAAE,EACRoL,EAAQ,KACRhY,EAAgB,KAAM,KAAM,MAAM,EAClCA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,QAAS,MAAM,EACrCA,EAAgB,KAAM,eAAgB,MAAM,EAC5CA,EAAgB,KAAM,SAAU,MAAM,EACtCA,EAAgB,KAAM,YAAa,MAAM,EACzCA,EAAgB,KAAM,iBAAkB,MAAM,EAC9CA,EAAgB,KAAM,kBAAmB,MAAM,EAC/CA,EAAgB,KAAM,cAAe,UAAY,CAC/C,OAAOgY,EAAM,MAAM,YAAY,GAAG,SAAS,CACjD,CAAK,EACDhY,EAAgB,KAAM,wBAAyB,UAAY,CACzD,OAAOgY,EAAM,MAAM,sBAAsB,GAAG,SAAS,CAC3D,CAAK,EACDhY,EAAgB,KAAM,mBAAoB,UAAY,CACpD,OAAOgY,EAAM,MAAM,iBAAiB,GAAG,SAAS,CACtD,CAAK,EACDhY,EAAgB,KAAM,eAAgB,UAAY,CAChD,OAAOgY,EAAM,MAAM,aAAa,GAAG,SAAS,CAClD,CAAK,EACDhY,EAAgB,KAAM,yBAA0B,UAAY,CAC1D,OAAOgY,EAAM,MAAM,uBAAuB,GAAG,SAAS,CAC5D,CAAK,EACDhY,EAAgB,KAAM,sBAAuB,UAAY,CACvD,OAAOgY,EAAM,MAAM,oBAAoB,GAAG,SAAS,CACzD,CAAK,EACDhY,EAAgB,KAAM,uBAAwB,UAAY,CACxD,OAAOgY,EAAM,MAAM,qBAAqB,GAAG,SAAS,CAC1D,CAAK,EACDhY,EAAgB,KAAM,mBAAoB,UAAY,CACpD,OAAOgY,EAAM,MAAM,iBAAiB,GAAG,SAAS,CACtD,CAAK,EACDhY,EAAgB,KAAM,mBAAoB,UAAY,CACpD,OAAOgY,EAAM,MAAM,iBAAiB,GAAG,SAAS,CACtD,CAAK,EACDhY,EAAgB,KAAM,eAAgB,UAAY,CAChD,OAAOgY,EAAM,MAAM,aAAa,GAAG,SAAS,CAClD,CAAK,EACDhY,EAAgB,KAAM,kBAAmB,UAAY,CACnD,OAAOgY,EAAM,MAAM,gBAAgB,GAAG,SAAS,CACrD,CAAK,EACDhY,EAAgB,KAAM,kBAAmB,UAAY,CACnD,OAAImgB,GAAsBnI,EAAM,KAAK,EAC5BA,EAAM,MAAM,gBAAgB,GAAG,SAAS,EAE1C,EACb,CAAK,EACDhY,EAAgB,KAAM,gBAAiB,UAAY,CACjD,OAAImgB,GAAsBnI,EAAM,KAAK,EAC5BA,EAAM,MAAM,cAAc,GAAG,SAAS,EAExC,EACb,CAAK,EACDhY,EAAgB,KAAM,iBAAkB,UAAY,CAClD,GAAImgB,GAAsBnI,EAAM,KAAK,EACnC,OAAOA,EAAM,MAAM,eAAe,GAAG,SAAS,EAEhD,MAAM,MAAM,8DAA8D,CAChF,CAAK,EACDhY,EAAgB,KAAM,YAAa,IAAM,CACvC,GAAImgB,GAAsB,KAAK,KAAK,EAClC,OAAO,KAAK,MAAM,YAEpB,MAAM,MAAM,yDAAyD,CAC3E,CAAK,EACDngB,EAAgB,KAAM,cAAe,IAAM,CACzC,GAAImgB,GAAsB,KAAK,KAAK,EAClC,OAAO,KAAK,MAAM,cAEpB,MAAM,MAAM,2DAA2D,CAC7E,CAAK,EACDngB,EAAgB,KAAM,cAAe,UAAY,CAC/C,OAAImgB,GAAsBnI,EAAM,KAAK,EAC5BA,EAAM,MAAM,YAAY,GAAG,SAAS,EAEtC,CAEb,CAAK,EACDhY,EAAgB,KAAM,uBAAwB,UAAY,CACxD,OAAOgY,EAAM,MAAM,qBAAqB,GAAG,SAAS,CAC1D,CAAK,EACDhY,EAAgB,KAAM,6BAA8B,UAAY,CAC9D,OAAOgY,EAAM,MAAM,2BAA2B,GAAG,SAAS,CAChE,CAAK,EACDhY,EAAgB,KAAM,gBAAiB,UAAY,CACjD,OAAOgY,EAAM,MAAM,cAAc,GAAG,SAAS,CACnD,CAAK,EACDhY,EAAgB,KAAM,sBAAuB,UAAY,CACvD,OAAOgY,EAAM,MAAM,oBAAoB,GAAG,SAAS,CACzD,CAAK,EACDhY,EAAgB,KAAM,gBAAiB,UAAY,CACjD,OAAOgY,EAAM,MAAM,cAAc,GAAG,SAAS,CACnD,CAAK,EACDhY,EAAgB,KAAM,eAAgB,UAAY,CAChD,OAAOgY,EAAM,MAAM,aAAa,GAAG,SAAS,CAClD,CAAK,EACDhY,EAAgB,KAAM,oBAAqB,UAAY,CACrD,OAAOgY,EAAM,MAAM,kBAAkB,GAAG,SAAS,CACvD,CAAK,EACDhY,EAAgB,KAAM,wBAAyB,UAAY,CACzD,OAAOgY,EAAM,MAAM,sBAAsB,GAAG,SAAS,CAC3D,CAAK,EACDhY,EAAgB,KAAM,gBAAiB,UAAY,CACjD,OAAOgY,EAAM,MAAM,cAAc,GAAG,SAAS,CACnD,CAAK,EACDhY,EAAgB,KAAM,kBAAmB,UAAY,CACnD,OAAIggB,GAAoBhI,EAAM,KAAK,EAC1BA,EAAM,MAAM,gBAAgB,GAAG,SAAS,EAE1C,EACb,CAAK,EACDhY,EAAgB,KAAM,eAAgB,UAAY,CAChD,OAAOgY,EAAM,MAAM,aAAa,GAAG,SAAS,CAClD,CAAK,EACDhY,EAAgB,KAAM,cAAe,CAAC+J,EAAK4W,EAAQzM,IAAY,CAC7D,KAAK,gBAAkB,CACrB,IAAAnK,EACA,OAAA4W,EACA,QAAAzM,CACR,EACM,KAAK,MAAM,YAAYnK,EAAK4W,EAAQzM,CAAO,CACjD,CAAK,EACDlU,EAAgB,KAAM,WAAY,UAAY,CAC5C,OAAOgY,EAAM,MAAM,SAAS,GAAG,SAAS,CAC9C,CAAK,EACDhY,EAAgB,KAAM,eAAgB,UAAY,CAChD,OAAOgY,EAAM,MAAM,aAAa,GAAG,SAAS,CAClD,CAAK,EACDhY,EAAgB,KAAM,cAAe,UAAY,CAC/C,OAAOgY,EAAM,MAAM,YAAY,GAAG,SAAS,CACjD,CAAK,EACDhY,EAAgB,KAAM,mBAAoB,UAAY,CACpD,OAAIggB,GAAoBhI,EAAM,KAAK,EAC1BA,EAAM,MAAM,iBAAiB,GAAG,SAAS,EAE3C,EACb,CAAK,EACDhY,EAAgB,KAAM,kBAAmB,UAAY,CACnD,OAAIggB,GAAoBhI,EAAM,KAAK,EAC1BA,EAAM,MAAM,gBAAgB,GAAG,SAAS,EAE1C,QAAQ,OAAO,IAAI,MAAM,uBAAuB,CAAC,CAC9D,CAAK,EACDhY,EAAgB,KAAM,oBAAqB,UAAY,CACrD,OAAIggB,GAAoBhI,EAAM,KAAK,EAC1BA,EAAM,MAAM,kBAAkB,GAAG,SAAS,EAE5C,QAAQ,OAAO,IAAI,MAAM,uBAAuB,CAAC,CAC9D,CAAK,EACDhY,EAAgB,KAAM,YAAa,UAAY,CAC7C,OAAIggB,GAAoBhI,EAAM,KAAK,EAC1BA,EAAM,MAAM,UAAU,GAAG,SAAS,EAEpC,QAAQ,SACrB,CAAK,EACDhY,EAAgB,KAAM,iBAAkB,UAAY,CAClD,OAAIggB,GAAoBhI,EAAM,KAAK,EAC1BA,EAAM,MAAM,eAAe,GAAG,SAAS,EAEzC,EACb,CAAK,EACDhY,EAAgB,KAAM,SAAU,UAAY,CAC1C,OAAOgY,EAAM,MAAM,OAAO,GAAG,SAAS,CAC5C,CAAK,EACDhY,EAAgB,KAAM,gBAAiB,UAAY,CACjD,OAAOgY,EAAM,MAAM,cAAc,GAAG,SAAS,CACnD,CAAK,EACD,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,IAAIiI,EAAQqpB,GAAU18B,EAAI8H,EAAOgJ,EAAWqe,CAAU,EACtD,KAAK,GAAKnvB,EACV,KAAK,cAAgBqT,EACrB,KAAK,MAAQA,EACb,KAAK,aAAe,KACpB,KAAK,OAAS,KACd,KAAK,UAAY,KACjB,KAAK,eAAiB,EACvB,CACD,OAAQ,CACN,KAAK,cAAc,QACf,KAAK,QAAU,KAAK,eACtB,KAAK,MAAM,QAET,KAAK,cAAgB,MACvB,KAAK,aAAa,QAErB,CACD,iBAAiB9b,EAAO,CACtB8D,GAAI,OAAO,mBAAoB9D,CAAK,EACpC,GAAI,CACF,OAAAqlC,EACA,KAAAt8B,CACD,EAAG/I,EACJ,KAAK,cAAc,IAAI7C,EAAqB4L,EAAM,CAChD,OAAAs8B,CACD,EAAC,CACH,CACD,SAASvpB,EAAO,CACdhY,GAAI,MAAM,WAAYgY,CAAK,EAC3B,IAAIwpB,EAAW,KAAK,MAChB,CACF,QAASC,CACV,EAAGD,EAQJ,GAPIA,IAAa,KAAK,eACpBA,EAAS,MAAK,EAEhB,KAAK,MAAQxpB,EACT,KAAK,cAAgB,GACvB,KAAK,aAAaA,CAAK,EAErBypB,IAAezpB,EAAM,QACvB,KAAK,cAAc,IAAI3e,EAAqBkuB,EAAc,MAAM,gBAAiB,CAC/E,OAAQvP,EAAM,OACf,EAAC,UACO,KAAK,iBAAmB,KAAM,CAEvC,GAAI,CACF,IAAAlW,EACA,OAAA4W,EACA,QAAAzM,CACR,EAAU,KAAK,gBACT+L,EAAM,YAAYlW,EAAK4W,EAAQzM,CAAO,CACvC,CACGknB,GAA6Bnb,CAAK,GACpC,KAAK,cAAc,IAAI3e,EAAqBkuB,EAAc,MAAM,cAAe,CAC7E,OAAQvP,EAAM,KACf,EAAC,CAEL,CACD,aAAa0pB,EAAc,CACzB1hC,GAAI,OAAO,cAAc,EACrB,KAAK,cACP,KAAK,aAAa,SAEhB,KAAK,cAAgB,GACvB,KAAK,gBAAgB,KAAK,KAAK,EAEjC,KAAK,aAAetG,GAAa,eAAegoC,EAAc1pB,GAASA,EAAM,MAAK,CAAE,EACpF,KAAK,aAAa,KAAKA,GAAS,CAC9B,KAAK,aAAe,KACpB,KAAK,SAASA,CAAK,CACzB,CAAK,EAAE,MAAMzd,GAAO,CACd,GAAIb,GAAa,WAAWa,CAAG,EAAG,CAChCyF,GAAI,OAAO,wBAAwB,EACnC,MACD,CACDA,GAAI,MAAM,2BAA4BzF,CAAG,EACzC,KAAK,aAAe,KACpB,KAAK,cAAc,IAAIlB,EAAqBkuB,EAAc,MAAM,eAAgB,CAC9E,OAAQhtB,CACT,EAAC,CACR,CAAK,CACF,CACD,gBAAiB,CACf,MAAM,eAAc,EACpB,KAAK,aAAa,KAAK,KAAK,CAC7B,CACD,eAAgB,CACd,MAAM,cAAa,EACnB,KAAK,gBAAgB,KAAK,KAAK,CAChC,CACD,aAAayd,EAAO,CAElB,QADI2pB,EAAS,OAAO,KAAKpa,EAAc,KAAK,EACnCznB,EAAI,EAAGA,EAAI6hC,EAAO,OAAQ7hC,GAAK,EAGtCkY,EAAM,iBAAiB2pB,EAAO7hC,CAAC,EAAG,KAAK,gBAAgB,CAE1D,CACD,gBAAgBkY,EAAO,CAErB,QADI2pB,EAAS,OAAO,KAAKpa,EAAc,KAAK,EACnCznB,EAAI,EAAGA,EAAI6hC,EAAO,OAAQ7hC,GAAK,EAGtCkY,EAAM,oBAAoB2pB,EAAO7hC,CAAC,EAAG,KAAK,gBAAgB,CAE7D,CACD,IAAI,UAAW,CACb,OAAO,KAAK,MAAM,QACnB,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,qBAAsB,CACxB,OAAO,KAAK,MAAM,mBACnB,CACD,IAAI,wBAAyB,CAC3B,OAAO,KAAK,MAAM,sBACnB,CACD,IAAI,yBAA0B,CAC5B,OAAO,KAAK,MAAM,uBACnB,CACD,IAAI,0BAA2B,CAC7B,OAAO,KAAK,MAAM,wBACnB,CACD,eAAeqc,EAAG,CAChB,OAAO,KAAK,MAAM,eAAeA,CAAC,CACnC,CACD,iBAAiBtb,EAAO,CACtB,OAAO,KAAK,MAAM,iBAAiBA,CAAK,CACzC,CACD,IAAI,mBAAoB,CACtB,OAAIqX,GAAsB,KAAK,KAAK,EAC3B,KAAK,MAAM,kBAEb,EACR,CACD,IAAI,sBAAuB,CACzB,GAAIA,GAAsB,KAAK,KAAK,EAAG,CACrC,IAAI0pB,EACJ,OAAQA,EAAwB,KAAK,MAAM,wBAA0B,MAAQA,IAA0B,OAASA,EAAwB,EACzI,CACD,MAAO,EACR,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,iBACnB,CACD,IAAI,6BAA8B,CAChC,OAAO,KAAK,MAAM,2BACnB,CACD,IAAI,wBAAyB,CAC3B,OAAO,KAAK,MAAM,sBACnB,CACD,IAAI,0BAA2B,CAC7B,OAAO,KAAK,MAAM,0BAElB,EAAE,KAAK,2BAA6B,KAAK,sBAAsB,OAAS,EACzE,CACD,IAAI,0BAA2B,CAC7B,OAAO,KAAK,MAAM,wBACnB,CACD,IAAI,yBAA0B,CAC5B,OAAO,KAAK,MAAM,uBACnB,CACD,IAAI,mBAAoB,CACtB,OAAQ,KAAK,cAAc,mBAAqB,KAAK,QAAU,OAAS,KAAK,eAAe,SAAW,CACxG,CACD,IAAI,2BAA4B,CAC9B,OAAQ,KAAK,cAAc,2BAA6B,KAAK,eAAe,OAAS,IAAM,KAAK,QAAU,IAC3G,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,iBACnB,CACD,IAAI,cAAe,CACjB,OAAO,KAAK,MAAM,YACnB,CACD,IAAI,SAAU,CACZ,OAAO,KAAK,MAAM,OACnB,CACD,IAAI,qBAAsB,CACxB,OAAO,KAAK,MAAM,mBACnB,CACD,IAAI,kBAAmB,CACrB,OAAO,KAAK,MAAM,gBACnB,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,cAAe,CACjB,OAAO,KAAK,MAAM,YACnB,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,eAAgB,CAClB,OAAO,KAAK,MAAM,aACnB,CACD,IAAI,oBAAqB,CACvB,OAAO,KAAK,MAAM,kBACnB,CACD,IAAI,mBAAmBhT,EAAQ,CAC7B,KAAK,MAAM,mBAAqBA,CACjC,CACD,IAAI,2BAA4B,CAC9B,OAAO,KAAK,MAAM,yBACnB,CACD,IAAI,sBAAuB,CACzB,OAAO,KAAK,MAAM,oBACnB,CACD,IAAI,sBAAuB,CACzB,OAAO,KAAK,MAAM,oBACnB,CACD,oBAAoB3iB,EAAS,CAC3B,OAAO,KAAK,MAAM,oBAAoBA,CAAO,CAC9C,CACD,IAAI,iBAAkB,CACpB,OAAO,KAAK,cAAc,OAC3B,CACD,IAAI,gBAAiB,CACnB,OAAO,KAAK,MAAM,cACnB,CACD,IAAI,kBAAmB,CACrB,OAAKmc,EAA+B,KAAK,aAAa,EAG/C,KAAK,cAAc,iBAFjB,EAGV,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,QAAS,CACX,OAAO,KAAK,MAAM,MACnB,CACD,IAAI,OAAOhd,EAAQ,CACjB,KAAK,MAAM,OAASA,CACrB,CACD,IAAI,iBAAkB,CACpB,MAAI,CAACgd,EAA+B,KAAK,aAAa,GAAK,CAAC,KAAK,cAAc,oBACtE,KAEF,KAAK,SACb,CACD,IAAI,gBAAgBmI,EAAiB,CACnC,GAAI,CAAC,KAAK,oBACR,MAAM,IAAI,MAAM,8BAA8B,EAEhDvwB,GAAI,MAAM,sBAAuBuwB,CAAe,EAChD,KAAK,UAAYA,EACjB,IAAImR,EAAe,QAAQ,QAAQ,KAAK,aAAa,EACjDnR,GAAmB,MAAQnI,EAA+B,KAAK,aAAa,IAC1EmI,EAAgB,OAAS,OAC3BmR,EAAe,KAAK,cAAc,mBAAoB,EAAC,KAAKj1B,GAAS40B,GAAU,KAAK,GAAI50B,EAAO,KAAK,SAAS,CAAC,EACrG8jB,EAAgB,OAAS,SAClCmR,EAAe,KAAK,cAAc,qBAAsB,EAAC,KAAKj1B,GAAS40B,GAAU,KAAK,GAAI50B,EAAO,KAAK,SAAS,CAAC,EAEhHi1B,EAAe,KAAK,cAAc,eAAenR,EAAgB,UAAU,EAAE,KAAK9jB,GAAS40B,GAAU,KAAK,GAAI50B,EAAO,KAAK,SAAS,CAAC,GAGxI,KAAK,aAAai1B,CAAY,CAC/B,CACD,oBAAqB,CACnB,GAAI,CAACtZ,EAA+B,KAAK,aAAa,EACpD,MAAM,IAAI,MAAM,8BAA8B,EAEhD,OAAO,KAAK,cAAc,oBAC3B,CACD,sBAAuB,CACrB,GAAI,CAACA,EAA+B,KAAK,aAAa,EACpD,MAAM,IAAI,MAAM,8BAA8B,EAEhD,OAAO,KAAK,cAAc,sBAC3B,CACD,eAAeyB,EAAY,CACzB,GAAI,CAACzB,EAA+B,KAAK,aAAa,EACpD,MAAM,IAAI,MAAM,8BAA8B,EAEhD,OAAO,KAAK,cAAc,eAAeyB,CAAU,CACpD,CACD,IAAI,WAAY,CACd,OAAO,KAAK,MAAM,SACnB,CACD,IAAI,UAAUpU,EAAW,CACvB,KAAK,MAAM,UAAYA,CACxB,CACD,IAAI,MAAO,CACT,OAAO,KAAK,MAAM,IACnB,CACD,IAAI,KAAKrH,EAAM,CACb,KAAK,MAAM,KAAOA,CACnB,CACD,IAAI,eAAgB,CAClB,OAAO,KAAK,MAAM,aACnB,CACD,IAAI,cAAckb,EAAe,CAC/B,KAAK,MAAM,cAAgBA,CAC5B,CACD,IAAI,eAAgB,CAClB,OAAO,KAAK,MAAM,aACnB,CACD,IAAI,cAAcmK,EAAe,CAC/B,KAAK,MAAM,cAAgBA,CAC5B,CACD,IAAI,cAAe,CACjB,OAAO,KAAK,MACb,CACD,IAAI,aAAazD,EAAc,CAE7B,GADAhwB,GAAI,MAAM,mBAAoBgwB,CAAY,EACtC,CAAC,KAAK,kBACR,MAAM,IAAI,MAAM,+BAA+B,EAKjD,GAAI,CAAA6R,GAAU7R,EAAc,KAAK,MAAM,EAGvC,MAAK,OAASA,EACd,IAAI0R,EAAe,QAAQ,QAAQ,KAAK,aAAa,EACjDvO,GAA6B,KAAK,aAAa,GAAKnD,GAAgB,OACtE0R,EAAe,KAAK,cAAc,MAAM,OAAO1R,CAAY,EAAE,KAAKvjB,GAAS40B,GAAU,KAAK,GAAI50B,EAAO,KAAK,SAAS,CAAC,GAEtH,KAAK,aAAai1B,CAAY,EAC/B,CACD,IAAI,uBAAwB,CAC1B,OAAO,KAAK,cACb,CACD,IAAI,sBAAsB/3B,EAAa,CAErC,GADA3J,GAAI,MAAM,4BAA6B2J,CAAW,EAC9C,CAAC,KAAK,0BACR,MAAM,IAAI,MAAM,kCAAkC,EAEpD,GAAIA,IAAgB,KAAK,uBAAyBA,EAAY,SAAW,GAAK,KAAK,sBAAsB,SAAW,EAAG,CACrH3J,GAAI,MAAM,oCAAqC2J,CAAW,EAC1D,MACD,CACD,KAAK,eAAiBA,EACtB,IAAI6hB,EAAwB7hB,EAAY,IAAIvQ,GAAQ,KAAK,gBAAgB,KAAK6R,GAAUA,EAAO,OAAS7R,CAAI,CAAC,EAAE,OAAO6R,GAAUA,GAAU,IAAI,EAC1Iy2B,EAAe,QAAQ,QAAQ,KAAK,aAAa,EACjDvO,GAA6B,KAAK,aAAa,GAAK3H,EAAsB,OAAS,IACrFkW,EAAe,KAAK,cAAc,MAAM,eAAelW,CAAqB,EAAE,KAAK/e,GAAS40B,GAAU,KAAK,GAAI50B,EAAO,KAAK,SAAS,CAAC,GAEvI,KAAK,aAAai1B,CAAY,CAC/B,CACD,IAAI,OAAQ,CACV,GAAIvO,GAA6B,KAAK,KAAK,EACzC,OAAO,KAAK,MAAM,KAGrB,CACD,IAAI,cAAe,CACjB,OAAO,KAAK,MAAM,YACnB,CACD,IAAI,aAAa0H,EAAc,CAC7B,KAAK,MAAM,aAAeA,CAC3B,CACD,IAAI,kBAAmB,CACrB,OAAO,KAAK,cAAc,gBAC3B,CACD,IAAI,qBAAsB,CACxB,OAAOzS,EAA+B,KAAK,aAAa,EAAI,KAAK,cAAc,oBAAsB,EACtG,CACD,IAAI,YAAa,CACf,OAAOrQ,GAAoB,KAAK,KAAK,GAAK,KAAK,MAAM,UACtD,CACD,QAAS,CACP,GAAIhK,EAAW,YAAY,KAAK,KAAK,EACnC,MAAM,IAAI,MAAM,oCAAoC,EAEtD,OAAO,KAAK,MAAM,QACnB,CACD,iBAAiB9C,EAAQ,CACvB,GAAI8C,EAAW,YAAY,KAAK,KAAK,EACnC,MAAM,IAAI,MAAM,8CAA8C,EAEhE,OAAO,KAAK,MAAM,iBAAiB9C,CAAM,CAC1C,CACD,IAAI,gBAAiB,CACnB,OAAO,KAAK,MAAM,cACnB,CACD,IAAI,eAAeyJ,EAAK,CACtB,KAAK,MAAM,eAAiBA,CAC7B,CACD,IAAI,iBAAkB,CACpB,OAAO,KAAK,MAAM,eACnB,CACD,IAAI,gBAAgBiX,EAAO,CACzB,KAAK,MAAM,gBAAkBA,CAC9B,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,iBACnB,CACD,qBAAqBvyB,EAAM,CACzB,OAAO,KAAK,MAAM,qBAAqBA,CAAI,CAC5C,CACD,QAAQkf,EAAUrN,EAAQooB,EAAWn7B,EAAOo7B,EAAaC,EAAUC,EAAa,CAC9E,IAAIjjB,EAAS,KACb,OAAO5C,GAAkB,WAAa,CACpC,OAAO4C,EAAO,MAAM,QAAQ+H,EAAUrN,EAAQooB,EAAWn7B,EAAOo7B,EAAaC,EAAUC,CAAW,CACnG,IACF,CACD,IAAI,oBAAqB,CACvB,OAAO,KAAK,MAAM,kBACnB,CACH,CACA,MAAAsO,GAAeR,GC3mBf,SAASh0B,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQxV,EAAKG,EAAK,CAAE,GAAI,CAAE,IAAIsV,EAAOH,EAAItV,CAAG,EAAEG,CAAG,EAAOF,EAAQwV,EAAK,YAAgBtT,EAAO,CAAEF,EAAOE,CAAK,EAAG,MAAS,CAAKsT,EAAK,KAAQzT,EAAQ/B,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKsV,EAAOC,CAAM,CAAM,CACzQ,SAASE,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAU7T,EAASC,EAAQ,CAAE,IAAIqT,EAAMK,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASN,EAAMtV,EAAO,CAAEoV,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,OAAQvV,CAAK,CAAI,CAAC,SAASuV,EAAOlT,EAAK,CAAE+S,GAAmBC,EAAKtT,EAASC,EAAQsT,EAAOC,EAAQ,QAASlT,CAAG,EAAKiT,EAAM,MAAS,EAAI,CAAI,CAAG,CAMrY,MAAMu0B,EAAqB,CAMzB,OAAO,UAAUp9B,EAAI8H,EAAO,CAC1B,IAAIuB,EAAa,UACjB,OAAOL,GAAkB,WAAa,CACpC,IAAI8H,EAAYzH,EAAW,OAAS,GAAKA,EAAW,CAAC,IAAM,OAAYA,EAAW,CAAC,EAAI,IAAIwG,GAAU7P,CAAE,EACnGmvB,EAAa,KACjB,MAAI,CAAC/lB,EAAW,YAAYtB,CAAK,GAAK,CAACsB,EAAW,mBAAmBtB,CAAK,GAAKA,EAAM,gBACnFqnB,EAAa,MAAMrnB,EAAM,cAEpB,IAAI60B,GAAmB38B,EAAI8H,EAAOgJ,EAAWqe,CAAU,CAC/D,IACF,CACH,CACA,MAAAkO,GAAeD,GCxBL,IAACE,GAAiC/rB,GAAa,cAAC,IAAI,ECMvD,SAASgsB,IAAgB,CAC9B,OAAO/mC,GAAkB8mC,GAAmB,8FAA8F,CAC5I,CCPO,SAASE,IAAU,CACxB,OAAOhnC,GAAkBib,GAAa,0FAA0F,CAClI","names":["EMPTY_ARRAY","EMPTY_MAP","EMPTY_FUNCTION","removeNullAndUndefined","_len","maybeDefined","_key","m","_defineProperty","obj","key","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","CanceledPromiseError","CanceledPromiseError$1","bindAllMethods","instance","traversePrototypeChain","methodNames","getAllMethodNames","methodName","current","level","name","EventShimCustomEvent","typeArg","eventInitDict","TimeoutError","TimeoutError$1","PromiseUtils","promise","cleanup","hasCanceled","resolved","rejectFn","wrappedPromise","resolve","reject","val","error","timeoutMs","callback","err","TextUtils","items","conjunction","itemText","lastItem","text","isNullAllowed","a","b","isAscending","TextUtils$1","useContextOrThrow","context","message","useContext","isPromise","ContextActionUtils","_a$group","_b$group","_a$order","_b$order","_a$title","_b$title","actions","sortedActions","platform","event","modifierKey","actionsParam","includePromises","menuItems","action","newMenuItems","startIndex","delta","firstIndex","menuIndex","item","ContextActionUtils$1","ContextMenuItem","React","props","ref","_menuItem$shortcutTex","_menuItem$shortcut","handleMenuItemClick","e","menuItem","onMenuItemClick","handleMenuItemMouseMove","onMenuItemMouseMove","handleMenuItemContextMenu","onMenuItemContextMenu","renderCustomMenuElement","element","iconElement","displayShortcut","closeMenu","isKeyboardSelected","isMouseSelected","dataTestId","forwardedProps","children","icon","menuItemIcon","style","_jsx","FontAwesomeIcon","subMenuIndicator","isSubMenuActive","vsChevronRight","content","_menuItem$description","menuItemDisabled","iconHasOutline","classNames","_jsxs","ContextMenuItem$1","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","log","Log","ContextMenu","PureComponent","_this$container$curre","onMenuOpened","prevProps","prevState","activeSubMenu","_this$container$curre2","_this$container$curre3","options","keyboardIndex","index","mouseIndex","nonPromiseItems","cancellablePromise","state","resolvedMenuItems","pendingItems","parentRect","_this$container$curre4","_this$container$curre5","_this$container$curre6","_this$container$curre7","updatePosition","subMenuParentWidth","subMenuParentHeight","oldTop","oldLeft","top","left","width","height","hasOverflow","isContextMenuChild","oldFocus","newFocus","openSubMenu","newSubMenu","closeAll","onMenuClosed","closeAllMenus","focusIndex","menuItemElements","subMenuTop","subMenuLeft","menuItemElement","pendingElement","LoadingSpinner","menuStyle","showSubmenu","_Fragment","verifiedTop","verifiedLeft","ContextMenu$1","ContextMenuRoot","Component","mouseEvent","contextActions","menu","ContextMenuRoot$1","FETCH_TIMEOUT","fetchVariableDefinition","connection","timeout","removeListener","timeoutId","_removeListener","handleFieldUpdates","changes","_removeListener2","definition","def","TableColumnFormatter","dh","format","formatA","formatB","label","formatString","type","TableColumnFormatter$1","BooleanColumnFormatter","BooleanColumnFormatter$1","CharColumnFormatter","CharColumnFormatter$1","DateTimeColumnFormatter","showTimeZone","showTSeparator","separator","tz","formatStringMap","timeZoneParam","defaultDateTimeFormatString","timeZone","baseFormatString","_this$formatStringMap","DecimalColumnFormatter","multiplier","defaultFormatString","valueParam","DefaultColumnFormatter","DefaultColumnFormatter$1","IntegerColumnFormatter","StringColumnFormatter","DateUtils","year","month","day","hour","minute","second","ns","yearString","monthString","dayString","hourString","minuteString","secondString","nanoString","dateString","sigNanos","zeros","nextNanoString","components","values","date","hours","minutes","seconds","nanos","jsDate","cleanMonthString","dateTimeString","regex","result","overflow","cleanText","now","_startDate","tomorrow","_endDate","_now","yesterday","_startDate2","_endDate2","_now2","startDate","endDate","dateWrapper","createComboboxFilterArgs","allValue","createSearchTextFilter","tableUtils","columnNames","searchText","maybeTable","searchTextTrimmed","factory","createFilterConditionFactory","col","createColumnCondition","conditionOperator","maybeColumns","filterConditions","next","createValueFilter","operator","createSelectedValuesFilter","columnName","selection","emptySelectionEqAll","invertSelection","maybeColumn","isAllSelected","createNotNullOrEmptyFilterCondition","column","createShowOnlyEmptyFilterCondition","isOn","filter","emptyStringValue","eqEmptyStringCondition","Operator","assertOperatorValue","Type","createKeyFromOffsetRow","row","offset","createOnTableUpdatedHandler","_ref","deserializeRow","bulkUpdate","columns","rows","updateKeyMap","defaultRowDeserializer","generateEmptyKeyedItems","start","end","getSize","table","isClosed","padFirstAndLastRow","firstRow","viewportSize","padding","tableSize","lastRow","min","max","first","clamp","last","asyncGeneratorStep","gen","_next","_throw","info","_asyncToGenerator","fn","self","args","TableUtils","_arguments","derivedTable","filterFactories","f","sort","_s$column","s","tableSort","sortIndex","columnType","FilterType","sorts","columnIndex","direction","isAbs","addToExisting","newSort","modelColumn","type1","type2","operation","eventName","matcher","eventCleanup","isPending","allowEmpty","numberText","aName","bName","sortDirection","_arguments2","_this","sourceTable","_len2","filterConditionFactories","_key2","distinctTable","distinctAscColSort","isCaseSensitive","_this2","filterConditionFactory","tableCopy","size","orComponents","orFilter","orComponent","andComponents","andFilter","j","andComponent","columnFilter","negativeSign","abnormalValue","quickFilterText","_operation","_value2","nullRegex","_value","_operation2","_value3","prefix","suffix","notEqual","cleanValue","boolValue","dateText","filterOperation","startValue","endValue","startFilter","endFilter","_startFilter","_endFilter","filterValue","filterItems","filterOperators","selectedValues","filterItem","selectedType","newFilter","filterOperator","FilterOperator","selectValueFilter","_arguments3","_this3","filters","_arguments4","_this4","t","_arguments5","_this5","_arguments6","_this6","eqFilter","notEqFilter","rawValue","isNullSelected","_ref2","exec","eventType","eventPromise","_x","_x2","_x3","Formatter","columnFormattingRules","map","dataType","formatMap","dateTimeOptions","decimalFormatOptions","integerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","createIfNecessary","_columnFormatMap$get","columnFormatMap","columnTypeFormatter","_this$typeFormatterMa","formatOverride","formatter","_formatter$dhTimeZone","getColumnFormats","settings","getDateTimeFormatterOptions","isCustomColumnFormatDefined","columnFormat","FormatterUtils","UserOverrideContext","createContext","UserPermissionsOverrideContext","UserContext","IrisGrid","lazy","__vitePreload","LazyIrisGrid","forwardRef","Suspense","LoadingOverlay","IrisGrid$1","AdvancedSettingsType","AdvancedSettingsType$1","DEFAULTS","AdvancedSettings","AggregationOperation","AggregationOperation$1","SELECTABLE_OPTIONS","isRollupOperation","isValidOperation","operationType","filterValidColumns","c","getOperationColumnNames","selected","invert","AggregationUtils","AssertionError","AssertionError$1","isEditableGridModel","model","assertIsEditableGridModel","isExpandableGridModel","SELECTION_DIRECTION","GridRange","startColumn","startRow","endColumn","endRow","right","bottom","index1","index2","ranges","wasModified","range","other","_startColumn","_endColumn","_startRow","_endRow","start1","end1","start2","end2","ranges1","ranges2","otherRange","_startColumn2","_endColumn2","_startRow2","_endRow2","_endColumn3","_endRow3","subtractRange","subtract","subtractRanges","columnCount","rowCount","_range$startColumn","_range$startRow","_range$endColumn","_range$endRow","r","columnOffset","rowOffset","rangeIndex","nextCell","nextRangeIndex","nextRange","_nextRangeIndex","_nextRange","cellCount","_range$endRow2","_range$startRow2","_range$endColumn2","_range$startColumn2","_range$endRow3","_range$startRow3","_range$endColumn3","_range$startColumn3","_this$nextCell","isAxisRange","isBoundedAxisRange","isLinkToken","token","GridUtils","x","y","metrics","columnHeaderDepth","allColumnWidths","allRowHeights","allColumnXs","allRowYs","modelColumns","modelRows","modelRow","columnWidth","rowHeight","columnHeaderHeight","columnHeaderMaxDepth","total","visibleStart","visibleEnd","floatingStartCount","floatingEndCount","totalCount","visibleStartIndex","visibleEndIndex","itemIndex","itemCoordinates","itemSizes","coordinate","_itemCoordinates$get","_itemSizes$get","itemX","itemSize","itemCount","floatingStart","floatingEnd","ignoreFloating","floatingItem","floatingLeftColumnCount","floatingRightColumnCount","visibleColumns","gridX","floatingTopRowCount","floatingBottomRowCount","visibleRows","gridY","modelIndexes","visibleItems","userSizes","visibleItemIndex","modelIndex","userColumnWidths","userRowHeights","theme","rowHeaderWidth","floatingColumns","floatingLeftWidth","allowColumnResize","headerSeparatorHandleSize","halfSeparatorSize","isPreviousColumnHidden","_allColumnXs$get","_allColumnWidths$get","columnX","isColumnHidden","midX","minX","maxX","_i","_allColumnXs$get2","_allColumnWidths$get2","_column","_columnX","_columnWidth","_isColumnHidden","_midX","_minX","_maxX","visibleSizes","hiddenItems","allowRowResize","isPreviousRowHidden","_allRowYs$get","_allRowHeights$get","rowY","isRowHidden","midY","minY","maxY","rowIndex","from","to","oldMovedItems","movedItems","lastMovedItem","toParam","isPreMoveTo","newLastMovedItem","reverse","_loop","fromItemOrRange","toItem","length","fromItem","fromStart","fromEnd","toStart","moveDistance","nextResult","_loop2","_result$j$","_result$j$2","currentStart","currentEnd","movedRange","currentResult","_ref3","movedColumns","movedRows","columnRanges","rowRanges","visibleIndex","visibleIndexes","uiRange","uiRanges","modelRanges","modelRange","visibleRanges","floatingRightWidth","floatingTopHeight","floatingBottomHeight","x1","y1","x2","y2","wheelEvent","pageWidth","pageHeight","lineWidth","lineHeight","deltaX","deltaY","range1","range2","mergedRanges","tokenBox","gridWidth","gridHeight","verticalBarWidth","horizontalBarHeight","newLeft","newRight","newTop","newBottom","firstColumn","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","getOrThrow","textAlign","isFirstColumn","treeIndent","textWidth","textX","textY","tokens","linkifyFind","GridUtils$1","memoizeClear","isClearingCache","memoizedFn","memoizee","memoizeClear$1","LINK_TRUNCATION_LENGTH","GridModel","EventTarget","visibleLength","indexOfProceedingWhitespace","lengthOfContent","contentToCheckForLinks","depth","GridModel$1","IrisGridModel","type0","callback0","options0","IrisGridModel$1","isColumnHeaderGroup","ColumnHeaderGroup","color","childIndexes","parent","memoizeOne","flattenedIndexes","newChildren","isPartitionedGridModelProvider","isPartitionedGridModel","_excluded","_excluded2","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","isPanelStateV1","isPanelStateV2","isValidIndex","array","isDateWrapper","IrisGridUtils","gridState","isStuckToBottom","isStuckToRight","customColumns","customColumnNames","_ref4","getIndex","_ref5","irisGridPanelState","isSelectingPartition","partitions","advancedSettings","quickFilters","_ref6","quickFilter","panelState","inputFilters","irisGridState","advancedFilters","_ref7","_ref8","filterMap","_ref9","_ref10","customColumn","oldCustomColumns","oldCustomColumnsNames","oldCustomColumnName","removedColumnNames","_ref11","_ref12","newMoves","removedColumnName","removedColumnIndex","moves","move","newMove","selectDistinctColumns","tableColumns","hiddenColumns","count","viewportColumns","alwaysFetchColumnNames","columnsToFetch","_ref13","bufferPages","columnsCenter","bufferWidth","columnsLeft","columnsRight","bufferedColumns","rangeMap","rowMapIndex","columnMapIndex","matchColumnRanges","allColumns","columnSet","assertNotNull","data","rowData","originalColumns","config","aggregationSettings","_config$columns$lengt","_config$columns","groupingColumns","includeConstituents","showNonAggregatedColumns","includeDescriptions","aggregations","aggregationColumns","_ref14","aggregationMap","nonAggregatedColumnSet","_aggregationMap$Aggre","existingColumns","pendingDataMap","_ref15","_ref16","_ref17","filterConfig","filterList","combinedText","symbol","filterText","groupsParam","maxDepth","parentMap","groupMap","groups","_ref18","originalGroupMap","group","seenChildren","addGroup","existingGroup","childName","childGroup","childIndex","addedGroup","columnHeaderGroup","groupNames","_parentMap$get","offsetDate","formattedText","customColumnFormatMap","isFilterBarShown","conditionalFormats","reverseType","rollupConfig","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","frozenColumns","columnHeaderGroups","partitionConfig","partitionColumns","_ref19","_ref20","_ref24","_model$layoutHints","_ref21","_ref22","_ref23","savedQuickFilters","importedFilters","_ref25","_ref26","advancedFilter","savedAdvancedFilters","_ref27","columnRetrieved","otherOptions","_ref28","_ref29","columnMap","getColumnIndex","_ref30","_ref31","_ref32","_getColumnIndex","partition","columnIndexOrName","columnSort","tableSettings","partitionColumnNames","partitionColumnName","partitionFilter","_ref33","_ref34","rangeSets","IrisGridUtils$1","MissingPartitionError","isMissingPartitionError","MissingPartitionError$1","MissingKeyError","MissingKeyError$1","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","isIrisGridTableModelTemplate","IrisGridTableModelTemplate","valueType","insensitive","contains","isBackwards","formatColumns","names","_this$layoutHints$col","_this$layoutHints","_formatter","inputTable","memoize","layoutHints","_layoutHints$columnGr","moveColumn","toIndex","moveGroup","visibleRange","frontColumns","backColumns","usedColumns","frontIndex","backIndex","layoutHintColumnGroups","columnGroups","firstChildName","rightModelIndex","rightVisibleIndex","firstChildGroup","childColumn","isBeforeGroup","moveToIndex","_isBeforeGroup","_moveToIndex","_layoutHints$columnGr2","indices","throttle","viewport","viewportTop","viewportBottom","viewHeight","keyColumnCount","_map$get","totalsTable","_this$totals$operatio","_this$totals","_this$totals$operatio2","_this$inputTable$keyC","_this$inputTable","_this$totals$operatio3","_this$totals2","_this$totals2$operati","_this$totals$operatio4","_this$totals3","_this$totals3$operati","_this$pendingStringDa","_this$formattedString","hasCustomColumnFormat","formatForCell","_this$columns$x","pendingRow","_column2","_this$formatForCell$b","_this$formatForCell","_header$displayName","header","_column$color","_this$columnAtDepth$n","_this$columnAtDepth","_this$columns$x2","currentDepth","totalsRow","_this$layoutHints2","_this$layoutHints3","_this$_columnHeaderMa","newGroups","_this$totals$operatio5","_this$totals4","_this$totals4$operati","_this$totals$showOnTo","_this$totals5","_this$viewportData$of","_this$viewportData","_this$viewportData$ro","_this$viewportData2","_this$viewportData2$r","totalsRowCount","showOnTop","_this$totals6","_this$totalsDataMap$g","_this$totalsDataMap","_this$pendingNewDataM","viewportY","_this$totals7","_this$totals$defaultO","_this$totals8","_this$totalsTable","defaultOperation","tableColumn","totalsColumn","_this$totals9","_this$totals$operatio6","_this$totals10","_this$totals10$operat","_this$totals$showOnTo2","_this$totals11","_this$row","_this$dataForCell","_data$value","totalsData","_this$totals$defaultO2","_this$totals12","_this$totals13","dataMap","operationMap","_operationMap$name$","_operationMap$name","newData","_row","newRow","_column3","totalsConfig","includeHeaders","formatValue","consolidateRanges","consolidated","topFloatingRowsSet","tableRanges","bottomFloatingRowsSet","_r","topFloatingRows","rangeSet","snapshot","bottomFloatingRows","_loop3","_i2","_this$columns$modelIn","_this$inputTable$keyC2","_this$inputTable2","isPendingRange","pendingAreaRange","pendingRanges","newDataMap","newRowData","tableAreaRange","_this6$inputTable","newRows","cellText","_this7","edits","edit","_edit$column","_edit$row","_edit$column2","_edit$row2","_row2","rowEditMap","rowMap","_edit$row3","_rowMap$get","_edit$column3","_edit$row4","_this7$inputTable","dataIndex","rangeRowCount","rowEdits","_edit$column4","_edit$column5","_edit$row5","_this8","_this8$inputTable","_this8$viewport$botto","_this8$viewport","_column4","IrisGridTableModelTemplate$1","IrisGridTableModel","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","_","partitionFilters","partitionColumn","_superprop_getPendingDataMap","_superprop_setPendingDataMap","_this5$inputTable","keyColumns","pendingRange","deleteTable","keyColumn","keyIndex","columnFilters","_filter","agg","curr","_agg$and","_agg$or","IrisGridTableModel$1","EmptyIrisGridModel","EmptyIrisGridModel$1","IrisGridPartitionedTableModel","partitionedTable","IrisGridPartitionedTableModel$1","IrisGridTreeTableModel","virtualColumns","tableGroupedColumns","groupedColumns","c1","c2","isExpanded","hasChildren","extractedRow","modifiedData","cellData","_this$viewport$column","viewportRange","intersection","resultRow","viewportRow","_viewportRow$data$get","_row$hasChildren","_row$isExpanded","expandDescendants","_row$depth","IrisGridTreeTableModel$1","makeModel","IrisGridProxyModel","detail","oldModel","oldColumns","modelPromise","events","_this$model$isExpandA","deepEqual","IrisGridProxyModel$1","IrisGridModelFactory","IrisGridModelFactory$1","ConnectionContext","useConnection","useUser"],"sources":["../../../utils/dist/DataUtils.js","../../../utils/dist/CanceledPromiseError.js","../../../utils/dist/ClassUtils.js","../../../utils/dist/EventTargetShimUtils.js","../../../utils/dist/TimeoutError.js","../../../utils/dist/PromiseUtils.js","../../../utils/dist/TextUtils.js","../../../react-hooks/dist/useContextOrThrow.js","../../../components/dist/context-actions/ContextActionUtils.js","../../../components/dist/context-actions/ContextMenuItem.js","../../../components/dist/context-actions/ContextMenu.js","../../../components/dist/context-actions/ContextMenuRoot.js","../../../jsapi-utils/dist/ConnectionUtils.js","../../../jsapi-utils/dist/formatters/TableColumnFormatter.js","../../../jsapi-utils/dist/formatters/BooleanColumnFormatter.js","../../../jsapi-utils/dist/formatters/CharColumnFormatter.js","../../../jsapi-utils/dist/formatters/DateTimeColumnFormatter.js","../../../jsapi-utils/dist/formatters/DecimalColumnFormatter.js","../../../jsapi-utils/dist/formatters/DefaultColumnFormatter.js","../../../jsapi-utils/dist/formatters/IntegerColumnFormatter.js","../../../jsapi-utils/dist/formatters/StringColumnFormatter.js","../../../jsapi-utils/dist/DateUtils.js","../../../jsapi-utils/dist/FilterUtils.js","../../../filters/dist/Operator.js","../../../filters/dist/Type.js","../../../jsapi-utils/dist/ViewportDataUtils.js","../../../jsapi-utils/dist/TableUtils.js","../../../jsapi-utils/dist/Formatter.js","../../../jsapi-utils/dist/FormatterUtils.js","../../../auth-plugins/dist/UserContexts.js","../../../iris-grid/dist/LazyIrisGrid.js","../../../iris-grid/dist/sidebar/AdvancedSettingsType.js","../../../iris-grid/dist/sidebar/AdvancedSettings.js","../../../iris-grid/dist/sidebar/aggregations/AggregationOperation.js","../../../iris-grid/dist/sidebar/aggregations/AggregationUtils.js","../../../grid/dist/errors/AssertionError.js","../../../grid/dist/EditableGridModel.js","../../../grid/dist/ExpandableGridModel.js","../../../grid/dist/GridRange.js","../../../grid/dist/GridAxisRange.js","../../../grid/dist/GridUtils.js","../../../grid/dist/memoizeClear.js","../../../grid/dist/GridModel.js","../../../iris-grid/dist/IrisGridModel.js","../../../iris-grid/dist/ColumnHeaderGroup.js","../../../iris-grid/dist/PartitionedGridModel.js","../../../iris-grid/dist/IrisGridUtils.js","../../../iris-grid/dist/MissingPartitionError.js","../../../iris-grid/dist/MissingKeyError.js","../../../iris-grid/dist/IrisGridTableModelTemplate.js","../../../iris-grid/dist/IrisGridTableModel.js","../../../iris-grid/dist/EmptyIrisGridModel.js","../../../iris-grid/dist/IrisGridPartitionedTableModel.js","../../../iris-grid/dist/IrisGridTreeTableModel.js","../../../iris-grid/dist/IrisGridProxyModel.js","../../../iris-grid/dist/IrisGridModelFactory.js","../../../app-utils/dist/components/ConnectionContext.js","../../../app-utils/dist/components/useConnection.js","../../../app-utils/dist/components/useUser.js"],"sourcesContent":["export var EMPTY_ARRAY = Object.freeze([]);\nexport var EMPTY_MAP = new Map();\nexport var EMPTY_FUNCTION = () => undefined;\n/**\n * Filters out any null or undefined values from an array.\n * @param maybeDefined\n */\nexport function removeNullAndUndefined() {\n for (var _len = arguments.length, maybeDefined = new Array(_len), _key = 0; _key < _len; _key++) {\n maybeDefined[_key] = arguments[_key];\n }\n return maybeDefined.filter(m => m != null);\n}\n//# sourceMappingURL=DataUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass CanceledPromiseError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isCanceled\", true);\n }\n}\nexport default CanceledPromiseError;\n//# sourceMappingURL=CanceledPromiseError.js.map","/**\n * Bind all methods on the instance + its prototype to the instance. If\n * `traversePrototypeChain` is true, the prototype chain will be traversed until\n * Object.prototype is reached, and any additional methods found will be included.\n * @param instance The instance to bind methods to\n * @param traversePrototypeChain Whether to traverse the prototype chain or not\n */\nexport function bindAllMethods(instance) {\n var traversePrototypeChain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var methodNames = getAllMethodNames(instance, traversePrototypeChain);\n methodNames.forEach(methodName => {\n // eslint-disable-next-line no-param-reassign\n instance[methodName] = instance[methodName].bind(instance);\n });\n}\n\n/**\n * Get all class method names. This will return names of all methods defined on\n * the instance + its prototype. If `traversePrototypeChain` is true, the prototype\n * chain will be traversed until Object.prototype is reached, and any additional\n * methods found will be included.\n * @param instance Instance to get method names from\n * @param traversePrototypeChain Whether to traverse the prototype chain or not\n */\nexport function getAllMethodNames(instance, traversePrototypeChain) {\n var methodNames = new Set();\n var current = instance;\n\n // Get method names for instance + prototype. Optionally traverse prototype\n // chain until Object.prototype is reached.\n var level = 0;\n while (current != null && current !== Object.prototype && (level <= 1 || traversePrototypeChain)) {\n // eslint-disable-next-line no-restricted-syntax\n for (var name of Object.getOwnPropertyNames(current)) {\n if (name !== 'constructor' && typeof current[name] === 'function') {\n methodNames.add(name);\n }\n }\n current = Object.getPrototypeOf(current);\n level += 1;\n }\n return [...methodNames.keys()];\n}\n//# sourceMappingURL=ClassUtils.js.map","/**\n * A CustomEvent extension which combines the browser CustomEvent and event-target-shim's Event types for type safety\n * CustomEvent does not have a generic type and augmenting the dom types seemed like not the best idea\n */\nexport class EventShimCustomEvent extends CustomEvent {\n // The fields declared are so TS plays nicely w/ event-target-shim and the browser CustomEvent\n // They don't actually do anything other than tell TS to not complain that they aren't set in the constructor\n // If declare is removed, then the properties are initialized to undefined which breaks this class\n // This will be the default for tsc and babel at some point\n // https://github.com/babel/babel/issues/12128#issuecomment-702119272\n\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor(typeArg, eventInitDict) {\n super(typeArg, eventInitDict);\n }\n}\n\n/**\n * Converts an event map into one using EventShimCustomEvent's so the event type only needs to be specified once\n * Takes an event map such as EventSourceEventMap from https://github.com/mysticatea/event-target-shim/blob/HEAD/docs/reference.md#example-3\n * This lets us specify the EventMap as just { onEvent: Event } rather than { onEvent: Event<'onEvent'> }\n */\n//# sourceMappingURL=EventTargetShimUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass TimeoutError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isTimeout\", true);\n }\n}\nexport default TimeoutError;\n//# sourceMappingURL=TimeoutError.js.map","import CanceledPromiseError from \"./CanceledPromiseError.js\";\nimport TimeoutError from \"./TimeoutError.js\";\nexport class PromiseUtils {\n /**\n * Creates a promise that can be canceled by calling the `cancel` function\n * Pass an optional `cleanupFunc` to perform actions on the resolved item after promise is cancelled.\n * @param promise The item to resolve\n * @param cleanup Function to cleanup the resolved item after cancelation. Called after both this promise is cancelled and the wrapped item was resolved (order does not matter).\n */\n static makeCancelable(promise, cleanup) {\n var hasCanceled = false;\n var resolved;\n var rejectFn;\n var wrappedPromise = new Promise((resolve, reject) => {\n rejectFn = reject;\n Promise.resolve(promise).then(val => {\n if (hasCanceled) {\n if (cleanup) {\n cleanup(val);\n }\n } else {\n resolved = val;\n resolve(val);\n }\n }).catch(error => reject(error));\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrappedPromise.cancel = () => {\n hasCanceled = true;\n rejectFn(new CanceledPromiseError());\n if (resolved != null && cleanup) {\n cleanup(resolved);\n }\n };\n return wrappedPromise;\n }\n static isCanceled(error) {\n return error instanceof CanceledPromiseError;\n }\n static isTimedOut(error) {\n return error instanceof TimeoutError;\n }\n\n /**\n * Wrap a callback call in a Promise + setTimeout.\n * @param timeoutMs\n * @param callback\n */\n static withTimeout(timeoutMs, callback) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n try {\n resolve(callback());\n } catch (err) {\n reject(err);\n }\n }, timeoutMs);\n });\n }\n}\n//# sourceMappingURL=PromiseUtils.js.map","class TextUtils {\n /**\n * Joins a list of strings with a comma, keeping the oxford comma and adding \"and\" as appropriate.\n * Eg.\n * One\n * One and Two\n * One, Two, and Three\n * @param items The items to join in a list\n * @param conjunction Conjunction to use between the last two items\n */\n static join(items) {\n var conjunction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'and';\n if (items == null || items.length === 0) {\n return '';\n }\n if (items.length === 1) {\n return items[0];\n }\n if (items.length === 2) {\n return \"\".concat(items[0], \" \").concat(conjunction, \" \").concat(items[1]);\n }\n var itemText = items.slice(0, items.length - 1).join(', ');\n var lastItem = items[items.length - 1];\n return \"\".concat(itemText, \", \").concat(conjunction, \" \").concat(lastItem);\n }\n\n /**\n * Converts text to lower case, handling null if necessary and returning an empty string\n * @param text The text to convert to lower case\n * @param isNullAllowed True if a null string should return an empty string from this function. If false an error is thrown if null is passed in.\n */\n static toLower(text) {\n var isNullAllowed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (text == null) {\n if (isNullAllowed) {\n return '';\n }\n throw new Error('Null string passed in to TextUtils.toLower');\n }\n return text.toLowerCase();\n }\n\n /**\n *\n * @param a The string to sort\n * @param b Second string to sort\n * @param isAscending Whether to sort ascending or descending\n */\n static sort(a, b) {\n var isAscending = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (a < b) {\n return isAscending ? -1 : 1;\n }\n if (a > b) {\n return isAscending ? 1 : -1;\n }\n return 0;\n }\n}\nexport default TextUtils;\n//# sourceMappingURL=TextUtils.js.map","import { useContext } from 'react';\n\n/**\n * Fetch a given context or throw an error if it is null or undefined.\n * @param context Context to use.\n * @param message Message to throw if context is null or undefined.\n * @returns Context, or throws\n */\nexport function useContextOrThrow(context) {\n var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'No value available in context. Was code wrapped in a provider?';\n var value = useContext(context);\n if (value == null) {\n throw new Error(message);\n }\n return value;\n}\nexport default useContextOrThrow;\n//# sourceMappingURL=useContextOrThrow.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport function isPromise(value) {\n return value.then !== undefined;\n}\nclass ContextActionUtils {\n static disableAllActions() {\n ContextActionUtils.actionsDisabled = true;\n }\n static enableAllActions() {\n ContextActionUtils.actionsDisabled = false;\n }\n static isContextActionEvent(e) {\n return Array.isArray(e.contextActions);\n }\n\n /**\n * Compare two action items. Useful in Array.sort\n * @param a First context action to compare\n * @param b Second context action to compare\n */\n static compareActions(a, b) {\n if (a.group !== b.group) {\n var _a$group, _b$group;\n return ((_a$group = a.group) !== null && _a$group !== void 0 ? _a$group : 0) > ((_b$group = b.group) !== null && _b$group !== void 0 ? _b$group : 0) ? 1 : -1;\n }\n if (a.order !== b.order) {\n var _a$order, _b$order;\n return ((_a$order = a.order) !== null && _a$order !== void 0 ? _a$order : 0) > ((_b$order = b.order) !== null && _b$order !== void 0 ? _b$order : 0) ? 1 : -1;\n }\n if (a.title !== b.title) {\n var _a$title, _b$title;\n return ((_a$title = a.title) !== null && _a$title !== void 0 ? _a$title : '') > ((_b$title = b.title) !== null && _b$title !== void 0 ? _b$title : '') ? 1 : -1;\n }\n if (a !== b) {\n return a > b ? 1 : -1;\n }\n return 0;\n }\n\n /**\n *\n * @param actions The array of actions to sort\n */\n static sortActions(actions) {\n if (actions == null || !Array.isArray(actions)) {\n return [];\n }\n var sortedActions = actions.slice();\n sortedActions.sort(ContextActionUtils.compareActions);\n return sortedActions;\n }\n static isMacPlatform() {\n var {\n platform\n } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Retrieve the preferred modifier key based on the current platform\n */\n static getModifierKey() {\n if (ContextActionUtils.isMacPlatform()) {\n return 'metaKey';\n }\n return 'ctrlKey';\n }\n\n /**\n * Returns true if the modifier key for the current platform is down for the event (Ctrl for windows/linux, Command (meta) for mac)\n * @param event The event to get the meta key status from\n */\n static isModifierKeyDown(event) {\n var modifierKey = ContextActionUtils.getModifierKey();\n return event[modifierKey];\n }\n\n /**\n * Returns the menu items for the provided context actions, or empty array if none found.\n * @param actionsParam The actions to get menu items for\n * @param includePromises Whether or not to include promises in the returned menu items\n */\n\n // If ignoring promises, then the return type is narrowed\n\n static getMenuItems(actionsParam) {\n var includePromises = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var menuItems = [];\n var actions = actionsParam;\n if (!Array.isArray(actions)) {\n actions = [actions];\n }\n for (var i = 0; i < actions.length; i += 1) {\n var action = actions[i];\n var newMenuItems = void 0;\n if (typeof action === 'function') {\n newMenuItems = action();\n } else {\n newMenuItems = action;\n }\n if (newMenuItems != null) {\n if (newMenuItems instanceof Promise) {\n if (includePromises) {\n menuItems.push(newMenuItems);\n }\n } else if (Array.isArray(newMenuItems)) {\n menuItems = menuItems.concat(newMenuItems);\n } else {\n menuItems.push(newMenuItems);\n }\n }\n }\n menuItems = menuItems.filter(action => action.title !== undefined || action.then != null || action.menuElement);\n return menuItems;\n }\n\n /**\n * Returns the index of the next menu item in a list that doesn't have a disabled=true prop\n * @param startIndex the starting position for the iteration\n * @param delta the direction of travel, -1 or 1\n * @param menuItems an array of menuItems\n */\n static getNextMenuItem(startIndex, delta, menuItems) {\n var firstIndex = startIndex;\n if (firstIndex < 0 && delta < 0) {\n // if menu index is -1 and delta -1 manually set start point\n firstIndex = menuItems.length;\n }\n // find the next non disabled menu option, iterating the list only once\n for (var i = 1; i < menuItems.length + 1; i += 1) {\n var menuIndex = (firstIndex + delta * i + menuItems.length) % menuItems.length;\n var item = menuItems[menuIndex];\n if (!(item instanceof Promise) && item.disabled !== true) {\n return menuIndex;\n }\n }\n return startIndex;\n }\n}\n_defineProperty(ContextActionUtils, \"actionsDisabled\", false);\nexport default ContextActionUtils;\n//# sourceMappingURL=ContextActionUtils.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar ContextMenuItem = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _menuItem$shortcutTex, _menuItem$shortcut;\n function handleMenuItemClick(e) {\n var {\n menuItem,\n onMenuItemClick\n } = props;\n onMenuItemClick(menuItem, e);\n }\n function handleMenuItemMouseMove(e) {\n var {\n menuItem,\n onMenuItemMouseMove\n } = props;\n onMenuItemMouseMove(menuItem, e);\n }\n function handleMenuItemContextMenu(e) {\n var {\n menuItem,\n onMenuItemContextMenu\n } = props;\n onMenuItemContextMenu(menuItem, e);\n }\n function renderCustomMenuElement(element, iconElement, displayShortcut) {\n // Don't pass forwardedProps if menuElement is a native DOM node\n if (typeof element.type === 'string') {\n return element;\n }\n var {\n closeMenu,\n menuItem,\n isKeyboardSelected,\n isMouseSelected,\n 'data-testid': dataTestId\n } = props;\n var forwardedProps = {\n menuItem,\n closeMenu,\n isKeyboardSelected,\n isMouseSelected,\n iconElement,\n displayShortcut,\n 'data-testid': dataTestId\n };\n return /*#__PURE__*/React.cloneElement(element, {\n forwardedProps\n });\n }\n var {\n children,\n menuItem,\n isKeyboardSelected = false,\n isMouseSelected = false,\n 'data-testid': dataTestId\n } = props;\n var displayShortcut = (_menuItem$shortcutTex = menuItem.shortcutText) !== null && _menuItem$shortcutTex !== void 0 ? _menuItem$shortcutTex : (_menuItem$shortcut = menuItem.shortcut) === null || _menuItem$shortcut === void 0 ? void 0 : _menuItem$shortcut.getDisplayText();\n var icon = null;\n if (menuItem.icon) {\n var menuItemIcon = menuItem.icon;\n if ( /*#__PURE__*/React.isValidElement(menuItemIcon)) {\n icon = menuItemIcon;\n } else {\n var style;\n if (menuItem.iconColor != null && (menuItem.disabled === undefined || !menuItem.disabled)) {\n style = {\n color: menuItem.iconColor\n };\n }\n icon = /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: menuItemIcon,\n style: style\n });\n }\n }\n var subMenuIndicator = null;\n var isSubMenuActive = Boolean(children);\n if (menuItem.actions) {\n subMenuIndicator = /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronRight\n });\n }\n var content = null;\n if (menuItem.menuElement) {\n content = /*#__PURE__*/_jsx(\"div\", {\n className: \"custom-menu-item\",\n onMouseMove: handleMenuItemMouseMove,\n children: renderCustomMenuElement(menuItem.menuElement, icon, displayShortcut)\n });\n } else {\n var _menuItem$description;\n var menuItemDisabled = menuItem.disabled;\n var iconHasOutline = menuItem.iconOutline;\n content = /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: classNames('btn-context-menu', {\n disabled: menuItemDisabled\n }, {\n active: (isSubMenuActive || isMouseSelected) && (menuItemDisabled === undefined || !menuItemDisabled)\n }, {\n 'keyboard-active': isKeyboardSelected && (menuItemDisabled === undefined || !menuItemDisabled)\n }),\n onClick: handleMenuItemClick,\n onMouseMove: handleMenuItemMouseMove,\n onContextMenu: handleMenuItemContextMenu,\n title: (_menuItem$description = menuItem.description) !== null && _menuItem$description !== void 0 ? _menuItem$description : '',\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"btn-context-menu-wrapper\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: classNames('icon', {\n outline: iconHasOutline\n }),\n children: icon\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"title\",\n children: menuItem.title\n }), displayShortcut !== undefined && /*#__PURE__*/_jsx(\"span\", {\n className: \"shortcut\",\n children: displayShortcut\n }), subMenuIndicator && /*#__PURE__*/_jsx(\"span\", {\n className: classNames('submenu-indicator', {\n disabled: menuItemDisabled\n }),\n children: subMenuIndicator\n })]\n })\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"context-menu-item\",\n ref: ref,\n \"data-testid\": dataTestId,\n children: [children, content]\n });\n});\nContextMenuItem.displayName = 'ContextMenuItem';\nContextMenuItem.defaultProps = {\n children: null,\n isKeyboardSelected: false,\n isMouseSelected: false,\n 'data-testid': undefined\n};\nexport default ContextMenuItem;\n//# sourceMappingURL=ContextMenuItem.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport ContextActionUtils from \"./ContextActionUtils.js\";\nimport ContextMenuItem from \"./ContextMenuItem.js\";\nimport LoadingSpinner from \"../LoadingSpinner.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ContextMenu');\n/** Do not use this class directly. Use ContextMenuRoot and ContextActions instead. */\nclass ContextMenu extends PureComponent {\n static handleContextMenu(e) {\n if (e.metaKey) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"oldFocus\", void 0);\n _defineProperty(this, \"activeSubMenuRef\", void 0);\n _defineProperty(this, \"subMenuTimer\", void 0);\n _defineProperty(this, \"rAF\", void 0);\n _defineProperty(this, \"initialPosition\", void 0);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseSubMenu = this.handleCloseSubMenu.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleMenuItemContextMenu = this.handleMenuItemContextMenu.bind(this);\n this.handleMenuItemMouseMove = this.handleMenuItemMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleWindowResize = this.handleWindowResize.bind(this);\n this.container = /*#__PURE__*/React.createRef();\n this.oldFocus = document.activeElement;\n this.activeSubMenuRef = /*#__PURE__*/React.createRef();\n this.subMenuTimer = 0;\n this.rAF = 0;\n this.initialPosition = {\n top: props.top,\n left: props.left\n };\n this.state = {\n menuItems: [],\n pendingItems: [],\n activeSubMenu: null,\n hasOverflow: false,\n subMenuTop: null,\n subMenuLeft: null,\n subMenuParentWidth: 0,\n subMenuParentHeight: 0,\n keyboardIndex: -1,\n mouseIndex: -1\n };\n }\n componentDidMount() {\n this.initMenu();\n this.verifyPosition();\n window.addEventListener('resize', this.handleWindowResize);\n\n // rAF is needed to wait for a submenus popper to be created before\n // attempting to set focus, however on a quick mount/unmount when\n // mousing past an item, the submenu could be unmounted before the\n // async rAF finishes, so it is cancelled in willUnmount()\n this.rAF = window.requestAnimationFrame(() => {\n var _this$container$curre;\n (_this$container$curre = this.container.current) === null || _this$container$curre === void 0 ? void 0 : _this$container$curre.focus();\n var {\n onMenuOpened\n } = this.props;\n onMenuOpened(this);\n });\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n actions\n } = this.props;\n var {\n activeSubMenu\n } = this.state;\n if (activeSubMenu !== prevState.activeSubMenu) {\n if (activeSubMenu == null) {\n var _this$container$curre2;\n // close sub menu, refocus parent menu\n (_this$container$curre2 = this.container.current) === null || _this$container$curre2 === void 0 ? void 0 : _this$container$curre2.focus();\n } else {\n // open sub menu, set its initial position\n this.setActiveSubMenuPosition();\n }\n }\n if (prevProps.actions !== actions) {\n this.initMenu();\n if (this.container.current == null || !this.container.current.contains(document.activeElement)) {\n var _this$container$curre3;\n (_this$container$curre3 = this.container.current) === null || _this$container$curre3 === void 0 ? void 0 : _this$container$curre3.focus();\n }\n }\n this.verifyPosition();\n }\n componentWillUnmount() {\n this.cancelPromises();\n window.removeEventListener('resize', this.handleWindowResize);\n cancelAnimationFrame(this.rAF);\n }\n getKeyboardIndex() {\n var {\n options\n } = this.props;\n if (options.separateKeyboardMouse !== undefined && options.separateKeyboardMouse) {\n var {\n keyboardIndex\n } = this.state;\n return keyboardIndex;\n }\n return this.getMouseIndex();\n }\n setKeyboardIndex(index) {\n var {\n options\n } = this.props;\n if (options.separateKeyboardMouse !== undefined && options.separateKeyboardMouse) {\n this.setState({\n keyboardIndex: index\n });\n } else {\n this.setMouseIndex(index);\n }\n }\n getMouseIndex() {\n var {\n mouseIndex\n } = this.state;\n return mouseIndex;\n }\n setMouseIndex(index) {\n this.setState({\n mouseIndex: index\n });\n }\n initMenu() {\n // cancel any pending close and promises\n this.cancelPromises();\n cancelAnimationFrame(this.rAF);\n var {\n options\n } = this.props;\n var keyboardIndex = options.initialKeyboardIndex;\n if (keyboardIndex === undefined) {\n keyboardIndex = -1;\n }\n var {\n actions\n } = this.props;\n var menuItems = ContextActionUtils.getMenuItems(actions);\n var nonPromiseItems = [];\n for (var i = menuItems.length - 1; i >= 0; i -= 1) {\n var menuItem = menuItems[i];\n if (menuItem instanceof Promise) {\n this.initMenuPromise(menuItem);\n } else {\n nonPromiseItems.push(menuItem);\n }\n }\n this.setState({\n mouseIndex: -1,\n keyboardIndex,\n activeSubMenu: null,\n menuItems: ContextActionUtils.sortActions(nonPromiseItems)\n });\n }\n initMenuPromise(promise) {\n // make all promises cancellable\n var cancellablePromise = PromiseUtils.makeCancelable(promise);\n this.setState(state => ({\n pendingItems: state.pendingItems.concat(cancellablePromise)\n }));\n cancellablePromise.then(resolvedMenuItems => {\n this.setState(state => {\n var index = state.pendingItems.indexOf(cancellablePromise);\n if (index >= 0) {\n var pendingItems = state.pendingItems.slice();\n pendingItems.splice(index, 1);\n return {\n menuItems: ContextActionUtils.sortActions(state.menuItems.concat(resolvedMenuItems)),\n pendingItems\n };\n }\n // This item is stale, don't update the menu\n return null;\n });\n }, error => {\n if (PromiseUtils.isCanceled(error)) {\n return; // Canceled promise is ignored\n }\n\n // remove failed item from pending list\n this.setState(state => {\n var index = state.pendingItems.indexOf(cancellablePromise);\n if (index >= 0) {\n var pendingItems = state.pendingItems.slice();\n pendingItems.splice(index, 1);\n return {\n pendingItems\n };\n }\n return null;\n });\n\n // Log the error\n log.error(error);\n });\n }\n cancelPromises() {\n var {\n pendingItems\n } = this.state;\n pendingItems.map(item => item.cancel());\n }\n\n /**\n * Sets the unverfied start position of a submenu. Submenu then self-verfies\n * its own position and potentially reports back a new position.\n */\n setActiveSubMenuPosition() {\n if (this.activeSubMenuRef.current === null) return;\n var parentRect = this.activeSubMenuRef.current.getBoundingClientRect();\n\n // intentionally rect.right, we want the sub menu to start at the right edge of the current menu\n this.setState({\n subMenuTop: parentRect.top,\n subMenuLeft: parentRect.right,\n subMenuParentHeight: parentRect.height,\n subMenuParentWidth: parentRect.width\n });\n }\n\n /**\n * Verifies the position of this menu in relation to the parent to make sure it's on screen.\n * Will update the top left state (updatePosition) if necessary (causing a re-render)\n * By default it tries to top-align with parent, at the right side of the parent.\n * Because we aren't a native context menu and can't escape window bounds, we also do\n * somethings to better fit on screen, such as the \"nudge\" offset position, and further\n * allow overflow scrolling for large menus in a small window.\n */\n verifyPosition() {\n var _this$container$curre4, _this$container$curre5, _this$container$curre6, _this$container$curre7;\n var {\n options,\n updatePosition,\n subMenuParentWidth,\n subMenuParentHeight,\n top: oldTop,\n left: oldLeft\n } = this.props;\n if (!this.container.current || options.doNotVerifyPosition != null && options.doNotVerifyPosition) {\n return;\n }\n\n // initial position is used rather than current position,\n // as the number of menu items can change (actions can bubble)\n // and menu should always be positioned relative to spawn point\n var {\n top,\n left\n } = this.initialPosition;\n var {\n width,\n height\n } = (_this$container$curre4 = (_this$container$curre5 = this.container.current) === null || _this$container$curre5 === void 0 ? void 0 : _this$container$curre5.getBoundingClientRect()) !== null && _this$container$curre4 !== void 0 ? _this$container$curre4 : {\n width: 0,\n height: 0\n };\n var hasOverflow = ((_this$container$curre6 = (_this$container$curre7 = this.container.current) === null || _this$container$curre7 === void 0 ? void 0 : _this$container$curre7.scrollHeight) !== null && _this$container$curre6 !== void 0 ? _this$container$curre6 : 0) > window.innerHeight;\n if (height === 0 || width === 0) {\n // We don't have a height or width yet, don't bother doing anything\n return;\n }\n\n // does it fit below?\n if (top + height > window.innerHeight) {\n // can it be flipped to above? include offset if submenu (defaults to 0 if not submenu)\n if (top - height - subMenuParentHeight > 0) {\n // flip like a native menu would\n top -= height - subMenuParentHeight;\n } else {\n // still doesnt fit? okay, position at bottom edge\n top = window.innerHeight - height;\n }\n }\n if (left + width > window.innerWidth) {\n // less picky about left right positioning, just keep it going off to right\n left = left - width - subMenuParentWidth;\n }\n if (oldLeft !== left || oldTop !== top) {\n // parent owns positioning as single source of truth, ask to update props\n this.setState({\n hasOverflow\n });\n updatePosition(top, left);\n }\n }\n\n // since window resize doesn't trigger blur, listen and close the menu\n handleWindowResize() {\n if (!this.container.current) {\n return;\n }\n this.closeMenu(true);\n }\n handleBlur(e) {\n if (!this.container.current) {\n log.warn('Container is null!');\n return;\n }\n if (!this.container.current.contains(e.relatedTarget)) {\n var element = e.relatedTarget;\n var isContextMenuChild = false;\n while (element && !isContextMenuChild) {\n isContextMenuChild = element.hasAttribute('data-dh-context-menu');\n element = element.parentElement;\n }\n if (!isContextMenuChild) {\n // close all submenus on blur\n this.closeMenu(true);\n }\n }\n }\n\n /** Returns whether the specified key should remove the menu. Depends on the side the parent is on. */\n isEscapeKey(key) {\n var {\n left\n } = this.props;\n return key === 'Escape' || left < 0 && key === 'ArrowRight' || key === 'ArrowLeft';\n }\n handleKeyDown(e) {\n var {\n menuItems\n } = this.state;\n var oldFocus = this.getKeyboardIndex();\n var newFocus = oldFocus;\n var openSubMenu = false;\n if (e.key === 'Enter' || e.key === ' ') {\n if (oldFocus >= 0 && oldFocus < menuItems.length) {\n this.handleMenuItemClick(menuItems[oldFocus], e);\n }\n return;\n }\n if (e.key === 'ArrowRight') {\n if (oldFocus >= 0 && oldFocus <= menuItems.length) {\n openSubMenu = true;\n } else {\n newFocus = 0;\n }\n } else if (this.isEscapeKey(e.key)) {\n newFocus = null;\n } else if (e.key === 'ArrowUp' || e.shiftKey && e.key === 'Tab') {\n newFocus = ContextActionUtils.getNextMenuItem(newFocus, -1, menuItems);\n } else if (e.key === 'ArrowDown' || e.key === 'Tab') {\n newFocus = ContextActionUtils.getNextMenuItem(newFocus, 1, menuItems);\n }\n if (openSubMenu) {\n this.openSubMenu(oldFocus);\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n if (oldFocus !== newFocus) {\n if (newFocus !== null) {\n this.setKeyboardIndex(newFocus);\n } else {\n this.closeMenu();\n if (this.oldFocus instanceof HTMLElement) {\n this.oldFocus.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n }\n }\n openSubMenu(index) {\n var {\n menuItems,\n activeSubMenu\n } = this.state;\n var newSubMenu = menuItems[index].actions ? index : null;\n if (activeSubMenu === newSubMenu) return;\n this.setState({\n activeSubMenu: newSubMenu,\n subMenuTop: null,\n subMenuLeft: null\n });\n }\n closeMenu() {\n var closeAll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var {\n closeMenu,\n onMenuClosed\n } = this.props;\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n closeMenu(closeAll);\n onMenuClosed(this);\n });\n }\n closeSubMenu() {\n this.setState({\n activeSubMenu: null\n });\n }\n handleCloseSubMenu(closeAllMenus) {\n if (closeAllMenus) {\n this.closeMenu(true);\n } else {\n this.closeSubMenu();\n }\n }\n handleMenuItemClick(menuItem, e) {\n e.preventDefault();\n e.stopPropagation();\n var {\n menuItems\n } = this.state;\n if (menuItem != null && (menuItem.disabled === undefined || !menuItem.disabled)) {\n if (menuItem.actions != null) {\n this.openSubMenu(menuItems.indexOf(menuItem));\n } else if (menuItem.action != null) {\n menuItem.action(e.nativeEvent);\n this.closeMenu(true);\n }\n }\n }\n handleMenuItemContextMenu(menuItem, e) {\n if (e.metaKey) {\n return;\n }\n this.handleMenuItemClick(menuItem, e);\n }\n handleMenuItemMouseMove(menuItem) {\n var {\n menuItems\n } = this.state;\n var focusIndex = menuItems.indexOf(menuItem);\n this.setMouseIndex(focusIndex);\n if (focusIndex >= 0 && focusIndex < menuItems.length && (menuItem.disabled === undefined || !menuItem.disabled)) {\n this.openSubMenu(focusIndex);\n }\n }\n handleMouseLeave() {\n this.setMouseIndex(-1);\n }\n render() {\n var menuItemElements = [];\n var {\n top,\n left\n } = this.props;\n var {\n activeSubMenu,\n hasOverflow,\n keyboardIndex,\n menuItems,\n mouseIndex,\n pendingItems,\n subMenuTop,\n subMenuLeft,\n subMenuParentWidth,\n subMenuParentHeight\n } = this.state;\n for (var i = 0; i < menuItems.length; i += 1) {\n var menuItem = menuItems[i];\n if (i > 0 && menuItem.group !== menuItems[i - 1].group) {\n menuItemElements.push( /*#__PURE__*/_jsx(\"hr\", {}, \"\".concat(i, \".separator\")));\n }\n var menuItemElement = /*#__PURE__*/_jsx(ContextMenuItem, {\n ref: activeSubMenu === i ? this.activeSubMenuRef : null,\n isKeyboardSelected: keyboardIndex === i,\n isMouseSelected: mouseIndex === i,\n menuItem: menuItem,\n closeMenu: this.handleCloseSubMenu,\n onMenuItemClick: this.handleMenuItemClick,\n onMenuItemMouseMove: this.handleMenuItemMouseMove,\n onMenuItemContextMenu: this.handleMenuItemContextMenu\n }, i);\n menuItemElements.push(menuItemElement);\n }\n var pendingElement = null;\n if (pendingItems.length > 0) {\n pendingElement = /*#__PURE__*/_jsx(\"div\", {\n className: \"loading\",\n children: /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n })\n });\n }\n var {\n menuStyle,\n 'data-testid': dataTestId\n } = this.props;\n\n // don't show submenu until it has an position initialized\n var showSubmenu = activeSubMenu !== null && subMenuTop !== null && subMenuLeft !== null;\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: classNames({\n 'has-overflow': hasOverflow\n }, 'context-menu-container'),\n style: _objectSpread({\n top,\n left\n }, menuStyle),\n ref: this.container,\n \"data-dh-context-menu\": true,\n onBlur: this.handleBlur,\n onKeyDown: this.handleKeyDown,\n onMouseLeave: this.handleMouseLeave,\n onContextMenu: ContextMenu.handleContextMenu,\n role: \"menuitem\",\n tabIndex: 0,\n \"data-testid\": dataTestId,\n children: [menuItemElements, pendingElement]\n }), showSubmenu && activeSubMenu !== null && subMenuTop !== null && subMenuLeft !== null && /*#__PURE__*/_jsx(ContextMenu, {\n actions: menuItems[activeSubMenu].actions || [],\n closeMenu: this.handleCloseSubMenu,\n top: subMenuTop,\n left: subMenuLeft,\n updatePosition: (verifiedTop, verifiedLeft) => {\n this.setState({\n subMenuTop: verifiedTop,\n subMenuLeft: verifiedLeft\n });\n },\n subMenuParentWidth: subMenuParentWidth,\n subMenuParentHeight: subMenuParentHeight\n }, \"sub-\".concat(activeSubMenu))]\n });\n }\n}\n_defineProperty(ContextMenu, \"defaultProps\", {\n subMenuParentWidth: 0,\n subMenuParentHeight: 0,\n closeMenu() {\n // no-op\n },\n onMenuOpened() {\n // no-op\n },\n onMenuClosed() {\n // no-op\n },\n options: {},\n menuStyle: {},\n 'data-testid': undefined\n});\nexport default ContextMenu;\n//# sourceMappingURL=ContextMenu.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport ContextMenu from \"./ContextMenu.js\";\nimport ContextActionUtils from \"./ContextActionUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Put at your root container, any contextmenu events that are unhandled in the root container will be handled by this\n */\nclass ContextMenuRoot extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"openMenu\", void 0);\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.container = /*#__PURE__*/React.createRef();\n this.openMenu = /*#__PURE__*/React.createRef();\n this.state = {\n actions: null,\n left: 0,\n top: 0\n };\n }\n componentDidMount() {\n var _this$container$curre;\n if ((_this$container$curre = this.container.current) !== null && _this$container$curre !== void 0 && _this$container$curre.parentElement) {\n this.container.current.parentElement.addEventListener('contextmenu', this.handleContextMenu);\n }\n }\n componentWillUnmount() {\n var _this$container$curre2;\n if ((_this$container$curre2 = this.container.current) !== null && _this$container$curre2 !== void 0 && _this$container$curre2.parentElement) {\n this.container.current.parentElement.removeEventListener('contextmenu', this.handleContextMenu);\n }\n }\n handleContextMenu(e) {\n if (!this.container.current) {\n return;\n }\n var parentRect = this.container.current.getBoundingClientRect();\n var top = e.clientY - parentRect.top;\n var left = e.clientX - parentRect.left;\n var {\n actions\n } = this.state;\n\n // Context menu is open and user clicked on the context-root blocking layer\n // Mac and Linux appear to trigger contextmenu events on mousedown vs. mouseup on Windows\n // Mouseup on Windows triggers blur before contextmenu which effectively does what this path does\n if (actions != null && e.target === this.container.current) {\n // re-emit right clicks that hit the context-root blocking layer\n // while we already have a custom context menu open\n e.preventDefault();\n\n // Set actions to null removes the menu\n // That allows a new menu to be opened on a different element so initial position is set properly\n // Otherwise the instance of this menu may be reused\n // A new contextmenu event is triggered on the element at the location the user clicked on the blocking layer\n this.setState({\n actions: null\n }, () => {\n var element = document.elementFromPoint(left, top); // x y\n\n var mouseEvent = new MouseEvent('contextmenu', {\n clientX: e.clientX,\n clientY: e.clientY,\n bubbles: true,\n cancelable: true\n });\n element === null || element === void 0 ? void 0 : element.dispatchEvent(mouseEvent);\n });\n return;\n }\n if (!ContextActionUtils.isContextActionEvent(e)) {\n // Open native menu if no custom context actions\n return;\n }\n if (e.metaKey || e.ctrlKey) {\n // debug escape hatch to native menu\n return;\n }\n var contextActions = ContextActionUtils.getMenuItems(e.contextActions);\n if (contextActions.length === 0) {\n // No actions after filtering. Use native menu\n return;\n }\n\n // new clicks, set actions\n e.preventDefault();\n this.setState({\n actions: contextActions,\n top,\n left\n });\n }\n handleMenuClose(menu) {\n if (menu === this.openMenu.current) {\n this.setState({\n actions: null\n });\n }\n }\n render() {\n var menu = null;\n var {\n 'data-testid': dataTestId\n } = this.props;\n var {\n actions,\n top,\n left\n } = this.state;\n if (actions) {\n menu = /*#__PURE__*/_jsx(ContextMenu, {\n ref: this.openMenu,\n actions: actions,\n onMenuClosed: this.handleMenuClose,\n top: top,\n left: left,\n updatePosition: (verifiedTop, verifiedLeft) => {\n this.setState({\n top: verifiedTop,\n left: verifiedLeft\n });\n },\n \"data-testid\": dataTestId\n });\n }\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames('context-menu-root', {\n active: actions\n }),\n ref: this.container,\n children: menu\n });\n }\n}\nexport default ContextMenuRoot;\n//# sourceMappingURL=ContextMenuRoot.js.map","import { TimeoutError } from '@deephaven/utils';\n\n/** Default timeout for fetching a variable definition */\nexport var FETCH_TIMEOUT = 10000;\n\n/**\n * Fetch the definition for a variable given a connection. Subscribes to field updates and triggers when the variable is found.\n * @param connection Connection to get the variable from\n * @param name Name of the definition to fetch\n * @param timeout Timeout for the fetch\n * @returns Promise the resolves to the variable definition if found, or rejects if there's an error or the timeout has exceeded\n */\nexport function fetchVariableDefinition(connection, name) {\n var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : FETCH_TIMEOUT;\n return new Promise((resolve, reject) => {\n var removeListener;\n var timeoutId = setTimeout(() => {\n var _removeListener;\n (_removeListener = removeListener) === null || _removeListener === void 0 ? void 0 : _removeListener();\n reject(new TimeoutError(\"Timeout looking for variable \".concat(name)));\n }, timeout);\n\n /**\n * Checks if the variable we're looking for is in the changes, and resolves the promise if it does\n * @param changes Variables changes that have occurred\n */\n function handleFieldUpdates(changes) {\n var _removeListener2;\n var definition = changes.created.find(def => def.title === name);\n clearTimeout(timeoutId);\n (_removeListener2 = removeListener) === null || _removeListener2 === void 0 ? void 0 : _removeListener2();\n if (definition != null) {\n resolve(definition);\n } else {\n reject(new Error(\"Variable \".concat(name, \" not found\")));\n }\n }\n removeListener = connection.subscribeToFieldUpdates(handleFieldUpdates);\n });\n}\n//# sourceMappingURL=ConnectionUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n/**\n * Default column data formatter. Just interpolates the value as a string and returns.\n * Extend this class and register with TableUtils to make use of it.\n */\n\nexport class TableColumnFormatter {\n /**\n * Validates format object\n * @param dh JSAPI instance\n * @param format Format object\n * @returns true for valid object\n */\n static isValid(dh, format) {\n return true;\n }\n\n /**\n * Check if the given formats match\n * @param formatA format object to check\n * @param formatB format object to check\n * @returns True if the formats match\n */\n static isSameFormat(formatA, formatB) {\n throw new Error('isSameFormat not implemented');\n }\n\n /**\n * Create and return a Format object\n * @param label The label of the format object\n * @param formatString Format string to use for the format\n * @param type The type of column to use for this format\n * @returns A format object\n */\n static makeFormat(label, formatString, type) {\n return {\n label,\n formatString,\n type\n };\n }\n\n /**\n * @param value The value to format\n * @param format Optional format object with value transformation options\n * @returns String the formatted text string of the value passed in.\n */\n format(value, format) {\n return '';\n }\n}\n_defineProperty(TableColumnFormatter, \"TYPE_GLOBAL\", 'type-global');\n_defineProperty(TableColumnFormatter, \"TYPE_CONTEXT_PRESET\", 'type-context-preset');\n_defineProperty(TableColumnFormatter, \"TYPE_CONTEXT_CUSTOM\", 'type-context-custom');\nexport default TableColumnFormatter;\n//# sourceMappingURL=TableColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\n/** Column formatter for booleans */\nclass BooleanColumnFormatter extends TableColumnFormatter {\n format(value) {\n switch (value) {\n case 1:\n case true:\n return 'true';\n case 0:\n case false:\n return 'false';\n default:\n return '';\n }\n }\n}\nexport default BooleanColumnFormatter;\n//# sourceMappingURL=BooleanColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\n/** Column formatter for chars */\nclass CharColumnFormatter extends TableColumnFormatter {\n format(value) {\n return String.fromCharCode(value);\n }\n}\nexport default CharColumnFormatter;\n//# sourceMappingURL=CharColumnFormatter.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport Log from '@deephaven/log';\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\nvar log = Log.module('DateTimeColumnFormatter');\nexport class DateTimeColumnFormatter extends TableColumnFormatter {\n /**\n * Validates format object\n * @param dh JSAPI instance\n * @param format Format object\n * @returns true for valid object\n */\n static isValid(dh, format) {\n try {\n dh.i18n.DateTimeFormat.format(format.formatString, new Date());\n return true;\n } catch (e) {\n return false;\n }\n }\n static makeFormat(label, formatString) {\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : TableColumnFormatter.TYPE_CONTEXT_PRESET;\n return {\n label,\n formatString,\n type\n };\n }\n\n /**\n * Check if the given formats match\n * @param formatA format object to check\n * @param formatB format object to check\n * @returns True if the formats match\n */\n static isSameFormat(formatA, formatB) {\n return formatA === formatB || formatA !== null && formatB !== null && formatA.type === formatB.type && formatA.formatString === formatB.formatString;\n }\n static makeGlobalFormatStringMap(showTimeZone, showTSeparator) {\n var separator = showTSeparator ? \"'T'\" : ' ';\n var tz = showTimeZone ? ' z' : '';\n return new Map([['yyyy-MM-dd HH:mm:ss', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss\").concat(tz)], ['yyyy-MM-dd HH:mm:ss.SSS', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss.SSS\").concat(tz)], ['yyyy-MM-dd HH:mm:ss.SSSSSSSSS', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss.SSSSSSSSS\").concat(tz)]]);\n }\n static getGlobalFormats(showTimeZone, showTSeparator) {\n var formatStringMap = DateTimeColumnFormatter.makeGlobalFormatStringMap(showTimeZone, showTSeparator);\n return [...formatStringMap.keys()];\n }\n static makeFormatStringMap(showTimeZone, showTSeparator) {\n var separator = showTSeparator !== undefined && showTSeparator ? \"'T'\" : ' ';\n var tz = showTimeZone !== undefined && showTimeZone ? ' z' : '';\n return new Map([['yyyy-MM-dd', \"yyyy-MM-dd\".concat(tz)], ['MM-dd-yyyy', \"MM-dd-yyyy\".concat(tz)], ['HH:mm:ss', \"HH:mm:ss\".concat(tz)], ['HH:mm:ss.SSS', \"HH:mm:ss.SSS\".concat(tz)], ['HH:mm:ss.SSSSSSSSS', \"HH:mm:ss.SSSSSSSSS\".concat(tz)], ['yyyy-MM-dd HH:mm:ss', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss\").concat(tz)], ['yyyy-MM-dd HH:mm:ss.SSS', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss.SSS\").concat(tz)], ['yyyy-MM-dd HH:mm:ss.SSSSSSSSS', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss.SSSSSSSSS\").concat(tz)]]);\n }\n static getFormats(showTimeZone, showTSeparator) {\n var formatStringMap = DateTimeColumnFormatter.makeFormatStringMap(showTimeZone, showTSeparator);\n return [...formatStringMap.keys()];\n }\n constructor(dh) {\n var {\n timeZone: timeZoneParam = '',\n showTimeZone = true,\n showTSeparator = false,\n defaultDateTimeFormatString = DateTimeColumnFormatter.DEFAULT_DATETIME_FORMAT_STRING\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"dhTimeZone\", void 0);\n _defineProperty(this, \"defaultDateTimeFormatString\", void 0);\n _defineProperty(this, \"showTimeZone\", void 0);\n _defineProperty(this, \"showTSeparator\", void 0);\n _defineProperty(this, \"formatStringMap\", void 0);\n var timeZone = timeZoneParam || DateTimeColumnFormatter.DEFAULT_TIME_ZONE_ID;\n try {\n this.dhTimeZone = dh.i18n.TimeZone.getTimeZone(timeZone);\n } catch (e) {\n log.error('Unsupported time zone id', timeZone);\n this.dhTimeZone = dh.i18n.TimeZone.getTimeZone(DateTimeColumnFormatter.DEFAULT_TIME_ZONE_ID);\n }\n this.dh = dh;\n this.defaultDateTimeFormatString = defaultDateTimeFormatString;\n this.showTimeZone = showTimeZone;\n this.showTSeparator = showTSeparator;\n this.formatStringMap = DateTimeColumnFormatter.makeFormatStringMap(showTimeZone, showTSeparator);\n }\n getEffectiveFormatString(baseFormatString) {\n var _this$formatStringMap;\n return (_this$formatStringMap = this.formatStringMap.get(baseFormatString)) !== null && _this$formatStringMap !== void 0 ? _this$formatStringMap : baseFormatString;\n }\n format(value) {\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var baseFormatString = format.formatString != null && format.formatString !== '' ? format.formatString : this.defaultDateTimeFormatString;\n var formatString = this.getEffectiveFormatString(baseFormatString);\n try {\n return this.dh.i18n.DateTimeFormat.format(formatString, value, this.dhTimeZone);\n } catch (e) {\n log.error('Invalid format arguments');\n }\n return '';\n }\n}\n_defineProperty(DateTimeColumnFormatter, \"DEFAULT_DATETIME_FORMAT_STRING\", 'yyyy-MM-dd HH:mm:ss.SSS');\n_defineProperty(DateTimeColumnFormatter, \"DEFAULT_TIME_ZONE_ID\", 'America/New_York');\nexport default DateTimeColumnFormatter;\n//# sourceMappingURL=DateTimeColumnFormatter.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport Log from '@deephaven/log';\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\nvar log = Log.module('DecimalColumnFormatter');\nexport class DecimalColumnFormatter extends TableColumnFormatter {\n /**\n * Validates format object\n * @param dh JSAPI instance\n * @param format Format object\n * @returns true for valid object\n */\n static isValid(dh, format) {\n try {\n dh.i18n.NumberFormat.format(format.formatString, 0);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Create a DecimalColumnFormat object with the parameters specified\n * @param label Label for the format\n * @param formatString Format string for the format\n * @param multiplier Optional multiplier for the formatter\n * @param type Type of format created\n * @returns DecimalColumnFormat object\n */\n static makeFormat(label, formatString) {\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : TableColumnFormatter.TYPE_CONTEXT_PRESET;\n var multiplier = arguments.length > 3 ? arguments[3] : undefined;\n return {\n label,\n type,\n formatString,\n multiplier\n };\n }\n\n /**\n * Convenient function to create a DecimalFormatObject with Preset type set\n * @param label Label for this format object\n * @param formatString Format string to use\n * @param multiplier Multiplier to use\n * @returns DecimalColumnFormat object\n */\n static makePresetFormat(label) {\n var formatString = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var multiplier = arguments.length > 2 ? arguments[2] : undefined;\n return DecimalColumnFormatter.makeFormat(label, formatString, TableColumnFormatter.TYPE_CONTEXT_PRESET, multiplier);\n }\n\n /**\n * Convenient function to create a DecimalFormatObject with a default 'Custom Format' label and Custom type\n * @param formatString Format string to use\n * @param multiplier Multiplier to use\n * @returns DecimalColumnFormat object\n */\n static makeCustomFormat() {\n var formatString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var multiplier = arguments.length > 1 ? arguments[1] : undefined;\n return DecimalColumnFormatter.makeFormat('Custom Format', formatString, TableColumnFormatter.TYPE_CONTEXT_CUSTOM, multiplier);\n }\n /**\n * Check if the given formats match\n * @param formatA format object to check\n * @param formatB format object to check\n * @returns True if the formats match\n */\n static isSameFormat(formatA, formatB) {\n return formatA === formatB || formatA != null && formatB != null && formatA.type === formatB.type && formatA.formatString === formatB.formatString && formatA.multiplier === formatB.multiplier;\n }\n constructor(dh) {\n var {\n defaultFormatString = DecimalColumnFormatter.DEFAULT_FORMAT_STRING\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n _defineProperty(this, \"defaultFormatString\", void 0);\n _defineProperty(this, \"dh\", void 0);\n this.dh = dh;\n this.defaultFormatString = defaultFormatString;\n }\n\n /**\n * Format a value with the provided format object\n * @param valueParam Value to format\n * @param format Format object\n * @returns Formatted string\n */\n format(valueParam) {\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var formatString = format.formatString != null && format.formatString !== '' ? format.formatString : this.defaultFormatString;\n var value = format.multiplier != null && format.multiplier !== 0 ? valueParam * format.multiplier : valueParam;\n try {\n return this.dh.i18n.NumberFormat.format(formatString, value);\n } catch (e) {\n log.error('Invalid format arguments');\n }\n return '';\n }\n}\n_defineProperty(DecimalColumnFormatter, \"DEFAULT_FORMAT_STRING\", '###,##0.0000');\n_defineProperty(DecimalColumnFormatter, \"FORMAT_PERCENT\", DecimalColumnFormatter.makePresetFormat('Percent', '##0.00%'));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_BASIS_POINTS\", DecimalColumnFormatter.makePresetFormat('Basis Points', '###,##0 bp', 10000));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_MILLIONS\", DecimalColumnFormatter.makePresetFormat('Millions', '###,##0.000 mm', 0.000001));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_SCIENTIFIC_NOTATION\", DecimalColumnFormatter.makePresetFormat('Scientific Notation', '0.0000E0'));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_ROUND\", DecimalColumnFormatter.makePresetFormat('Round', '###,##0'));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_ROUND_TWO_DECIMALS\", DecimalColumnFormatter.makePresetFormat('0.00', '###,##0.00'));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_ROUND_FOUR_DECIMALS\", DecimalColumnFormatter.makePresetFormat('0.0000', '###,##0.0000'));\nexport default DecimalColumnFormatter;\n//# sourceMappingURL=DecimalColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\nclass DefaultColumnFormatter extends TableColumnFormatter {\n format(value) {\n return \"\".concat(value);\n }\n}\nexport default DefaultColumnFormatter;\n//# sourceMappingURL=DefaultColumnFormatter.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport Log from '@deephaven/log';\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\nvar log = Log.module('IntegerColumnFormatter');\n/** Column formatter for integers/whole numbers */\nexport class IntegerColumnFormatter extends TableColumnFormatter {\n /**\n * Validates format object\n * @param dh JSAPI instance\n * @param format Format object\n * @returns true for valid object\n */\n static isValid(dh, format) {\n try {\n dh.i18n.NumberFormat.format(format.formatString, 0);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Create an IntegerColumnFormat object with the parameters specified\n * @param label Label for the format\n * @param formatString Format string for the format\n * @param multiplier Optional multiplier for the formatter\n * @param type Type of format created\n * @returns IntegerColumnFormat object\n */\n static makeFormat(label, formatString) {\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : TableColumnFormatter.TYPE_CONTEXT_PRESET;\n var multiplier = arguments.length > 3 ? arguments[3] : undefined;\n return {\n label,\n type,\n formatString,\n multiplier\n };\n }\n\n /**\n * Convenient function to create a IntegerFormatObject with Preset type set\n * @param label Label for this format object\n * @param formatString Format string to use\n * @param multiplier Multiplier to use\n * @returns IntegerColumnFormat object\n */\n static makePresetFormat(label) {\n var formatString = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var multiplier = arguments.length > 2 ? arguments[2] : undefined;\n return IntegerColumnFormatter.makeFormat(label, formatString, TableColumnFormatter.TYPE_CONTEXT_PRESET, multiplier);\n }\n\n /**\n * Convenient function to create a IntegerFormatObject with a default 'Custom Format' label and Custom type\n * @param formatString Format string to use\n * @param multiplier Multiplier to use\n * @returns IntegerColumnFormat object\n */\n static makeCustomFormat() {\n var formatString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var multiplier = arguments.length > 1 ? arguments[1] : undefined;\n return IntegerColumnFormatter.makeFormat('Custom Format', formatString, TableColumnFormatter.TYPE_CONTEXT_CUSTOM, multiplier);\n }\n\n /**\n * Check if the given formats match\n * @param formatA format object to check\n * @param formatB format object to check\n * @returns True if the formats match\n */\n static isSameFormat(formatA, formatB) {\n return formatA === formatB || formatA != null && formatB != null && formatA.type === formatB.type && formatA.formatString === formatB.formatString && formatA.multiplier === formatB.multiplier;\n }\n constructor(dh) {\n var {\n defaultFormatString = IntegerColumnFormatter.DEFAULT_FORMAT_STRING\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"defaultFormatString\", void 0);\n this.dh = dh;\n this.defaultFormatString = defaultFormatString;\n }\n\n /**\n * Format a value with the provided format object\n * @param valueParam Value to format\n * @param format Format object\n * @returns Formatted string\n */\n format(valueParam) {\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var formatString = format.formatString != null && format.formatString !== '' ? format.formatString : this.defaultFormatString;\n var value = format.multiplier != null && format.multiplier !== 0 ? valueParam * format.multiplier : valueParam;\n try {\n return this.dh.i18n.NumberFormat.format(formatString, value);\n } catch (e) {\n log.error('Invalid format arguments');\n }\n return '';\n }\n}\n_defineProperty(IntegerColumnFormatter, \"DEFAULT_FORMAT_STRING\", '###,##0');\n_defineProperty(IntegerColumnFormatter, \"FORMAT_MILLIONS\", IntegerColumnFormatter.makePresetFormat('Millions', '###,##0.000 mm', 0.000001));\n_defineProperty(IntegerColumnFormatter, \"FORMAT_SCIENTIFIC_NOTATION\", IntegerColumnFormatter.makePresetFormat('Scientific Notation', '0.0000E0'));\nexport default IntegerColumnFormatter;\n//# sourceMappingURL=IntegerColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\n/** Column formatter for strings */\nexport class StringColumnFormatter extends TableColumnFormatter {\n format(value) {\n return value;\n }\n}\nexport default StringColumnFormatter;\n//# sourceMappingURL=StringColumnFormatter.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport class DateUtils {\n /**\n *\n * @param timeZone The time zone to parse this time in. E.g. America/New_York\n * @param year The year for the date\n * @param month The month, starting at 0\n * @param day The day, starting at 1\n * @param hour The hours\n * @param minute The minutes\n * @param second The seconds\n * @param ns The nanoseconds\n */\n static makeDateWrapper(dh, timeZone, year) {\n var month = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var day = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n var hour = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n var minute = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var second = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 0;\n var ns = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0;\n if (!timeZone) {\n throw new Error('No timezone provided');\n }\n var yearString = \"\".concat(year).padStart(4, '0');\n var monthString = \"\".concat(month + 1).padStart(2, '0');\n var dayString = \"\".concat(day).padStart(2, '0');\n var hourString = \"\".concat(hour).padStart(2, '0');\n var minuteString = \"\".concat(minute).padStart(2, '0');\n var secondString = \"\".concat(second).padStart(2, '0');\n var nanoString = \"\".concat(ns).padStart(9, '0');\n var dateString = \"\".concat(yearString, \"-\").concat(monthString, \"-\").concat(dayString, \" \").concat(hourString, \":\").concat(minuteString, \":\").concat(secondString, \".\").concat(nanoString);\n return dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, dateString, dh.i18n.TimeZone.getTimeZone(timeZone));\n }\n\n /**\n * Takes the string the user entered and returns the next nanos value\n * @param nanoString The nano string to get the next one of\n * @returns The value of the next nanos\n */\n static getNextNanos(nanoString) {\n var sigNanos = parseInt(nanoString, 10);\n // Get the zeroes needed for padding before adding one so we handle overflow properly.\n var zeros = '0'.repeat(9 - nanoString.length);\n var nextNanoString = \"\".concat(sigNanos + 1).concat(zeros);\n return parseInt(nextNanoString, 10);\n }\n\n /**\n * @param components The string components that were parsed from the original string\n * @param values The values that were parsed from the components\n * @param timeZone The time zone to parse the date in. E.g. America/New_York\n * @returns Returns the DateWrapper for the next date, or null if a full date was passed in\n */\n static getNextDate(dh, components, values, timeZone) {\n var {\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n nanos\n } = values;\n if (components.nanos != null) {\n if (components.nanos.length === 9) {\n // They want an exact match\n return null;\n }\n nanos = DateUtils.getNextNanos(components.nanos);\n if (nanos > 999999999) {\n // There's an overflow, add it to the seconds manually\n seconds += 1;\n nanos = 0;\n }\n } else if (components.seconds != null) {\n seconds += 1;\n } else if (components.minutes != null) {\n minutes += 1;\n } else if (components.hours != null) {\n hours += 1;\n } else if (components.date != null) {\n date += 1;\n } else if (components.month != null) {\n month += 1;\n } else {\n year += 1;\n }\n\n // Use the JS date to handle overflow rather than doing our own logic\n // Because handling leap years and stuff is a pain\n // Still need to add nanos after, and the overflow from that is already added to seconds above\n var jsDate = new Date(year, month, date, hours, minutes, seconds);\n return DateUtils.makeDateWrapper(dh, timeZone, jsDate.getFullYear(), jsDate.getMonth(), jsDate.getDate(), jsDate.getHours(), jsDate.getMinutes(), jsDate.getSeconds(), nanos);\n }\n\n /**\n * Get the JS month value for the provided string.\n * Matches digits or a month name (eg. '1', '01', 'jan', 'january' should all work)\n * @param monthString The string to parse to a JS month value\n * @returns number The JS month value, which starts at 0 for january, or NaN if nothing could be parsed\n */\n static parseMonth(monthString) {\n var month = parseInt(monthString, 10);\n if (!Number.isNaN(month)) {\n if (month >= 1 && month <= 12) {\n return month - 1;\n }\n return NaN;\n }\n var cleanMonthString = monthString.trim().toLowerCase();\n if (cleanMonthString.length >= 3) {\n for (var i = 0; i < DateUtils.months.length; i += 1) {\n if (DateUtils.months[i].startsWith(cleanMonthString)) {\n return i;\n }\n }\n }\n return NaN;\n }\n\n /**\n * Parse a date object out of the provided string segments.\n * Also using `parseMonth` to get month names like Aug/August rather than\n * simply doing `parseInt`.\n * @param yearString The year part of the string\n * @param monthString The month part of the string\n * @param dayString The day part of the string\n * @param hourString The hour part of the string\n * @param minuteString The minute part of the string\n * @param secondString The second part of the string\n * @param nanoString The milli part of the string\n */\n static parseDateValues(yearString, monthString, dayString, hourString, minuteString, secondString, nanoString) {\n var year = parseInt(yearString, 10);\n var month = monthString != null ? this.parseMonth(monthString) : 0;\n var date = dayString != null ? parseInt(dayString, 10) : 1;\n var hours = hourString != null ? parseInt(hourString, 10) : 0;\n var minutes = minuteString != null ? parseInt(minuteString, 10) : 0;\n var seconds = secondString != null ? parseInt(secondString, 10) : 0;\n var nanos = nanoString != null ? parseInt(nanoString.padEnd(9, '0'), 10) : 0;\n if (Number.isNaN(year) || Number.isNaN(month) || Number.isNaN(date) || Number.isNaN(hours) || Number.isNaN(minutes) || Number.isNaN(seconds) || Number.isNaN(nanos)) {\n return null;\n }\n return {\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n nanos\n };\n }\n\n /**\n * Parse out a date time string into it's string components.\n * Anything that is not captured in the string will be undefined.\n *\n * @param dateTimeString The date time string to parse\n * @returns Containing the date time components\n */\n static parseDateTimeString(dateTimeString) {\n var regex = /\\s*(\\d{4})([-./]([\\da-z]+))?([-./](\\d{1,2}))?([tT\\s](\\d{2})([:](\\d{2}))?([:](\\d{2}))?([.](\\d{1,9}))?)?(.*)/;\n var result = regex.exec(dateTimeString);\n if (result == null) {\n throw new Error(\"Unexpected date string: \".concat(dateTimeString));\n }\n var [, year,, month,, date,, hours,, minutes,, seconds,, nanos, overflow] = result;\n if (overflow != null && overflow.length > 0) {\n throw new Error(\"Unexpected characters after date string '\".concat(dateTimeString, \"': \").concat(overflow));\n }\n return {\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n nanos\n };\n }\n\n /**\n * Parses the date range provided from a string of text.\n * @param text The string to parse the date from. Can be a keyword like \"today\", or in the format \"2018-08-04\"\n * @param timeZone The time zone to parse this range in. E.g. America/New_York\n * @returns A tuple with the start and end value/null for that date range, or both null\n */\n static parseDateRange(dh, text, timeZone) {\n var cleanText = text.trim().toLowerCase();\n if (cleanText.length === 0) {\n throw new Error('Cannot parse date range from empty string');\n }\n if (cleanText === 'null') {\n return [null, null];\n }\n if (cleanText === 'today') {\n var now = new Date(Date.now());\n var _startDate = DateUtils.makeDateWrapper(dh, timeZone, now.getFullYear(), now.getMonth(), now.getDate());\n var tomorrow = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n var _endDate = DateUtils.makeDateWrapper(dh, timeZone, tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate());\n return [_startDate, _endDate];\n }\n if (cleanText === 'yesterday') {\n var _now = new Date(Date.now());\n var yesterday = new Date(_now.getFullYear(), _now.getMonth(), _now.getDate() - 1);\n var _startDate2 = DateUtils.makeDateWrapper(dh, timeZone, yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate());\n var _endDate2 = DateUtils.makeDateWrapper(dh, timeZone, _now.getFullYear(), _now.getMonth(), _now.getDate());\n return [_startDate2, _endDate2];\n }\n if (cleanText === 'now') {\n var _now2 = new Date(Date.now());\n var date = dh.DateWrapper.ofJsDate(_now2);\n return [date, null];\n }\n var components = DateUtils.parseDateTimeString(cleanText);\n if (components.year == null && components.month == null && components.date == null) {\n throw new Error(\"Unable to extract year, month, or day \".concat(cleanText));\n }\n var values = DateUtils.parseDateValues(components.year, components.month, components.date, components.hours, components.minutes, components.seconds, components.nanos);\n if (values == null) {\n throw new Error(\"Unable to extract date values from \".concat(components));\n }\n var startDate = DateUtils.makeDateWrapper(dh, timeZone, values.year, values.month, values.date, values.hours, values.minutes, values.seconds, values.nanos);\n var endDate = DateUtils.getNextDate(dh, components, values, timeZone);\n return [startDate, endDate];\n }\n\n /**\n * Gets the Js Date object from the provided DateWrapper.\n * In unit test, DateWrapper is just a number provided in millis, so handles that case.\n * @param dateWrapper The DateWrapper object, or time in millis\n */\n static getJsDate(dateWrapper) {\n if (typeof dateWrapper === 'number') {\n return new Date(dateWrapper);\n }\n return dateWrapper.asDate();\n }\n}\n_defineProperty(DateUtils, \"FULL_DATE_FORMAT\", 'yyyy-MM-dd HH:mm:ss.SSSSSSSSS');\n_defineProperty(DateUtils, \"months\", ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']);\nexport default DateUtils;\n//# sourceMappingURL=DateUtils.js.map","/**\n * Create args for a filter derived from a combobox selection.\n * @param value\n */\nexport function createComboboxFilterArgs(value, allValue) {\n return value === allValue ? {\n operator: 'notEq',\n value: ''\n } // this is synonymous with \"no filter\"\n : {\n operator: 'eq',\n value\n };\n}\n\n/**\n * Create a filter condition factory for a `contains` filter that matches the\n * given search text.\n * @param tableUtils TableUtils instance to create filter from\n * @param columnNames Names of the columns to filter\n * @param searchText Text to search (will be trimmed of leading / trailing whitespace)\n */\nexport function createSearchTextFilter(tableUtils, columnNames, searchText) {\n /**\n * Creates a filter condition that matches based on search text.\n * @param maybeTable Table to filter\n */\n return function searchTextFilter(maybeTable) {\n var searchTextTrimmed = searchText.trim();\n if (searchTextTrimmed === '') {\n return null;\n }\n var factory = createFilterConditionFactory(columnNames, col => col.filter().containsIgnoreCase(tableUtils.makeFilterValue(col.type, searchTextTrimmed)), 'or');\n return factory(maybeTable);\n };\n}\n\n/**\n * Create a filter condition factory function.\n * @param columnNames Column names that filter conditions will target\n * @param createColumnCondition Function that can create a `FilterCondition` from\n * a given column. This will be run across all columns corresponding to the given\n * list of column names.\n * @param conditionOperator Operator that will be used to combine multiple\n * `FilterConditions` if multiple column names are given.\n */\nexport function createFilterConditionFactory(columnNames, createColumnCondition) {\n var conditionOperator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'or';\n return function filterConditionFactory(maybeTable) {\n var maybeColumns = maybeTable === null || maybeTable === void 0 ? void 0 : maybeTable.findColumns(typeof columnNames === 'string' ? [columnNames] : columnNames);\n if (maybeColumns == null || maybeColumns.length === 0) {\n return null;\n }\n var filterConditions = maybeColumns.map(createColumnCondition);\n return filterConditions.reduce((current, next) => current[conditionOperator](next));\n };\n}\n\n/**\n * Create a filter condition factory for a filter operator that matches the\n * given value.\n * @param tableUtils TableUtils instance to create filter from\n * @param columnNames Column names to compare value to\n * @param value Value to match\n * @param operator Operator to use for matching\n */\nexport function createValueFilter(tableUtils, columnNames, value, operator) {\n /**\n * Creates a filter condition that matches based on matching a given value.\n * @param maybeTable Table to filter\n */\n return createFilterConditionFactory(columnNames, col => col.filter()[operator](tableUtils.makeFilterValue(col.type, value)), 'or');\n}\n\n/**\n * Create a filter condition factory for a filter that matches a given Selection.\n * If column is not found or selection parameter is 'all', the factory will return\n * null to indicate the results will be unfiltered.\n * @param tableUtils TableUtils instance to create filter from\n * @param columnName The column name to filter\n * @param selection 'all' or an array of values to filter by\n * @param emptySelectionEqAll If true, empty selection means select\n * all. If false, it means select none.\n * @param invertSelection Invert the selection (eg. All items are selected,\n * then you deselect items)\n */\nexport function createSelectedValuesFilter(tableUtils, columnName, selection, emptySelectionEqAll, invertSelection) {\n /**\n * Creates a filter condition that matches rows for selected values. Returns\n * null to indicate no filtering.\n * @param maybeTable the table to filter\n */\n return function selectedValuesFilter(maybeTable) {\n var maybeColumn = maybeTable === null || maybeTable === void 0 ? void 0 : maybeTable.findColumn(columnName);\n var isAllSelected = selection === 'all' || emptySelectionEqAll && selection.size === 0;\n if (maybeColumn == null || isAllSelected) {\n return null;\n }\n return tableUtils.makeSelectValueFilter(maybeColumn, [...selection.keys()], invertSelection);\n };\n}\n\n/**\n * Creates a `notNullOrEmptyFilterCondition` function.\n * @param tableUtils TableUtils instance to use for making filters.\n */\nexport function createNotNullOrEmptyFilterCondition(tableUtils) {\n /**\n * Returns a filter condition that matches values in a given column that are\n * not null or empty string.\n */\n return function notNullOrEmptyFilterCondition(column) {\n return column.filter().isNull().not().and(column.filter().notEq(tableUtils.makeFilterValue(column.type, '')));\n };\n}\n\n/**\n * Creates a `showOnlyEmptyFilterCondition` function that can be toggled on or\n * off.\n * @param tableUtils TableUtils instance to use for making filters.\n * @param isOn Flag to indicate if the filter should be on or off.\n */\nexport function createShowOnlyEmptyFilterCondition(tableUtils, isOn) {\n /**\n * Returns a filter condition that matches values in a given column. If the\n * `isOn` param is true, this will filter to only null or empty string values.\n * If `isOn` is false, it will return a filter that matches all values.\n */\n return function showOnlyEmptyFilterCondition(column) {\n var filter = column.filter();\n var emptyStringValue = tableUtils.makeFilterValue(column.type, '');\n var eqEmptyStringCondition = filter.eq(emptyStringValue);\n if (isOn) {\n return filter.isNull().or(eqEmptyStringCondition);\n }\n\n // If filter is off, return a condition that will always be true\n return eqEmptyStringCondition.or(filter.notEq(emptyStringValue));\n };\n}\n//# sourceMappingURL=FilterUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport class Operator {}\n_defineProperty(Operator, \"not\", 'not');\n_defineProperty(Operator, \"and\", 'and');\n_defineProperty(Operator, \"or\", 'or');\nexport function assertOperatorValue(operator) {\n if (!(operator === 'not' || operator === 'and' || operator === 'or')) {\n throw new Error('operator is not a valid FilterOperatorValue');\n }\n}\n//# sourceMappingURL=Operator.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/** Different filter conditions user can select */\nexport class Type {}\n_defineProperty(Type, \"eq\", 'eq');\n_defineProperty(Type, \"eqIgnoreCase\", 'eqIgnoreCase');\n_defineProperty(Type, \"notEq\", 'notEq');\n_defineProperty(Type, \"notEqIgnoreCase\", 'notEqIgnoreCase');\n_defineProperty(Type, \"greaterThan\", 'greaterThan');\n_defineProperty(Type, \"greaterThanOrEqualTo\", 'greaterThanOrEqualTo');\n_defineProperty(Type, \"lessThan\", 'lessThan');\n_defineProperty(Type, \"lessThanOrEqualTo\", 'lessThanOrEqualTo');\n_defineProperty(Type, \"in\", 'in');\n_defineProperty(Type, \"inIgnoreCase\", 'inIgnoreCase');\n_defineProperty(Type, \"notIn\", 'notIn');\n_defineProperty(Type, \"notInIgnoreCase\", 'notInIgnoreCase');\n_defineProperty(Type, \"isTrue\", 'isTrue');\n_defineProperty(Type, \"isFalse\", 'isFalse');\n_defineProperty(Type, \"isNull\", 'isNull');\n_defineProperty(Type, \"invoke\", 'invoke');\n_defineProperty(Type, \"contains\", 'contains');\n_defineProperty(Type, \"notContains\", 'notContains');\n_defineProperty(Type, \"containsIgnoreCase\", 'containsIgnoreCase');\n_defineProperty(Type, \"startsWith\", 'startsWith');\n_defineProperty(Type, \"endsWith\", 'endsWith');\n_defineProperty(Type, \"containsAny\", 'containsAny');\n//# sourceMappingURL=Type.js.map","import clamp from 'lodash.clamp';\nimport Log from '@deephaven/log';\nvar log = Log.module('ViewportDataUtils');\n\n/**\n * Create a unique string key for a row based on its ordinal position in its\n * source table. This is calculated based on it's offset in the viewport\n * (row.offsetInSnapshot) + the offset of the snapshot.\n * @param row Row from a Table update event.\n * @param offset Offset of the current viewport.\n * @returns Unique string key for the ordinal position of the given row.\n */\nexport function createKeyFromOffsetRow(row, offset) {\n return String(row.offsetInSnapshot + offset);\n}\n\n/**\n * Creates a handler function for a `dh.Table.EVENT_UPDATED` event. Rows that\n * get passed to the handler will be bulk updated in the given `viewportData`\n * object based on their derived item keys.\n * @param viewportData State object for managing a list of KeyedItem data.\n * @param deserializeRow Converts a DH Row to an item object.\n * @returns Handler function for a `dh.Table.EVENT_UPDATED` event.\n */\nexport function createOnTableUpdatedHandler(_ref, deserializeRow) {\n var {\n bulkUpdate\n } = _ref;\n /**\n * Handler for a `dh.Table.EVENT_UPDATED` event.\n */\n return function onTableUpdated(event) {\n var {\n columns,\n offset,\n rows\n } = event.detail;\n log.debug('table updated', event.detail);\n var updateKeyMap = new Map();\n rows.forEach(row => {\n var item = deserializeRow(row, columns);\n var key = createKeyFromOffsetRow(row, offset);\n updateKeyMap.set(key, {\n key,\n item\n });\n });\n log.debug('update keys', updateKeyMap);\n bulkUpdate(updateKeyMap);\n };\n}\n\n/**\n * Maps a Row to a key / value object. Keys are mapped ver batim from column\n * names.\n * @param row Row to map to an item.\n * @param columns Columns to map.\n * @returns A key / value object for the row.\n */\nexport function defaultRowDeserializer(row, columns) {\n return columns.reduce((result, col) => {\n // eslint-disable-next-line no-param-reassign\n result[col.name] = row.get(col);\n return result;\n }, {});\n}\n\n/**\n * For windowing to work, the underlying list needs to maintain a KeyedItem for\n * each row in the backing table (even if these rows haven't been loaded yet).\n * This is needed internally by react-spectrum so it can calculate the content\n * area size. This generator can create a range of empty `KeyedItem` objects.\n * @param start The starting index to generate\n * @param end The ending index to generate\n */\nexport function* generateEmptyKeyedItems(start, end) {\n // eslint-disable-next-line no-plusplus\n for (var i = start; i <= end; ++i) {\n yield {\n key: String(i)\n };\n }\n}\n\n/**\n * Check a Table to see if it is closed before checking its size property. This\n * is important because calling Table.size on a closed table throws an error. If\n * the table is null or closed, return zero. Otherwise, return the current size.\n * @param table The table to check for its size.\n * @returns The size of the table or zero if the table is null or closed.\n */\nexport function getSize(table) {\n return table == null || isClosed(table) ? 0 : table.size;\n}\n\n/**\n * Check if a given table is closed. Tree tables don't have an `isClosed` prop,\n * so will always return false.\n * @param table The table to check if it is closed.\n */\nexport function isClosed(table) {\n if ('isClosed' in table) {\n return table.isClosed;\n }\n return false;\n}\n\n/**\n * Determine the first and last row index for a viewport + extra leading and\n * trailing padding. Values will be \"clamped\" to stay within the table size.\n * @param firstRow Starting row index for the viewport.\n * @param viewportSize Size of the viewport.\n * @param padding Extra rows to add to the viewport. Will be used for leading\n * and trailing rows.\n * @param tableSize Total table size.\n * @returns Tuple containing indices for the first and last row.\n */\nexport function padFirstAndLastRow(firstRow, viewportSize, padding, tableSize) {\n var lastRow = firstRow + viewportSize - 1;\n var [min, max] = [0, tableSize - 1];\n var first = clamp(firstRow - padding, min, max);\n var last = clamp(lastRow + padding, min, max);\n return [first, last];\n}\n//# sourceMappingURL=ViewportDataUtils.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { Type as FilterType, Operator as FilterOperator } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { bindAllMethods, PromiseUtils, removeNullAndUndefined, TextUtils, TimeoutError } from '@deephaven/utils';\nimport DateUtils from \"./DateUtils.js\";\nimport { createValueFilter } from \"./FilterUtils.js\";\nimport { getSize } from \"./ViewportDataUtils.js\";\nvar log = Log.module('TableUtils');\n/** Utility class to provide some functions for working with tables */\nexport class TableUtils {\n // Regex looking for a negative or positive integer or decimal number\n\n /**\n * Copy a given table and apply filters.\n * @param maybeTable Table to copy and apply filters to\n * @param filterFactories Filter condition factories to apply\n * @returns A derived, filtered table\n */\n static copyTableAndApplyFilters(maybeTable) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n if (maybeTable == null) {\n return null;\n }\n var derivedTable = yield maybeTable.copy();\n for (var _len = _arguments.length, filterFactories = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n filterFactories[_key - 1] = _arguments[_key];\n }\n derivedTable.applyFilter(removeNullAndUndefined(...filterFactories.map(f => f(derivedTable))));\n return derivedTable;\n })();\n }\n\n /**\n * Executes a callback on a given table and returns a Promise that will resolve\n * the next time a particular event type fires on the table.\n * @param exec Callback function to execute.\n * @param table Table that gets passed to the `exec` function and that is\n * subscribed to for a given `eventType`.\n * @param eventType The event type to listen for.\n * @param timeout If the event doesn't fire within the timeout, the returned\n * Promise will be rejected.\n * @returns a Promise to the original table that resolves on next `eventType`\n * event\n */\n\n static getSortIndex(sort, columnName) {\n for (var i = 0; i < sort.length; i += 1) {\n var _s$column;\n var s = sort[i];\n if (((_s$column = s.column) === null || _s$column === void 0 ? void 0 : _s$column.name) === columnName) {\n return i;\n }\n }\n return null;\n }\n\n /**\n * @param tableSort The sorts from the table to get the sort from\n * @param columnName The name of the column to get the sort for\n * @returns The sort for the column, or null if it's not sorted\n */\n static getSortForColumn(tableSort, columnName) {\n var sortIndex = TableUtils.getSortIndex(tableSort, columnName);\n if (sortIndex != null) {\n return tableSort[sortIndex];\n }\n return null;\n }\n static getFilterText(filter) {\n if (filter) {\n return filter.toString();\n }\n return null;\n }\n\n /** Return the valid filter types for the column */\n static getFilterTypes(columnType) {\n if (TableUtils.isBooleanType(columnType)) {\n return [FilterType.isTrue, FilterType.isFalse, FilterType.isNull];\n }\n if (TableUtils.isCharType(columnType) || TableUtils.isNumberType(columnType) || TableUtils.isDateType(columnType)) {\n return [FilterType.eq, FilterType.notEq, FilterType.greaterThan, FilterType.greaterThanOrEqualTo, FilterType.lessThan, FilterType.lessThanOrEqualTo];\n }\n if (TableUtils.isTextType(columnType)) {\n return [FilterType.eq, FilterType.eqIgnoreCase, FilterType.notEq, FilterType.notEqIgnoreCase, FilterType.contains, FilterType.notContains, FilterType.startsWith, FilterType.endsWith];\n }\n return [];\n }\n static getNextSort(columns, sorts, columnIndex) {\n if (columnIndex < 0 || columnIndex >= columns.length) {\n return null;\n }\n var sort = TableUtils.getSortForColumn(sorts, columns[columnIndex].name);\n if (sort === null) {\n return columns[columnIndex].sort().asc();\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return sort.desc();\n }\n return null;\n }\n static makeColumnSort(columns, columnIndex, direction, isAbs) {\n if (columnIndex < 0 || columnIndex >= columns.length) {\n return null;\n }\n if (direction === TableUtils.sortDirection.none) {\n return null;\n }\n var sort = columns[columnIndex].sort();\n switch (direction) {\n case TableUtils.sortDirection.ascending:\n sort = sort.asc();\n break;\n case TableUtils.sortDirection.descending:\n sort = sort.desc();\n break;\n default:\n break;\n }\n if (isAbs) {\n sort = sort.abs();\n }\n return sort;\n }\n\n /**\n * Toggles the sort for the specified column\n * @param sorts The current sorts from IrisGrid.state\n * @param columns The columns to apply the sort to\n * @param columnIndex The column index to apply the sort to\n * @param addToExisting Add this sort to the existing sort\n */\n static toggleSortForColumn(sorts, columns, columnIndex) {\n var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (columnIndex < 0 || columnIndex >= columns.length) {\n return [];\n }\n var newSort = TableUtils.getNextSort(columns, sorts, columnIndex);\n return TableUtils.setSortForColumn(sorts, columns[columnIndex].name, newSort, addToExisting);\n }\n static sortColumn(sorts, columns, modelColumn, direction, isAbs, addToExisting) {\n if (modelColumn < 0 || modelColumn >= columns.length) {\n return [];\n }\n var newSort = TableUtils.makeColumnSort(columns, modelColumn, direction, isAbs);\n return TableUtils.setSortForColumn(sorts, columns[modelColumn].name, newSort, addToExisting);\n }\n\n /**\n * Sets the sort for the given column *and* removes any reverses\n * @param tableSort The current sorts from IrisGrid.state\n * @param columnName The column name to apply the sort to\n * @param sort The sort object to add\n * @param addToExisting Add this sort to the existing sort\n * @returns Returns the modified array of sorts - removing reverses\n */\n static setSortForColumn(tableSort, columnName, sort) {\n var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var sortIndex = TableUtils.getSortIndex(tableSort, columnName);\n var sorts = [];\n if (addToExisting) {\n sorts = sorts.concat(tableSort.filter(_ref => {\n var {\n direction\n } = _ref;\n return direction !== TableUtils.sortDirection.reverse;\n }));\n if (sortIndex !== null) {\n sorts.splice(sortIndex, 1);\n }\n }\n if (sort !== null) {\n sorts.push(sort);\n }\n return sorts;\n }\n static getNormalizedType(columnType) {\n switch (columnType) {\n case 'boolean':\n case 'java.lang.Boolean':\n case TableUtils.dataType.BOOLEAN:\n return TableUtils.dataType.BOOLEAN;\n case 'char':\n case 'java.lang.Character':\n case TableUtils.dataType.CHAR:\n return TableUtils.dataType.CHAR;\n case 'java.lang.String':\n case TableUtils.dataType.STRING:\n return TableUtils.dataType.STRING;\n case 'io.deephaven.db.tables.utils.DBDateTime':\n case 'io.deephaven.time.DateTime':\n case 'com.illumon.iris.db.tables.utils.DBDateTime':\n case 'java.time.Instant':\n case 'java.time.ZonedDateTime':\n case TableUtils.dataType.DATETIME:\n return TableUtils.dataType.DATETIME;\n case 'double':\n case 'java.lang.Double':\n case 'float':\n case 'java.lang.Float':\n case 'java.math.BigDecimal':\n case TableUtils.dataType.DECIMAL:\n return TableUtils.dataType.DECIMAL;\n case 'int':\n case 'java.lang.Integer':\n case 'long':\n case 'java.lang.Long':\n case 'short':\n case 'java.lang.Short':\n case 'byte':\n case 'java.lang.Byte':\n case 'java.math.BigInteger':\n case TableUtils.dataType.INT:\n return TableUtils.dataType.INT;\n default:\n return TableUtils.dataType.UNKNOWN;\n }\n }\n static isLongType(columnType) {\n switch (columnType) {\n case 'long':\n case 'java.lang.Long':\n return true;\n default:\n return false;\n }\n }\n static isDateType(columnType) {\n switch (columnType) {\n case 'io.deephaven.db.tables.utils.DBDateTime':\n case 'io.deephaven.time.DateTime':\n case 'java.time.Instant':\n case 'java.time.ZonedDateTime':\n case 'com.illumon.iris.db.tables.utils.DBDateTime':\n return true;\n default:\n return false;\n }\n }\n static isNumberType(columnType) {\n return TableUtils.isIntegerType(columnType) || TableUtils.isDecimalType(columnType);\n }\n static isIntegerType(columnType) {\n switch (columnType) {\n case 'int':\n case 'java.lang.Integer':\n case 'java.math.BigInteger':\n case 'long':\n case 'java.lang.Long':\n case 'short':\n case 'java.lang.Short':\n case 'byte':\n case 'java.lang.Byte':\n return true;\n default:\n return false;\n }\n }\n static isDecimalType(columnType) {\n switch (columnType) {\n case 'double':\n case 'java.lang.Double':\n case 'java.math.BigDecimal':\n case 'float':\n case 'java.lang.Float':\n return true;\n default:\n return false;\n }\n }\n static isBigDecimalType(columnType) {\n switch (columnType) {\n case 'java.math.BigDecimal':\n return true;\n default:\n return false;\n }\n }\n static isBigIntegerType(columnType) {\n switch (columnType) {\n case 'java.math.BigInteger':\n return true;\n default:\n return false;\n }\n }\n static isBooleanType(columnType) {\n switch (columnType) {\n case 'boolean':\n case 'java.lang.Boolean':\n return true;\n default:\n return false;\n }\n }\n static isCharType(columnType) {\n switch (columnType) {\n case 'char':\n case 'java.lang.Character':\n return true;\n default:\n return false;\n }\n }\n static isStringType(columnType) {\n switch (columnType) {\n case 'java.lang.String':\n return true;\n default:\n return false;\n }\n }\n static isTextType(columnType) {\n return this.isStringType(columnType) || this.isCharType(columnType);\n }\n\n /**\n * Get base column type\n * @param columnType Column type\n * @returns Element type for array columns, original type for non-array columns\n */\n static getBaseType(columnType) {\n return columnType.split('[]')[0];\n }\n\n /**\n * Check if the column types are compatible\n * @param type1 Column type to check\n * @param type2 Column type to check\n * @returns True, if types are compatible\n */\n static isCompatibleType(type1, type2) {\n return TableUtils.getNormalizedType(type1) === TableUtils.getNormalizedType(type2);\n }\n\n /**\n * Adds quotes to a value if they're not already added\n * @param value Value to add quotes around\n */\n static quoteValue(value) {\n if (value.length >= 2 && (value.charAt(0) === '\"' && value.charAt(value.length - 1) === '\"' || value.charAt(0) === \"'\" && value.charAt(value.length - 1) === \"'\")) {\n return value;\n }\n return \"\\\"\".concat(value, \"\\\"\");\n }\n static isRangeOperation(operation) {\n switch (operation) {\n case '<':\n case '<=':\n case '=<':\n case '>':\n case '>=':\n case '=>':\n return true;\n default:\n return false;\n }\n }\n\n /**\n * @param filter The column filter to apply the range operation to\n * @param operation The range operation to run\n * @param value The value to use for the operation\n * @returns The condition with the specified operation\n */\n static makeRangeFilterWithOperation(filter, operation, value) {\n switch (operation) {\n case '=':\n return filter.eq(value);\n case '<':\n return filter.lessThan(value);\n case '<=':\n case '=<':\n return filter.lessThanOrEqualTo(value);\n case '>':\n return filter.greaterThan(value);\n case '>=':\n case '=>':\n return filter.greaterThanOrEqualTo(value);\n case '!=':\n case '!':\n return filter.notEq(value);\n default:\n return null;\n }\n }\n\n /**\n * Wraps a table promise in a cancelable promise that will close the table if the promise is cancelled.\n * Use in a component that loads a table, and call cancel when unmounting.\n * @param table The table promise to wrap\n */\n static makeCancelableTablePromise(table) {\n return PromiseUtils.makeCancelable(table, resolved => {\n resolved.close();\n });\n }\n\n /**\n * Make a cancelable promise for a one-shot table event with a timeout.\n * @param table Table to listen for events on\n * @param eventName Event to listen for\n * @param timeout Event timeout in milliseconds, defaults to 0\n * @param matcher Optional function to determine if the promise can be resolved or stays pending\n * @returns Resolves with the event data\n */\n static makeCancelableTableEventPromise(table, eventName) {\n var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var matcher = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var eventCleanup;\n var timeoutId;\n var isPending = true;\n var wrappedPromise = new Promise((resolve, reject) => {\n timeoutId = setTimeout(() => {\n eventCleanup();\n isPending = false;\n reject(new TimeoutError(\"Event \\\"\".concat(eventName, \"\\\" timed out.\")));\n }, timeout);\n eventCleanup = table.addEventListener(eventName, event => {\n if (matcher != null && !matcher(event)) {\n log.debug2('Event triggered, but matcher returned false.');\n return;\n }\n log.debug2('Event triggered, resolving.');\n eventCleanup();\n clearTimeout(timeoutId);\n isPending = false;\n resolve(event);\n });\n });\n wrappedPromise.cancel = () => {\n if (isPending) {\n log.debug2('Pending promise cleanup.');\n eventCleanup();\n clearTimeout(timeoutId);\n isPending = false;\n return;\n }\n log.debug2('Ignoring non-pending promise cancel.');\n };\n return wrappedPromise;\n }\n static removeCommas(value) {\n return value.replace(/[\\s|,]/g, '');\n }\n static makeBooleanValue(text) {\n var allowEmpty = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (text === '' && allowEmpty) {\n return null;\n }\n switch (text === null || text === void 0 ? void 0 : text.toLowerCase()) {\n case 'null':\n return null;\n case '0':\n case 'f':\n case 'fa':\n case 'fal':\n case 'fals':\n case 'false':\n case 'n':\n case 'no':\n return false;\n case '1':\n case 't':\n case 'tr':\n case 'tru':\n case 'true':\n case 'y':\n case 'ye':\n case 'yes':\n return true;\n default:\n throw new Error(\"Invalid boolean '\".concat(text, \"'\"));\n }\n }\n static makeNumberValue(text) {\n if (text === 'null' || text === '') {\n return null;\n }\n var cleanText = text.toLowerCase().trim();\n if (cleanText === '∞' || cleanText === 'infinity' || cleanText === 'inf') {\n return Number.POSITIVE_INFINITY;\n }\n if (cleanText === '-∞' || cleanText === '-infinity' || cleanText === '-inf') {\n return Number.NEGATIVE_INFINITY;\n }\n var numberText = TableUtils.removeCommas(cleanText);\n if (TableUtils.NUMBER_REGEX.test(numberText)) {\n return parseFloat(numberText);\n }\n throw new Error(\"Invalid number '\".concat(text, \"'\"));\n }\n static getFilterOperatorString(operation) {\n switch (operation) {\n case FilterType.eq:\n return '=';\n case FilterType.notEq:\n return '!=';\n case FilterType.greaterThan:\n return '>';\n case FilterType.greaterThanOrEqualTo:\n return '>=';\n case FilterType.lessThan:\n return '<';\n case FilterType.lessThanOrEqualTo:\n return '<=';\n case FilterType.contains:\n return '~';\n case FilterType.notContains:\n return '!~';\n default:\n throw new Error(\"Unexpected filter type \".concat(operation));\n }\n }\n static isPartitionedTable(table) {\n return table != null && table.getMergedTable !== undefined && table.getKeyTable !== undefined && table.getKeys !== undefined;\n }\n static isTreeTable(table) {\n return table != null && table.expand !== undefined && table.collapse !== undefined;\n }\n\n /**\n * Copies the provided array, sorts by column name case insensitive, and returns the sorted array.\n * @param columns The columns to sort\n * @param isAscending Whether to sort ascending\n */\n static sortColumns(columns) {\n var isAscending = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return [...columns].sort((a, b) => {\n var aName = a.name.toUpperCase();\n var bName = b.name.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n }\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n this.dh = dh;\n bindAllMethods(this);\n }\n\n /**\n * Create a table containing a distinct list of values for given column name and\n * applies the given sort direction.\n * @param table Source table to derive table from\n * @param columnName Column to dermine distinct values\n * @param sortDirection Direction to sort\n * @param filterConditionFactories Optional filters to apply. Note that these\n * will be applied before the `selectCall` in case we need to base the filtering\n * on columns other than the distinct value column\n */\n createDistinctSortedColumnTable(table, columnName, sortDirection) {\n var _arguments2 = arguments,\n _this = this;\n return _asyncToGenerator(function* () {\n if (table == null) {\n return null;\n }\n var sourceTable = table;\n\n // Applying filters before `selectDistinct` so that we still have access to\n // all columns. Also prevents a filter applied to the final table from\n // clearing this filter.\n for (var _len2 = _arguments2.length, filterConditionFactories = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {\n filterConditionFactories[_key2 - 3] = _arguments2[_key2];\n }\n if (filterConditionFactories.length > 0) {\n sourceTable = yield table.copy();\n yield sourceTable.applyFilter(removeNullAndUndefined(...filterConditionFactories.map(f => f(sourceTable))));\n }\n var column = sourceTable.findColumn(columnName);\n var distinctTable = yield sourceTable.selectDistinct([column]);\n\n // If we copied the table, dispose the copy. Original is managed outside\n // of this function\n if (sourceTable !== table) {\n sourceTable.close();\n }\n var distinctAscColSort = distinctTable.findColumn(columnName).sort()[sortDirection]();\n return _this.applySort(distinctTable, [distinctAscColSort]);\n })();\n }\n\n /**\n * Check if any columns contain a given value.\n * @param table Table to search for values\n * @param columnNames Column names to search\n * @param value Value to search for\n * @param isCaseSensitive Whether the value check is case sensitive\n */\n doesColumnValueExist(table, columnNames, value, isCaseSensitive) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (table == null) {\n return null;\n }\n var filterConditionFactory = createValueFilter(_this2, columnNames, value, isCaseSensitive ? 'eq' : 'eqIgnoreCase');\n var tableCopy = yield table.copy();\n yield _this2.applyFilter(tableCopy, removeNullAndUndefined(filterConditionFactory(tableCopy)));\n var size = getSize(tableCopy);\n tableCopy.close();\n return size > 0;\n })();\n }\n\n /**\n * Create filter with the provided column and text. Handles multiple filters joined with && or ||\n * @param column The column to set the filter on\n * @param text The text string to create the filter from\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns Returns the created filter, null if text could not be parsed\n */\n makeQuickFilter(column, text, timeZone) {\n var orComponents = text.split('||');\n var orFilter = null;\n for (var i = 0; i < orComponents.length; i += 1) {\n var orComponent = orComponents[i];\n var andComponents = orComponent.split('&&');\n var andFilter = null;\n for (var j = 0; j < andComponents.length; j += 1) {\n var andComponent = andComponents[j].trim();\n if (andComponent.length > 0) {\n var filter = this.makeQuickFilterFromComponent(column, andComponent, timeZone);\n if (filter) {\n if (andFilter) {\n andFilter = andFilter.and(filter);\n } else {\n andFilter = filter;\n }\n } else {\n throw new Error(\"Unable to parse quick filter from text \".concat(text));\n }\n }\n }\n if (orFilter && andFilter) {\n orFilter = orFilter.or(andFilter);\n } else {\n orFilter = andFilter;\n }\n }\n return orFilter;\n }\n\n /**\n * Create filter with the provided column and text of one component (no multiple conditions)\n * @param column The column to set the filter on\n * @param text The text string to create the filter from\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns Returns the created filter, null if text could not be parsed\n */\n makeQuickFilterFromComponent(column, text, timeZone) {\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type)) {\n return this.makeQuickNumberFilter(column, text);\n }\n if (TableUtils.isBooleanType(type)) {\n return this.makeQuickBooleanFilter(column, text);\n }\n if (timeZone != null && TableUtils.isDateType(type)) {\n return this.makeQuickDateFilter(column, text, timeZone);\n }\n if (TableUtils.isCharType(type)) {\n return this.makeQuickCharFilter(column, text);\n }\n return this.makeQuickTextFilter(column, text);\n }\n makeQuickNumberFilter(column, text) {\n var columnFilter = column.filter();\n var {\n dh\n } = this;\n var filter = null;\n var regex = /\\s*(>=|<=|=>|=<|>|<|!=|=|!)?(\\s*-\\s*)?(\\s*\\d*(?:,\\d{3})*(?:\\.\\d*)?\\s*)?(null|nan|infinity|inf|\\u221E)?(.*)/i;\n var result = regex.exec(text);\n var operation = null;\n var negativeSign = null;\n var value = null;\n var abnormalValue = null; // includes nan, null and infinity(positive & negative)\n var overflow = null;\n if (result !== null && result.length > 3) {\n [, operation, negativeSign, value, abnormalValue, overflow] = result;\n }\n if (overflow != null && overflow.trim().length > 0) {\n // Some bad characters after the number, bail out!\n return null;\n }\n if (operation == null) {\n operation = '=';\n }\n if (abnormalValue != null) {\n if (!(operation === '=' || operation === '!' || operation === '!=')) {\n // only equal and not equal operations are supported for abnormal value filter\n return null;\n }\n abnormalValue = abnormalValue.trim().toLowerCase();\n switch (abnormalValue) {\n case 'null':\n filter = columnFilter.isNull();\n break;\n case 'nan':\n filter = dh.FilterCondition.invoke('isNaN', columnFilter);\n break;\n case 'infinity':\n case 'inf':\n case '\\u221E':\n if (negativeSign != null) {\n filter = dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.lessThan(dh.FilterValue.ofNumber(0)));\n } else {\n filter = dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.greaterThan(dh.FilterValue.ofNumber(0)));\n }\n break;\n default:\n break;\n }\n if (filter !== null && (operation === '!' || operation === '!=')) {\n filter = filter.not();\n }\n return filter;\n }\n if (value == null) {\n return null;\n }\n value = TableUtils.removeCommas(value);\n if (TableUtils.isLongType(column.type)) {\n try {\n value = dh.FilterValue.ofNumber(dh.LongWrapper.ofString(\"\".concat(negativeSign != null ? '-' : '').concat(value)));\n } catch (error) {\n log.warn('Unable to create long filter', error);\n return null;\n }\n } else {\n value = parseFloat(value);\n if (value == null || Number.isNaN(value)) {\n return null;\n }\n value = dh.FilterValue.ofNumber(negativeSign != null ? 0 - value : value);\n }\n filter = column.filter();\n return TableUtils.makeRangeFilterWithOperation(filter, operation, value);\n }\n\n /**\n * Given a text string from a table, escape quick filter operators in string with \\\n * ex. =test returns \\=test, null returns \\null\n * @param string quickfilter string to escape\n * @returns escaped string\n */\n static escapeQuickTextFilter(quickFilterText) {\n var _operation, _value2;\n if (quickFilterText == null) return null;\n var regex = /^(!~|!=|~|=|!)?(.*)/;\n // starts with zero or more \\ followed by and ending with null\n var nullRegex = /^\\\\*null$/;\n var result = regex.exec(quickFilterText);\n var operation = null;\n var value = null;\n if (result !== null && result.length > 2) {\n [, operation, value] = result;\n }\n if (operation != null) {\n var _value;\n return \"\\\\\".concat(operation).concat((_value = value) !== null && _value !== void 0 ? _value : '');\n }\n if (value != null && nullRegex.test(value.toLowerCase())) {\n // adds an extra escape character to matching value\n return \"\\\\\".concat(value);\n }\n if (value != null && value.startsWith('*')) {\n return \"\\\\\".concat(value);\n }\n if (value != null && value.endsWith('*') && !value.endsWith('\\\\*')) {\n value = value.substring(0, value.length - 1);\n return \"\".concat(value, \"\\\\*\");\n }\n return \"\".concat((_operation = operation) !== null && _operation !== void 0 ? _operation : '').concat((_value2 = value) !== null && _value2 !== void 0 ? _value2 : \"\");\n }\n\n /**\n * Given an escaped quick filter, unescape the operators for giving it to the js api\n * ex. \\=test returns =test, \\null returns null\n * @param string quickfilter string to escape\n * @returns escaped string\n */\n static unescapeQuickTextFilter(quickFilterText) {\n var _operation2, _value3;\n var regex = /^(\\\\!~|\\\\!=|\\\\~|\\\\=|\\\\!)?(.*)/;\n // starts with zero or more \\ followed by and ending with null\n var nullRegex = /^\\\\*null$/;\n var result = regex.exec(quickFilterText);\n var operation = null;\n var value = null;\n if (result !== null && result.length > 2) {\n [, operation, value] = result;\n }\n if (operation != null) {\n operation = operation.replace('\\\\', '');\n }\n if (value != null && nullRegex.test(value.toLowerCase())) {\n // removes the first occurance of the backslash\n value = value.replace('\\\\', '');\n }\n if (operation == null && value != null && value.startsWith('\\\\*')) {\n value = value.substring(1);\n }\n if (operation == null && value != null && value.endsWith('\\\\*')) {\n value = value.substring(0, value.length - 2);\n return \"\".concat(value, \"*\");\n }\n return \"\".concat((_operation2 = operation) !== null && _operation2 !== void 0 ? _operation2 : '').concat((_value3 = value) !== null && _value3 !== void 0 ? _value3 : \"\");\n }\n makeQuickTextFilter(column, text) {\n var {\n dh\n } = this;\n var cleanText = \"\".concat(text).trim();\n var regex = /^(!~|!=|~|=|!)?(.*)/;\n var result = regex.exec(cleanText);\n var operation = null;\n var value = null;\n if (result !== null && result.length > 2) {\n [, operation, value] = result;\n if (value != null) {\n value = value.trim();\n }\n }\n if (value == null) {\n return null;\n }\n\n // allow empty strings, but only for explicit equal and not equal\n if (value.length === 0 && !(operation === '=' || operation === '!=')) {\n return null;\n }\n\n // no operation is treated as an implicit equals\n if (operation == null) {\n operation = '=';\n }\n var filter = column.filter();\n if (value.toLowerCase() === 'null') {\n // Null is a special case!\n switch (operation) {\n case '=':\n return filter.isNull();\n case '!=':\n case '!':\n return filter.isNull().not();\n default:\n // For all other operations, treat null as a string value\n }\n }\n\n var prefix = null;\n var suffix = null;\n if (value.startsWith('*')) {\n prefix = '*';\n value = value.substring(1);\n } else if (value.endsWith('*') && !value.endsWith('\\\\*')) {\n suffix = '*';\n value = value.substring(0, value.length - 1);\n }\n\n // unescape any escaped operators to allow search for literal operators\n value = TableUtils.unescapeQuickTextFilter(value);\n switch (operation) {\n case '~':\n {\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))));\n }\n case '!~':\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))).not());\n case '!=':\n if (prefix === '*') {\n // Does not end with\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E$\"))).not());\n }\n if (suffix === '*') {\n // Does not start with\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i)^\\\\Q\".concat(value, \"\\\\E.*\"))).not());\n }\n return filter.notEqIgnoreCase(dh.FilterValue.ofString(value.toLowerCase()));\n case '=':\n if (prefix === '*') {\n // Ends with\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E$\"))));\n }\n if (suffix === '*') {\n // Starts with\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i)^\\\\Q\".concat(value, \"\\\\E.*\"))));\n }\n return filter.eqIgnoreCase(dh.FilterValue.ofString(value.toLowerCase()));\n default:\n break;\n }\n return null;\n }\n\n // eslint-disable-next-line class-methods-use-this\n makeQuickBooleanFilter(column, text) {\n var regex = /^(!=|=|!)?(.*)/;\n var result = regex.exec(\"\".concat(text).trim());\n if (result === null) {\n return null;\n }\n var [, operation, value] = result;\n var notEqual = operation === '!' || operation === '!=';\n var cleanValue = value.trim().toLowerCase();\n var filter = column.filter();\n try {\n var boolValue = TableUtils.makeBooleanValue(cleanValue);\n if (boolValue != null && boolValue) {\n filter = filter.isTrue();\n } else if (boolValue === null) {\n filter = filter.isNull();\n } else {\n filter = filter.isFalse();\n }\n return notEqual ? filter.not() : filter;\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Builds a date filter parsed from the text string which may or may not include an operator.\n * @param column The column to build the filter from, with or without a leading operator.\n * @param text The date string text to parse.\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n */\n makeQuickDateFilter(column, text, timeZone) {\n var cleanText = text.trim();\n var regex = /\\s*(>=|<=|=>|=<|>|<|!=|!|=)?(.*)/;\n var result = regex.exec(cleanText);\n if (result == null || result.length <= 2) {\n throw new Error(\"Unable to parse date filter: \".concat(text));\n }\n var operation = null;\n var dateText = null;\n [, operation, dateText] = result;\n var filterOperation = FilterType.eq;\n switch (operation) {\n case '<':\n filterOperation = FilterType.lessThan;\n break;\n case '<=':\n case '=<':\n filterOperation = FilterType.lessThanOrEqualTo;\n break;\n case '>':\n filterOperation = FilterType.greaterThan;\n break;\n case '>=':\n case '=>':\n filterOperation = FilterType.greaterThanOrEqualTo;\n break;\n case '!=':\n case '!':\n filterOperation = FilterType.notEq;\n break;\n case '=':\n case '==':\n default:\n filterOperation = FilterType.eq;\n break;\n }\n return this.makeQuickDateFilterWithOperation(column, dateText, filterOperation, timeZone);\n }\n\n /**\n * Builds a date filter parsed from the text string with the provided filter.\n * @param column The column to build the filter from.\n * @param text The date string text to parse, without an operator.\n * @param operation The filter operation to use.\n * @param timeZone The time zone to make this filter with. E.g. America/New_York\n */\n makeQuickDateFilterWithOperation(column, text, operation, timeZone) {\n var {\n dh\n } = this;\n var [startDate, endDate] = DateUtils.parseDateRange(dh, text, timeZone);\n var startValue = startDate != null ? dh.FilterValue.ofNumber(startDate) : null;\n var endValue = endDate != null ? dh.FilterValue.ofNumber(endDate) : null;\n var filter = column.filter();\n if (startValue == null) {\n return operation === FilterType.notEq ? filter.isNull().not() : filter.isNull();\n }\n switch (operation) {\n case FilterType.eq:\n {\n if (endValue != null) {\n var startFilter = filter.greaterThanOrEqualTo(startValue);\n var endFilter = filter.lessThan(endValue);\n return startFilter.and(endFilter);\n }\n return filter.eq(startValue);\n }\n case FilterType.lessThan:\n {\n return filter.lessThan(startValue);\n }\n case FilterType.lessThanOrEqualTo:\n {\n if (endValue != null) {\n return filter.lessThan(endValue);\n }\n return filter.lessThanOrEqualTo(startValue);\n }\n case FilterType.greaterThan:\n {\n if (endValue != null) {\n return filter.greaterThanOrEqualTo(endValue);\n }\n return filter.greaterThan(startValue);\n }\n case FilterType.greaterThanOrEqualTo:\n return filter.greaterThanOrEqualTo(startValue);\n case FilterType.notEq:\n {\n if (endValue != null) {\n var _startFilter = filter.lessThan(startValue);\n var _endFilter = filter.greaterThanOrEqualTo(endValue);\n return _startFilter.or(_endFilter);\n }\n return filter.notEq(startValue);\n }\n default:\n throw new Error(\"Invalid operator: \".concat(operation));\n }\n }\n makeQuickCharFilter(column, text) {\n var {\n dh\n } = this;\n var cleanText = \"\".concat(text).trim();\n var regex = /^(>=|<=|=>|=<|>|<|!=|=|!)?(null|\".\"|'.'|.)?(.*)/;\n var result = regex.exec(cleanText);\n var operation = null;\n var value = null;\n var overflow = null;\n if (result !== null && result.length > 3) {\n [, operation, value, overflow] = result;\n }\n if (overflow != null && overflow.trim().length > 0) {\n // Some bad characters after the number, bail out!\n return null;\n }\n if (value == null || value.length === 0) {\n return null;\n }\n if (operation == null) {\n operation = '=';\n }\n var filter = column.filter();\n if (value.toLowerCase() === 'null') {\n // Null is a special case!\n switch (operation) {\n case '=':\n return filter.isNull();\n case '!=':\n case '!':\n return filter.isNull().not();\n default:\n return null;\n }\n }\n\n // We need to put quotes around range operations or else the API fails\n var filterValue = dh.FilterValue.ofString(TableUtils.isRangeOperation(operation) ? TableUtils.quoteValue(value) : value);\n return TableUtils.makeRangeFilterWithOperation(filter, operation, filterValue);\n }\n makeAdvancedFilter(column, options, timeZone) {\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues\n } = options;\n var filter = null;\n for (var i = 0; i < filterItems.length; i += 1) {\n var filterItem = filterItems[i];\n var {\n selectedType,\n value\n } = filterItem;\n if (selectedType != null && selectedType.length > 0 && value != null && value.length > 0) {\n try {\n var newFilter = this.makeAdvancedValueFilter(column, selectedType, value, timeZone);\n if (newFilter != null) {\n if (i === 0) {\n filter = newFilter;\n } else if (filter !== null && i - 1 < filterOperators.length) {\n var filterOperator = filterOperators[i - 1];\n if (filterOperator === FilterOperator.and) {\n filter = filter.and(newFilter);\n } else if (filterOperator === FilterOperator.or) {\n filter = filter.or(newFilter);\n } else {\n log.error('Unexpected filter operator', filterOperator, newFilter);\n filter = null;\n break;\n }\n }\n } else {\n log.debug2('Empty filter ignored for', selectedType, value);\n }\n } catch (err) {\n log.error('Unable to create filter', err);\n filter = null;\n break;\n }\n }\n }\n var selectValueFilter = this.makeSelectValueFilter(column, selectedValues, invertSelection);\n if (selectValueFilter != null) {\n if (filter != null) {\n filter = filter.and(selectValueFilter);\n } else {\n filter = selectValueFilter;\n }\n }\n return filter;\n }\n makeAdvancedValueFilter(column, operation, value, timeZone) {\n var {\n dh\n } = this;\n if (TableUtils.isDateType(column.type)) {\n return this.makeQuickDateFilterWithOperation(column, value, operation, timeZone);\n }\n if (TableUtils.isNumberType(column.type) || TableUtils.isCharType(column.type)) {\n return this.makeQuickFilter(column, \"\".concat(TableUtils.getFilterOperatorString(operation)).concat(value));\n }\n var filterValue = this.makeFilterValue(column.type, value);\n var filter = column.filter();\n switch (operation) {\n case FilterType.eq:\n return filter.eq(filterValue);\n case FilterType.eqIgnoreCase:\n return filter.eqIgnoreCase(filterValue);\n case FilterType.notEq:\n return filter.notEq(filterValue);\n case FilterType.notEqIgnoreCase:\n return filter.notEqIgnoreCase(filterValue);\n case FilterType.greaterThan:\n return filter.greaterThan(filterValue);\n case FilterType.greaterThanOrEqualTo:\n return filter.greaterThanOrEqualTo(filterValue);\n case FilterType.lessThan:\n return filter.lessThan(filterValue);\n case FilterType.lessThanOrEqualTo:\n return filter.lessThanOrEqualTo(filterValue);\n case FilterType.isTrue:\n return filter.isTrue();\n case FilterType.isFalse:\n return filter.isFalse();\n case FilterType.isNull:\n return filter.isNull();\n case FilterType.contains:\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))));\n case FilterType.notContains:\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))).not());\n case FilterType.startsWith:\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i)^\\\\Q\".concat(value, \"\\\\E.*\"))));\n case FilterType.endsWith:\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E$\"))));\n case FilterType.in:\n case FilterType.inIgnoreCase:\n case FilterType.notIn:\n case FilterType.notInIgnoreCase:\n case FilterType.invoke:\n default:\n throw new Error(\"Unexpected filter operation: \".concat(operation));\n }\n }\n\n /**\n * Apply a filter to a table that won't match anything.\n * @table The table to apply the filter to\n * @columnName The name of the column to apploy the filter to\n * @param timeout Timeout before cancelling the promise that waits for the next\n * dh.Table.EVENT_FILTERCHANGED event\n * @returns a Promise to the Table that resolves after the next\n * dh.Table.EVENT_FILTERCHANGED event\n */\n applyNeverFilter(table, columnName) {\n var _arguments3 = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments3.length > 2 && _arguments3[2] !== undefined ? _arguments3[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n if (table == null) {\n return null;\n }\n var column = table.findColumn(columnName);\n var filters = [_this3.makeNeverFilter(column)];\n yield _this3.applyFilter(table, filters, timeout);\n return table;\n })();\n }\n\n /**\n * Apply custom columns to a given table. Return a Promise that resolves with\n * the table once the dh.Table.EVENT_CUSTOMCOLUMNSCHANGED event has fired.\n * @param table The table to apply custom columns to.\n * @param columns The list of column expressions or definitions to apply.\n * @returns A Promise that will be resolved with the given table after the\n * columns are applied.\n */\n applyCustomColumns(table, columns) {\n var _arguments4 = arguments,\n _this4 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments4.length > 2 && _arguments4[2] !== undefined ? _arguments4[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n var {\n dh\n } = _this4;\n return TableUtils.executeAndWaitForEvent(t => t === null || t === void 0 ? void 0 : t.applyCustomColumns(columns), table, dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, timeout);\n })();\n }\n\n /**\n * Apply filters to a given table.\n * @param table Table to apply filters to\n * @param filters Filters to apply\n * @param timeout Timeout before cancelling the promise that waits for the next\n * dh.Table.EVENT_FILTERCHANGED event\n * @returns a Promise to the Table that resolves after the next\n * dh.Table.EVENT_FILTERCHANGED event\n */\n applyFilter(table, filters) {\n var _arguments5 = arguments,\n _this5 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments5.length > 2 && _arguments5[2] !== undefined ? _arguments5[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n var {\n dh\n } = _this5;\n return TableUtils.executeAndWaitForEvent(t => t === null || t === void 0 ? void 0 : t.applyFilter(filters), table, dh.Table.EVENT_FILTERCHANGED, timeout);\n })();\n }\n\n /**\n * Apply sorts to a given Table.\n * @param table The table to apply sorts to\n * @param sorts The sorts to apply\n * @param timeout Timeout before cancelling the promise that waits for the next\n * dh.Table.EVENT_SORTCHANGED event\n * @returns a Promise to the Table that resolves after the next\n * dh.Table.EVENT_SORTCHANGED event\n */\n applySort(table, sorts) {\n var _arguments6 = arguments,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments6.length > 2 && _arguments6[2] !== undefined ? _arguments6[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n var {\n dh\n } = _this6;\n return TableUtils.executeAndWaitForEvent(t => t === null || t === void 0 ? void 0 : t.applySort(sorts), table, dh.Table.EVENT_SORTCHANGED, timeout);\n })();\n }\n\n /**\n * Create a filter condition that results in zero results for a given column\n * @param column\n */\n makeNeverFilter(column) {\n var {\n dh\n } = this;\n var value = null;\n if (TableUtils.isTextType(column.type)) {\n // Use 'a' so that it can work for String or Character types\n value = dh.FilterValue.ofString('a');\n } else if (TableUtils.isBooleanType(column.type)) {\n value = dh.FilterValue.ofBoolean(true);\n } else if (TableUtils.isDateType(column.type)) {\n value = dh.FilterValue.ofNumber(dh.DateWrapper.ofJsDate(new Date()));\n } else {\n value = dh.FilterValue.ofNumber(0);\n }\n var eqFilter = column.filter().eq(value);\n var notEqFilter = column.filter().notEq(value);\n return eqFilter.and(notEqFilter);\n }\n\n /**\n * @param columnType The column type to make the filter value from.\n * @param value The value to make the filter value from.\n * @returns The FilterValue item for this column/value combination\n */\n makeFilterValue(columnType, value) {\n var {\n dh\n } = this;\n var type = TableUtils.getBaseType(columnType);\n if (TableUtils.isTextType(type)) {\n return dh.FilterValue.ofString(value);\n }\n if (TableUtils.isLongType(type)) {\n return dh.FilterValue.ofNumber(dh.LongWrapper.ofString(TableUtils.removeCommas(value)));\n }\n return dh.FilterValue.ofNumber(TableUtils.removeCommas(value));\n }\n\n /**\n * Takes a value and converts it to an `dh.FilterValue`\n *\n * @param columnType The column type to make the filter value from.\n * @param value The value to actually set\n * @returns The FilterValue item for this column/value combination\n */\n makeFilterRawValue(columnType, rawValue) {\n var {\n dh\n } = this;\n if (TableUtils.isCharType(columnType)) {\n return dh.FilterValue.ofString(typeof rawValue === 'number' ? String.fromCharCode(rawValue) : rawValue);\n }\n if (TableUtils.isTextType(columnType)) {\n return dh.FilterValue.ofString(rawValue);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return dh.FilterValue.ofBoolean(rawValue);\n }\n return dh.FilterValue.ofNumber(rawValue);\n }\n\n /**\n * Converts a string value to a value appropriate for the column\n * @param columnType The column type to make the value for\n * @param text The string value to make a type for\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n makeValue(columnType, text, timeZone) {\n var {\n dh\n } = this;\n if (text === 'null') {\n return null;\n }\n if (TableUtils.isTextType(columnType)) {\n return text;\n }\n if (TableUtils.isLongType(columnType)) {\n return dh.LongWrapper.ofString(TableUtils.removeCommas(text));\n }\n if (TableUtils.isBooleanType(columnType)) {\n return TableUtils.makeBooleanValue(text, true);\n }\n if (TableUtils.isDateType(columnType)) {\n var [date] = DateUtils.parseDateRange(dh, text, timeZone);\n return date;\n }\n if (TableUtils.isNumberType(columnType)) {\n return TableUtils.makeNumberValue(text);\n }\n log.error('Unexpected column type', columnType);\n return null;\n }\n\n /**\n * Create a filter using the selected items\n * Has a flag for invertSelection as we start from a \"Select All\" state and a user just deselects items.\n * Since there may be millions of distinct items, it's easier to build an inverse filter.\n * @param column The column to set the filter on\n * @param selectedValues The values that are selected\n * @param invertSelection Invert the selection (eg. All items are selected, then you deselect items)\n * @returns Returns a `in` or `notIn` FilterCondition as necessary, or null if no filtering should be applied (everything selected)\n */\n makeSelectValueFilter(column, selectedValues, invertSelection) {\n var {\n dh\n } = this;\n if (selectedValues.length === 0) {\n if (invertSelection) {\n // No filter means select everything\n return null;\n }\n\n // KLUDGE: Return a conflicting filter to show no results.\n // Could recognize this situation at a higher or lower level and pause updates on the\n // table, but this situation should be rare and that wouldn't be much gains for some added complexity\n return this.makeNeverFilter(column);\n }\n var values = [];\n var isNullSelected = false;\n for (var i = 0; i < selectedValues.length; i += 1) {\n var value = selectedValues[i];\n if (value == null) {\n isNullSelected = true;\n } else if (TableUtils.isTextType(column.type)) {\n values.push(dh.FilterValue.ofString(typeof value === 'number' ? String.fromCharCode(value) : value));\n } else if (TableUtils.isBooleanType(column.type)) {\n values.push(dh.FilterValue.ofBoolean(Boolean(value)));\n } else {\n values.push(dh.FilterValue.ofNumber(value));\n }\n }\n if (isNullSelected) {\n if (values.length > 0) {\n if (invertSelection) {\n return column.filter().isNull().not().and(column.filter().notIn(values));\n }\n return column.filter().isNull().or(column.filter().in(values));\n }\n if (invertSelection) {\n return column.filter().isNull().not();\n }\n return column.filter().isNull();\n }\n if (invertSelection) {\n return column.filter().notIn(values);\n }\n return column.filter().in(values);\n }\n}\n_defineProperty(TableUtils, \"dataType\", {\n BOOLEAN: 'boolean',\n CHAR: 'char',\n DATETIME: 'datetime',\n DECIMAL: 'decimal',\n INT: 'int',\n STRING: 'string',\n UNKNOWN: 'unknown'\n});\n_defineProperty(TableUtils, \"sortDirection\", {\n ascending: 'ASC',\n descending: 'DESC',\n reverse: 'REVERSE',\n none: null\n});\n_defineProperty(TableUtils, \"APPLY_TABLE_CHANGE_TIMEOUT_MS\", 30000);\n_defineProperty(TableUtils, \"REVERSE_TYPE\", Object.freeze({\n NONE: 'none',\n PRE_SORT: 'pre-sort',\n POST_SORT: 'post-sort'\n}));\n_defineProperty(TableUtils, \"NUMBER_REGEX\", /^-?\\d+(\\.\\d+)?$/);\n_defineProperty(TableUtils, \"executeAndWaitForEvent\", /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* (exec, table, eventType) {\n var timeout = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n if (table == null) {\n return null;\n }\n var eventPromise = TableUtils.makeCancelableTableEventPromise(table, eventType, timeout);\n exec(table);\n yield eventPromise;\n return table;\n });\n return function (_x, _x2, _x3) {\n return _ref2.apply(this, arguments);\n };\n}());\nexport default TableUtils;\n//# sourceMappingURL=TableUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport TableUtils from \"./TableUtils.js\";\nimport { BooleanColumnFormatter, CharColumnFormatter, DateTimeColumnFormatter, DecimalColumnFormatter, DefaultColumnFormatter, IntegerColumnFormatter, StringColumnFormatter } from \"./formatters/index.js\";\nexport class Formatter {\n /**\n * Converts FormattingRule[] to Map\n * @param columnFormattingRules Array or column formatting rules\n * @returns Map of columnName-to-format Maps indexed by normalized dataType\n */\n static makeColumnFormatMap(columnFormattingRules) {\n if (columnFormattingRules == null) {\n return new Map();\n }\n return columnFormattingRules.reduce((map, next) => {\n var dataType = TableUtils.getNormalizedType(next.columnType);\n if (dataType === null) {\n return map;\n }\n if (!map.has(dataType)) {\n map.set(dataType, new Map());\n }\n var formatMap = map.get(dataType);\n formatMap === null || formatMap === void 0 ? void 0 : formatMap.set(next.columnName, next.format);\n return map;\n }, new Map());\n }\n\n /**\n * Creates a column formatting rule\n * @param columnType Normalized data type\n * @param columnName Column name\n * @param format Format object\n */\n static makeColumnFormattingRule(columnType, columnName, format) {\n return {\n columnType,\n columnName,\n format\n };\n }\n\n /**\n * @param dh JSAPI instance\n * @param columnFormattingRules Optional array of column formatting rules\n * @param dateTimeOptions Optional object with DateTime configuration\n * @param decimalFormatOptions Optional object with Decimal configuration\n * @param integerFormatOptions Optional object with Integer configuration\n * @param truncateNumbersWithPound Determine if numbers should be truncated w/ repeating # instead of ellipsis at the end\n */\n constructor(dh) {\n var columnFormattingRules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var dateTimeOptions = arguments.length > 2 ? arguments[2] : undefined;\n var decimalFormatOptions = arguments.length > 3 ? arguments[3] : undefined;\n var integerFormatOptions = arguments.length > 4 ? arguments[4] : undefined;\n var truncateNumbersWithPound = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n var showEmptyStrings = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true;\n var showNullStrings = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : true;\n _defineProperty(this, \"defaultColumnFormatter\", void 0);\n _defineProperty(this, \"typeFormatterMap\", void 0);\n _defineProperty(this, \"columnFormatMap\", void 0);\n _defineProperty(this, \"truncateNumbersWithPound\", void 0);\n _defineProperty(this, \"showEmptyStrings\", void 0);\n _defineProperty(this, \"showNullStrings\", void 0);\n // Formatting order:\n // - columnFormatMap[type][name]\n // - typeFormatterMap[type]\n // - defaultColumnFormatter\n\n this.defaultColumnFormatter = new DefaultColumnFormatter();\n\n // Default formatters by data type\n this.typeFormatterMap = new Map([[TableUtils.dataType.BOOLEAN, new BooleanColumnFormatter()], [TableUtils.dataType.CHAR, new CharColumnFormatter()], [TableUtils.dataType.DATETIME, new DateTimeColumnFormatter(dh, dateTimeOptions)], [TableUtils.dataType.DECIMAL, new DecimalColumnFormatter(dh, decimalFormatOptions)], [TableUtils.dataType.INT, new IntegerColumnFormatter(dh, integerFormatOptions)], [TableUtils.dataType.STRING, new StringColumnFormatter()]]);\n\n // Formats indexed by data type and column name\n this.columnFormatMap = Formatter.makeColumnFormatMap(columnFormattingRules);\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.showEmptyStrings = showEmptyStrings;\n this.showNullStrings = showNullStrings;\n }\n /**\n * Gets columnFormatMap indexed by name for a given column type, creates new Map entry if necessary\n * @param columnType column type\n * @param createIfNecessary create new entry if true\n * @returns Map of format strings indexed by column name or undefined if it doesn't exist\n */\n getColumnFormatMapForType(columnType) {\n var createIfNecessary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var dataType = TableUtils.getNormalizedType(columnType);\n if (dataType === null) {\n return undefined;\n }\n if (createIfNecessary && !this.columnFormatMap.has(dataType)) {\n this.columnFormatMap.set(dataType, new Map());\n }\n return this.columnFormatMap.get(dataType);\n }\n\n /**\n * Gets a column format object for a given column type and name\n * @param columnType column type\n * @param columnName column name\n * @returns format object or null for Default\n */\n getColumnFormat(columnType, columnName) {\n var _columnFormatMap$get;\n var columnFormatMap = this.getColumnFormatMapForType(columnType);\n return (_columnFormatMap$get = columnFormatMap === null || columnFormatMap === void 0 ? void 0 : columnFormatMap.get(columnName)) !== null && _columnFormatMap$get !== void 0 ? _columnFormatMap$get : null;\n }\n getColumnTypeFormatter(columnType) {\n var dataType = TableUtils.getNormalizedType(columnType);\n var columnTypeFormatter = this.defaultColumnFormatter;\n if (dataType) {\n var _this$typeFormatterMa;\n columnTypeFormatter = (_this$typeFormatterMa = this.typeFormatterMap.get(dataType)) !== null && _this$typeFormatterMa !== void 0 ? _this$typeFormatterMa : columnTypeFormatter;\n }\n return columnTypeFormatter;\n }\n\n /**\n * Gets formatted string for a given value, column type and name\n * @param value Value to format\n * @param columnType Column type used to determine the formatting settings\n * @param columnName Column name used to determine the formatting settings\n * @param formatOverride Format object passed to the formatter in place of the format defined in columnFormatMap\n */\n getFormattedString(value, columnType) {\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var formatOverride = arguments.length > 3 ? arguments[3] : undefined;\n if (value == null) {\n return '';\n }\n var formatter = this.getColumnTypeFormatter(columnType);\n var format = formatOverride || this.getColumnFormat(columnType, columnName);\n return formatter.format(value, format !== null && format !== void 0 ? format : undefined);\n }\n\n /**\n * Gets the timeZone name\n * @returns The time zone name E.g. America/New_York\n */\n get timeZone() {\n var _formatter$dhTimeZone;\n var formatter = this.typeFormatterMap.get(TableUtils.dataType.DATETIME);\n return formatter === null || formatter === void 0 ? void 0 : (_formatter$dhTimeZone = formatter.dhTimeZone) === null || _formatter$dhTimeZone === void 0 ? void 0 : _formatter$dhTimeZone.id;\n }\n}\nexport default Formatter;\n//# sourceMappingURL=Formatter.js.map","import { TableColumnFormatter } from \"./formatters/index.js\";\nexport function getColumnFormats(settings) {\n if (settings && settings.formatter) {\n var {\n formatter\n } = settings;\n return formatter;\n }\n return undefined;\n}\nexport function getDateTimeFormatterOptions(settings) {\n return {\n timeZone: settings === null || settings === void 0 ? void 0 : settings.timeZone,\n defaultDateTimeFormatString: settings === null || settings === void 0 ? void 0 : settings.defaultDateTimeFormat,\n showTimeZone: settings === null || settings === void 0 ? void 0 : settings.showTimeZone,\n showTSeparator: settings === null || settings === void 0 ? void 0 : settings.showTSeparator\n };\n}\n\n/**\n * Check if the formatter has a custom format defined for the column name and type\n * @param formatter Formatter to check\n * @param columnName Column name\n * @param columnType Column type\n * @returns True, if a custom format is defined\n */\nexport function isCustomColumnFormatDefined(formatter, columnName, columnType) {\n var columnFormat = formatter.getColumnFormat(columnType, columnName);\n return columnFormat != null && (columnFormat.type === TableColumnFormatter.TYPE_CONTEXT_PRESET || columnFormat.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM);\n}\nexport default {\n getColumnFormats,\n getDateTimeFormatterOptions,\n isCustomColumnFormatDefined\n};\n//# sourceMappingURL=FormatterUtils.js.map","import { createContext } from 'react';\nexport var UserOverrideContext = /*#__PURE__*/createContext({});\nexport var UserPermissionsOverrideContext = /*#__PURE__*/createContext({});\nexport var UserContext = /*#__PURE__*/createContext(null);\n//# sourceMappingURL=UserContexts.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { forwardRef, lazy, Suspense } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar IrisGrid = /*#__PURE__*/lazy(() => import('./IrisGrid.js'));\nvar LazyIrisGrid = /*#__PURE__*/forwardRef((\n// This creates the correct type to make defaultProps optional\nprops, ref) => /*#__PURE__*/_jsx(Suspense, {\n fallback: /*#__PURE__*/_jsx(LoadingOverlay, {}),\n children: /*#__PURE__*/_jsx(IrisGrid, _objectSpread({\n ref: ref\n }, props))\n}));\nLazyIrisGrid.displayName = 'LazyIrisGrid';\nexport default LazyIrisGrid;\n//# sourceMappingURL=LazyIrisGrid.js.map","var AdvancedSettingsType;\n(function (AdvancedSettingsType) {\n AdvancedSettingsType[\"FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS\"] = \"filter-control-change-clears-all-filters\";\n AdvancedSettingsType[\"LINK_CHANGE_CLEARS_ALL_FILTERS\"] = \"link-change-clears-all-filters\";\n})(AdvancedSettingsType || (AdvancedSettingsType = {}));\nexport default AdvancedSettingsType;\n//# sourceMappingURL=AdvancedSettingsType.js.map","import AdvancedSettingsType from \"./AdvancedSettingsType.js\";\nvar DEFAULTS = Object.freeze([[AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS, false], [AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS, false]]);\nexport default {\n DEFAULTS\n};\n//# sourceMappingURL=AdvancedSettings.js.map","var AggregationOperation;\n(function (AggregationOperation) {\n AggregationOperation[\"COUNT\"] = \"Count\";\n AggregationOperation[\"MIN\"] = \"Min\";\n AggregationOperation[\"MAX\"] = \"Max\";\n AggregationOperation[\"SUM\"] = \"Sum\";\n AggregationOperation[\"ABS_SUM\"] = \"AbsSum\";\n AggregationOperation[\"VAR\"] = \"Var\";\n AggregationOperation[\"AVG\"] = \"Avg\";\n AggregationOperation[\"STD\"] = \"Std\";\n AggregationOperation[\"FIRST\"] = \"First\";\n AggregationOperation[\"LAST\"] = \"Last\";\n AggregationOperation[\"SKIP\"] = \"Skip\";\n AggregationOperation[\"COUNT_DISTINCT\"] = \"CountDistinct\";\n AggregationOperation[\"DISTINCT\"] = \"Distinct\";\n AggregationOperation[\"UNIQUE\"] = \"Unique\";\n})(AggregationOperation || (AggregationOperation = {}));\nexport default AggregationOperation;\n//# sourceMappingURL=AggregationOperation.js.map","import { TableUtils } from '@deephaven/jsapi-utils';\nimport AggregationOperation from \"./AggregationOperation.js\";\nexport var SELECTABLE_OPTIONS = [AggregationOperation.SUM, AggregationOperation.ABS_SUM, AggregationOperation.MIN, AggregationOperation.MAX, AggregationOperation.VAR, AggregationOperation.AVG, AggregationOperation.STD, AggregationOperation.FIRST, AggregationOperation.LAST, AggregationOperation.COUNT_DISTINCT, AggregationOperation.DISTINCT, AggregationOperation.COUNT, AggregationOperation.UNIQUE];\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport var isRollupOperation = type => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport var isValidOperation = (operationType, columnType) => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return true;\n case AggregationOperation.MIN:\n case AggregationOperation.MAX:\n return TableUtils.isNumberType(columnType) || TableUtils.isDateType(columnType) || TableUtils.isTextType(columnType);\n case AggregationOperation.SUM:\n case AggregationOperation.ABS_SUM:\n case AggregationOperation.VAR:\n case AggregationOperation.AVG:\n case AggregationOperation.STD:\n return TableUtils.isNumberType(columnType);\n case AggregationOperation.SKIP:\n return false;\n // No default case - if AggregationOperation is added, we'll get a compile time error\n }\n};\n\nexport var filterValidColumns = (columns, operationType) => columns.filter(c => c.isProxy !== true && isValidOperation(operationType, c.type));\nexport var getOperationColumnNames = (columns, operationType, selected, invert) => filterValidColumns(columns, operationType).map(_ref => {\n var {\n name\n } = _ref;\n return name;\n}).filter(name => selected.includes(name) ? !invert : invert);\nexport default {\n isRollupOperation,\n filterValidColumns,\n getOperationColumnNames\n};\n//# sourceMappingURL=AggregationUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport class AssertionError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isAssertionFailed\", true);\n }\n}\nexport default AssertionError;\n//# sourceMappingURL=AssertionError.js.map","import { AssertionError } from \"./errors/index.js\";\nexport function isEditableGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.isEditable) !== undefined;\n}\nexport function assertIsEditableGridModel(model) {\n if (!isEditableGridModel(model)) {\n throw new AssertionError(\"Expected 'model' to be editable, but received \".concat(model));\n }\n}\n\n/**\n * Edit operation when applying multiple edits\n */\n\n/**\n * Model for an editable grid\n */\n//# sourceMappingURL=EditableGridModel.js.map","export function isExpandableGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.hasExpandableRows) !== undefined;\n}\n\n/**\n * Expandable grid model. Allows for a grid with rows that can expand (e.g. A Tree Table)\n */\n//# sourceMappingURL=ExpandableGridModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n// Also exported via GridRange.SELECTION_DIRECTION\nexport var SELECTION_DIRECTION;\n(function (SELECTION_DIRECTION) {\n SELECTION_DIRECTION[\"DOWN\"] = \"DOWN\";\n SELECTION_DIRECTION[\"UP\"] = \"UP\";\n SELECTION_DIRECTION[\"LEFT\"] = \"LEFT\";\n SELECTION_DIRECTION[\"RIGHT\"] = \"RIGHT\";\n})(SELECTION_DIRECTION || (SELECTION_DIRECTION = {}));\nexport class GridRange {\n /**\n * Returns a normalized array of indexes ensuring left <= right and top <= bottom\n * @param startColumn Start column index\n * @param startRow Start row index\n * @param endColumn End column index\n * @param endRow End row index\n * @returns Array containing normalized indexes [left, top, right, bottom]\n */\n static normalize(startColumn, startRow, endColumn, endRow) {\n var left = startColumn;\n var top = startRow;\n var right = endColumn;\n var bottom = endRow;\n if (left != null && right != null && right < left) {\n left = right;\n right = startColumn;\n }\n if (top != null && bottom != null && bottom < top) {\n top = bottom;\n bottom = startRow;\n }\n return [left, top, right, bottom];\n }\n\n /**\n * Makes a GridRange ensuring startColumn <= endColumn, startRow <= endRow\n * @param startColumn Start column index\n * @param startRow Start row index\n * @param endColumn End column index\n * @param endRow End row index\n * @returns Normalized GridRange\n */\n static makeNormalized(startColumn, startRow, endColumn, endRow) {\n return new GridRange(...GridRange.normalize(startColumn, startRow, endColumn, endRow));\n }\n\n /**\n * Creates a GridRange representing a single cell\n * @param column Column index\n * @param row Row index\n * @returns GridRange representing the cell\n */\n static makeCell(column, row) {\n return new GridRange(column, row, column, row);\n }\n\n /**\n * Creates a GridRange representing an infinite length column\n * @param column Column index\n * @returns GridRange representing the column\n */\n static makeColumn(column) {\n return new GridRange(column, null, column, null);\n }\n\n /**\n * Creates a GridRange representing an infinite length row\n * @param row Row index\n * @returns GridRange representing the row\n */\n static makeRow(row) {\n return new GridRange(null, row, null, row);\n }\n\n /**\n * Returns the minimum value between 2 range indexes or null if at least 1 is null\n * @param index1 First grid range index\n * @param index2 Second grid range index\n * @returns Minimum index or null if either index is null\n */\n static minOrNull(index1, index2) {\n if (index1 == null || index2 == null) {\n return null;\n }\n return Math.min(index1, index2);\n }\n\n /**\n * Returns the maximum value between 2 range indexes or null if at least 1 is null\n * @param index1 First grid range index\n * @param index2 Second grid range index\n * @returns Maximum index or null if either index is null\n */\n static maxOrNull(index1, index2) {\n if (index1 == null || index2 == null) {\n return null;\n }\n return Math.max(index1, index2);\n }\n\n /**\n * Consolidate the passed in ranges to the minimum set, merging overlapping ranges.\n * @param ranges The ranges to consolidate\n * @returns Consolidated ranges\n */\n static consolidate(ranges) {\n var result = ranges.slice();\n var wasModified = true;\n while (wasModified) {\n wasModified = false;\n for (var i = 0; i < result.length && !wasModified; i += 1) {\n var range = result[i];\n for (var j = result.length - 1; j > i; j -= 1) {\n var other = result[j];\n\n // If one contains the other, we can just keep the bigger one\n if (range.contains(other)) {\n result.splice(j, 1);\n } else if (other.contains(range)) {\n wasModified = true;\n result[i] = other;\n result.splice(j, 1);\n break;\n } else if (range.startRow === other.startRow && range.endRow === other.endRow) {\n if (range.touches(other)) {\n // If the start/end rows match, and columns touch, consolidate\n var {\n startRow,\n endRow\n } = range;\n var startColumn = GridRange.minOrNull(range.startColumn, other.startColumn);\n var endColumn = GridRange.maxOrNull(range.endColumn, other.endColumn);\n wasModified = true;\n result[i] = new GridRange(startColumn, startRow, endColumn, endRow);\n result.splice(j, 1);\n break;\n }\n } else if (range.startColumn === other.startColumn && range.endColumn === other.endColumn) {\n if (range.touches(other)) {\n // If the start/end rows match, and columns touch, consolidate\n var {\n startColumn: _startColumn,\n endColumn: _endColumn\n } = range;\n var _startRow = GridRange.minOrNull(range.startRow, other.startRow);\n var _endRow = GridRange.maxOrNull(range.endRow, other.endRow);\n wasModified = true;\n result[i] = new GridRange(_startColumn, _startRow, _endColumn, _endRow);\n result.splice(j, 1);\n break;\n }\n }\n }\n }\n }\n return result;\n }\n\n /**\n * Checks if the 1-D ranges between 2 index pairs overlap or are continuous.\n * For example ranges [0, 1] and [2, 3] are continuous and will return true.\n * [0, 1] and [1, 3] overlap and return true.\n * [0, 1] and [3, 4] do not overlap and have a gap so this will return false.\n * @param start1 Start of 1st range\n * @param end1 End of 1st range\n * @param start2 Start of 2nd range\n * @param end2 End of 2nd range\n * @returns True if the ranges overlap or touch, else false\n */\n static isAxisRangeTouching(start1, end1, start2, end2) {\n if (start1 == null) {\n if (end1 == null) {\n return true;\n }\n if (start2 == null) {\n return true;\n }\n return start2 <= end1 + 1;\n }\n if (end1 == null) {\n if (end2 == null) {\n return true;\n }\n return end2 >= start1 - 1;\n }\n if (start2 == null) {\n if (end2 == null) {\n return true;\n }\n return start1 <= end2 + 1;\n }\n if (end2 == null) {\n return end1 >= start2 - 1;\n }\n if (start2 >= start1 - 1) {\n return start2 <= end1 + 1;\n }\n return end2 >= start1 - 1;\n }\n\n /**\n * Checks if 2 arrays of ranges are the same ranges\n * @param ranges1 First array of ranges\n * @param ranges2 Second array of ranges\n * @returns True if the arrays contain the same ranges in the same order\n */\n static rangeArraysEqual(ranges1, ranges2) {\n if (ranges1 === ranges2) {\n return true;\n }\n if (ranges1 == null || ranges2 == null || ranges1.length !== ranges2.length) {\n return false;\n }\n for (var i = 0; i < ranges1.length; i += 1) {\n if (!ranges1[i].equals(ranges2[i])) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Get the intersection (overlapping area) of two ranges\n * @param range One range to check for the intersection\n * @param otherRange The other range to check for the intersection\n * @returns Intersection of the two ranges. If they do not intersect, returns `null`.\n */\n static intersection(range, otherRange) {\n var _startColumn2, _endColumn2, _startRow2, _endRow2, _endColumn3, _endRow3;\n if (range.equals(otherRange)) {\n return range;\n }\n var {\n startColumn,\n startRow,\n endColumn,\n endRow\n } = range;\n startColumn = startColumn != null && otherRange.startColumn != null ? Math.max(startColumn, otherRange.startColumn) : (_startColumn2 = startColumn) !== null && _startColumn2 !== void 0 ? _startColumn2 : otherRange.startColumn;\n endColumn = endColumn != null && otherRange.endColumn != null ? Math.min(endColumn, otherRange.endColumn) : (_endColumn2 = endColumn) !== null && _endColumn2 !== void 0 ? _endColumn2 : otherRange.endColumn;\n startRow = startRow != null && otherRange.startRow != null ? Math.max(startRow, otherRange.startRow) : (_startRow2 = startRow) !== null && _startRow2 !== void 0 ? _startRow2 : otherRange.startRow;\n endRow = endRow != null && otherRange.endRow != null ? Math.min(endRow, otherRange.endRow) : (_endRow2 = endRow) !== null && _endRow2 !== void 0 ? _endRow2 : otherRange.endRow;\n if (startColumn != null && startColumn > ((_endColumn3 = endColumn) !== null && _endColumn3 !== void 0 ? _endColumn3 : -1) || startRow != null && startRow > ((_endRow3 = endRow) !== null && _endRow3 !== void 0 ? _endRow3 : -1)) {\n return null;\n }\n return new GridRange(startColumn, startRow, endColumn, endRow);\n }\n\n /**\n * Subtracts 1 range from another\n * @param range The range to be subtracted from\n * @param subtractRange The range to subtract from within this range\n * @returns The ranges needed to represent the remaining\n */\n static subtractFromRange(range, subtractRange) {\n var result = [];\n\n // Make it a little easier by finding only the part the subtraction range intersects\n var subtract = GridRange.intersection(range, subtractRange);\n if (subtract == null) {\n return [range];\n }\n\n // Go through each of the quadrants for deselection, there can be up to 4\n // Top quadrant (above the subtracted area)\n if (subtract.startRow != null && (range.startRow == null || range.startRow < subtract.startRow)) {\n result.push(new GridRange(range.startColumn, range.startRow, range.endColumn, subtract.startRow - 1));\n }\n\n // middle left\n if (subtract.startColumn != null && (range.startColumn == null || range.startColumn < subtract.startColumn)) {\n result.push(new GridRange(range.startColumn, subtract.startRow, subtract.startColumn - 1, subtract.endRow));\n }\n\n // middle right\n if (subtract.endColumn != null && (range.endColumn == null || range.endColumn > subtract.endColumn)) {\n result.push(new GridRange(subtract.endColumn + 1, subtract.startRow, range.endColumn, subtract.endRow));\n }\n\n // Bottom quadrant\n if (subtract.endRow != null && (range.endRow == null || range.endRow > subtract.endRow)) {\n result.push(new GridRange(range.startColumn, subtract.endRow + 1, range.endColumn, range.endRow));\n }\n return result;\n }\n\n /**\n * Subtract a range from multiple ranges\n * @param ranges The ranges to be subtracted from\n * @param subtractRange The range to subtract from within these ranges\n * @returns The ranges needed to represent the remaining\n */\n static subtractFromRanges(ranges, subtractRange) {\n var result = [];\n for (var i = 0; i < ranges.length; i += 1) {\n result.push(...GridRange.subtractFromRange(ranges[i], subtractRange));\n }\n return result;\n }\n\n /**\n * Subtract multiple ranges from multiple ranges\n * @param ranges The ranges to be subtracted from\n * @param subtractRanges The ranges to subtract from within these ranges\n * @returns The ranges needed to represent the remaining\n */\n static subtractRangesFromRanges(ranges, subtractRanges) {\n var result = [...ranges];\n for (var i = 0; i < subtractRanges.length; i += 1) {\n result = GridRange.subtractFromRanges(result, subtractRanges[i]);\n }\n return result;\n }\n\n /**\n * Test if a given range is bounded (all values are non-null)\n * @param range The range to test\n * @returns True if this range is bounded, false otherwise\n */\n static isBounded(range) {\n return range.startRow != null && range.startColumn != null && range.endRow != null && range.endColumn != null;\n }\n\n /**\n * Converts any GridRange passed in that is a full row or column selection to be bound\n * to the `columnCount` and `rowCount` passed in\n *\n * @param range The range to get the bounded range of\n * @param columnCount The number of columns\n * @param rowCount The number of rows\n * @returns The passed in GridRange with any null values filled in\n */\n static boundedRange(range, columnCount, rowCount) {\n var _range$startColumn, _range$startRow, _range$endColumn, _range$endRow;\n if (GridRange.isBounded(range)) {\n return range;\n }\n return new GridRange((_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0, (_range$startRow = range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : 0, (_range$endColumn = range.endColumn) !== null && _range$endColumn !== void 0 ? _range$endColumn : columnCount - 1, (_range$endRow = range.endRow) !== null && _range$endRow !== void 0 ? _range$endRow : rowCount - 1);\n }\n\n /**\n * Converts the GridRanges passed in to be bound to the `columnCount` and `rowCount` passed in\n *\n * @param ranges The ranges to get the bounded ranges of\n * @param columnCount The number of columns\n * @param rowCount The number of rows\n * @returns The passed in GridRange with any null values filled in\n */\n static boundedRanges(ranges, columnCount, rowCount) {\n return ranges.map(r => GridRange.boundedRange(r, columnCount, rowCount));\n }\n\n /**\n * Offsets a GridRange by the specified amount in the x and y directions\n *\n * @param range The range to offset\n * @param columnOffset The number of columns to offset\n * @param rowOffset The number of rows to offset\n * @returns The new grid range offset from the original\n */\n static offset(range, columnOffset, rowOffset) {\n return new GridRange(range.startColumn != null ? range.startColumn + columnOffset : null, range.startRow != null ? range.startRow + rowOffset : null, range.endColumn != null ? range.endColumn + columnOffset : null, range.endRow != null ? range.endRow + rowOffset : null);\n }\n\n /**\n * Get the next cell given the selected ranges and the current cell\n * @param ranges The selected bounded ranges within the grid\n * @param column The cursor column, or null if none focused\n * @param row The cursor row, or null if none focused\n * @param direction The direction in which to select next\n * @returns The next cell to focus, or null if there should be no more focus\n */\n static nextCell(ranges) {\n var column = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var row = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var direction = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : GridRange.SELECTION_DIRECTION.DOWN;\n if (ranges.length === 0) {\n return null;\n }\n var rangeIndex = -1;\n if (column != null && row != null) {\n rangeIndex = ranges.findIndex(r => r.containsCell(column, row));\n if (rangeIndex >= 0) {\n var range = ranges[rangeIndex];\n var nextCell = range.nextCell(column, row, direction);\n if (nextCell != null) {\n return nextCell;\n }\n }\n }\n\n // Otherwise go to the start of the next range (could be same range if only one range)\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n case GridRange.SELECTION_DIRECTION.RIGHT:\n {\n var nextRangeIndex = rangeIndex < ranges.length - 1 ? rangeIndex + 1 : 0;\n var nextRange = ranges[nextRangeIndex];\n return nextRange.startCell(direction);\n }\n case GridRange.SELECTION_DIRECTION.LEFT:\n case GridRange.SELECTION_DIRECTION.UP:\n {\n var _nextRangeIndex = rangeIndex > 0 ? rangeIndex - 1 : ranges.length - 1;\n var _nextRange = ranges[_nextRangeIndex];\n return _nextRange.startCell(direction);\n }\n default:\n throw new Error(\"Invalid direction: \".concat(direction));\n }\n }\n\n /**\n * Count the number of cells in the provided grid ranges\n * @param ranges The ranges to count the rows of\n * @returns The number of cells in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static cellCount(ranges) {\n return ranges.reduce((cellCount, range) => {\n var _range$endRow2, _range$startRow2, _range$endColumn2, _range$startColumn2;\n return cellCount + (((_range$endRow2 = range.endRow) !== null && _range$endRow2 !== void 0 ? _range$endRow2 : NaN) - ((_range$startRow2 = range.startRow) !== null && _range$startRow2 !== void 0 ? _range$startRow2 : NaN) + 1) * (((_range$endColumn2 = range.endColumn) !== null && _range$endColumn2 !== void 0 ? _range$endColumn2 : NaN) - ((_range$startColumn2 = range.startColumn) !== null && _range$startColumn2 !== void 0 ? _range$startColumn2 : NaN) + 1);\n }, 0);\n }\n\n /**\n * Count the number of rows in the provided grid ranges\n * @param ranges The ranges to count the rows of\n * @returns The number of rows in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static rowCount(ranges) {\n return ranges.reduce((rowCount, range) => {\n var _range$endRow3, _range$startRow3;\n return rowCount + ((_range$endRow3 = range.endRow) !== null && _range$endRow3 !== void 0 ? _range$endRow3 : NaN) - ((_range$startRow3 = range.startRow) !== null && _range$startRow3 !== void 0 ? _range$startRow3 : NaN) + 1;\n }, 0);\n }\n\n /**\n * Count the number of columns in the provided grid ranges\n * @param ranges The ranges to count the columns of\n * @returns The number of columns in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static columnCount(ranges) {\n return ranges.reduce((columnCount, range) => {\n var _range$endColumn3, _range$startColumn3;\n return columnCount + ((_range$endColumn3 = range.endColumn) !== null && _range$endColumn3 !== void 0 ? _range$endColumn3 : NaN) - ((_range$startColumn3 = range.startColumn) !== null && _range$startColumn3 !== void 0 ? _range$startColumn3 : NaN) + 1;\n }, 0);\n }\n\n /**\n * Check if the provided ranges contain the provided cell\n * @param ranges The ranges to check\n * @param column The column index\n * @param row The row index\n * @returns True if the cell is within the provided ranges, false otherwise.\n */\n static containsCell(ranges, column, row) {\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n if (range.containsCell(column, row)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Iterate through each cell in the provided ranges\n * @param ranges The ranges to iterate through\n * @param {(column: number, row: number, index: number) => void} callback The callback to execute. `index` is the index within that range\n * @param {GridRange.SELECTION_DIRECTION} direction The direction to iterate in\n */\n static forEachCell(ranges, callback) {\n var direction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : GridRange.SELECTION_DIRECTION.RIGHT;\n for (var i = 0; i < ranges.length; i += 1) {\n ranges[i].forEach(callback, direction);\n }\n }\n constructor(startColumn, startRow, endColumn, endRow) {\n _defineProperty(this, \"startColumn\", void 0);\n _defineProperty(this, \"startRow\", void 0);\n _defineProperty(this, \"endColumn\", void 0);\n _defineProperty(this, \"endRow\", void 0);\n this.startColumn = startColumn;\n this.startRow = startRow;\n this.endColumn = endColumn;\n this.endRow = endRow;\n }\n\n /**\n * Checks if the provided range is equivalent to this range (same start and end column/row indexes)\n * @param other Grid range to check against\n * @returns True if the ranges cover the same area\n */\n equals(other) {\n return this.startColumn === other.startColumn && this.startRow === other.startRow && this.endColumn === other.endColumn && this.endRow === other.endRow;\n }\n\n /**\n * Checks if this GridRange contains another range\n * @param other The range to check\n * @returns True if this GridRange completely contains `other`\n * */\n contains(other) {\n return (this.startColumn == null || other.startColumn != null && this.startColumn <= other.startColumn) && (this.startRow == null || other.startRow != null && this.startRow <= other.startRow) && (this.endColumn == null || other.endColumn != null && this.endColumn >= other.endColumn) && (this.endRow == null || other.endRow != null && this.endRow >= other.endRow);\n }\n\n /**\n * Check if the provided cell is in this range\n * @param column The column to check\n * @param row The row to check\n * @returns True if this cell is within this range\n */\n containsCell(column, row) {\n if (column == null || row == null) {\n return false;\n }\n return (this.startColumn == null || this.startColumn <= column) && (this.endColumn == null || this.endColumn >= column) && (this.startRow == null || this.startRow <= row) && (this.endRow == null || this.endRow >= row);\n }\n\n /**\n * Check if the provided range touches (or overlaps) this GridRange\n * Effectively checks if the 2 ranges could be represented by 1 continuous range\n * @param other The range to check\n * @returns True if this GridRange touches `other`\n * */\n touches(other) {\n return GridRange.isAxisRangeTouching(this.startRow, this.endRow, other.startRow, other.endRow) && GridRange.isAxisRangeTouching(this.startColumn, this.endColumn, other.startColumn, other.endColumn);\n }\n\n /**\n * Subtracts a range from this range\n * @param other The range to deselect from within this range\n * @returns The ranges needed to represent the remaining\n */\n subtract(other) {\n return GridRange.subtractFromRange(this, other);\n }\n\n /**\n * Get the first cell in this range. Throws if this range is unbounded.\n *\n * @param direction The direction to get the starting cell in. Defaults to DOWN\n * @returns The first cell in this range in the direction specified\n */\n startCell() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : GridRange.SELECTION_DIRECTION.DOWN;\n if (!GridRange.isBounded(this)) {\n throw new Error('Cannot get the startCell of an unbounded range');\n }\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n case GridRange.SELECTION_DIRECTION.RIGHT:\n return {\n column: this.startColumn,\n row: this.startRow\n };\n case GridRange.SELECTION_DIRECTION.LEFT:\n case GridRange.SELECTION_DIRECTION.UP:\n {\n return {\n column: this.endColumn,\n row: this.endRow\n };\n }\n default:\n throw new Error(\"Invalid direction: \".concat(direction));\n }\n }\n\n /**\n * Get the next cell in the direction specified. Throws if this range is unbounded.\n * If already at the bounds of the range in that direction, wrap to the next column or row\n * If at the end of the entire range, return null\n * If outside of the range, returns the next cell closest within this range.\n *\n * @param column The cursor column\n * @param row The cursor row\n * @param direction The direction to go in\n * @returns The next cell in the direction specified, or `null` if at the end of the range\n */\n nextCell(column, row, direction) {\n if (!GridRange.isBounded(this)) {\n throw new Error('Bounded range required');\n }\n if (column == null || row == null) {\n throw new Error('Require a non-null cursor');\n }\n var {\n startColumn,\n endColumn,\n startRow,\n endRow\n } = this;\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n if (row < endRow) {\n return {\n column,\n row: Math.max(row + 1, startRow)\n };\n }\n if (column < endColumn) {\n return {\n column: Math.max(column + 1, startColumn),\n row: startRow\n };\n }\n break;\n case GridRange.SELECTION_DIRECTION.UP:\n if (row > startRow) {\n return {\n column,\n row: Math.min(row - 1, endRow)\n };\n }\n if (column > startColumn) {\n return {\n column: Math.min(column - 1, endColumn),\n row: endRow\n };\n }\n break;\n case GridRange.SELECTION_DIRECTION.RIGHT:\n if (column < endColumn) {\n return {\n column: Math.max(column + 1, startColumn),\n row\n };\n }\n if (row < endRow) {\n return {\n column: startColumn,\n row: Math.max(row + 1, startRow)\n };\n }\n break;\n case GridRange.SELECTION_DIRECTION.LEFT:\n if (column > startColumn) {\n return {\n column: Math.min(column - 1, endColumn),\n row\n };\n }\n if (row > startRow) {\n return {\n column: endColumn,\n row: Math.min(row - 1, endRow)\n };\n }\n break;\n default:\n throw new Error(\"Invalid direction: \".concat(direction));\n }\n return null;\n }\n\n /**\n * Iterate through each cell in the range\n * @param callback Callback to execute. `index` is the index within this range\n * @param direction The direction to iterate in\n */\n forEach(callback) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : GridRange.SELECTION_DIRECTION.RIGHT;\n var i = 0;\n var {\n column: c,\n row: r\n } = this.startCell(direction);\n while (c != null && r != null) {\n var _this$nextCell;\n callback(c, r, i);\n i += 1;\n ({\n column: c,\n row: r\n } = (_this$nextCell = this.nextCell(c, r, direction)) !== null && _this$nextCell !== void 0 ? _this$nextCell : {});\n }\n }\n}\n_defineProperty(GridRange, \"SELECTION_DIRECTION\", SELECTION_DIRECTION);\nexport default GridRange;\n//# sourceMappingURL=GridRange.js.map","export function isAxisRange(range) {\n return Array.isArray(range) && range.length === 2 && (range[0] === null || typeof range[0] === 'number') && (range[1] === null || typeof range[1] === 'number');\n}\nexport function assertAxisRange(range) {\n if (!isAxisRange(range)) {\n throw new Error(\"Expected axis range. Received: \".concat(range));\n }\n}\nexport function isBoundedAxisRange(range) {\n return isAxisRange(range) && range[0] != null && range[1] != null;\n}\nexport function assertBoundedAxisRange(range) {\n if (!isBoundedAxisRange(range)) {\n throw new Error(\"Expected bounded axis range. Received: \".concat(range));\n }\n}\n//# sourceMappingURL=GridAxisRange.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport clamp from 'lodash.clamp';\nimport { find as linkifyFind } from 'linkifyjs';\nimport { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';\nimport GridRange from \"./GridRange.js\";\nimport { isBoundedAxisRange } from \"./GridAxisRange.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nexport function isLinkToken(token) {\n return (token === null || token === void 0 ? void 0 : token.href) !== undefined;\n}\nexport class GridUtils {\n // use same constant as chrome source for windows\n // https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n\n /**\n * Get the GridPoint for the coordinates provided\n * @param x The grid x coordinate\n * @param y The grid y coordinate\n * @param metrics The grid metrics\n * @returns The GridPoint including the column/row information\n */\n static getGridPointFromXY(x, y, metrics) {\n var column = GridUtils.getColumnAtX(x, metrics);\n var row = GridUtils.getRowAtY(y, metrics);\n var columnHeaderDepth = GridUtils.getColumnHeaderDepthAtY(y, metrics);\n return {\n x,\n y,\n row,\n column,\n columnHeaderDepth\n };\n }\n static getCellInfoFromXY(x, y, metrics) {\n var {\n row,\n column\n } = GridUtils.getGridPointFromXY(x, y, metrics);\n var {\n allColumnWidths,\n allRowHeights,\n allColumnXs,\n allRowYs,\n modelColumns,\n modelRows\n } = metrics;\n var modelRow = row !== null ? modelRows.get(row) : null;\n var modelColumn = column !== null ? modelColumns.get(column) : null;\n var left = column !== null ? allColumnXs.get(column) : null;\n var top = row !== null ? allRowYs.get(row) : null;\n var columnWidth = column !== null ? allColumnWidths.get(column) : null;\n var rowHeight = row !== null ? allRowHeights.get(row) : null;\n return {\n row,\n column,\n modelRow: modelRow !== null && modelRow !== void 0 ? modelRow : null,\n modelColumn: modelColumn !== null && modelColumn !== void 0 ? modelColumn : null,\n left: left !== null && left !== void 0 ? left : null,\n top: top !== null && top !== void 0 ? top : null,\n columnWidth: columnWidth !== null && columnWidth !== void 0 ? columnWidth : null,\n rowHeight: rowHeight !== null && rowHeight !== void 0 ? rowHeight : null\n };\n }\n static getColumnHeaderDepthAtY(y, metrics) {\n var row = GridUtils.getRowAtY(y, metrics);\n var {\n columnHeaderHeight,\n columnHeaderMaxDepth\n } = metrics;\n if (row === null && y <= columnHeaderHeight * columnHeaderMaxDepth) {\n return clamp(columnHeaderMaxDepth - Math.ceil(y / columnHeaderHeight), 0, columnHeaderMaxDepth - 1);\n }\n return undefined;\n }\n\n /**\n * Iterate through each floating item at the start and call a callback, returning the first result\n * @param start The count of floating items at the start\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingStart(start, total, callback) {\n for (var i = 0; i < start && i < total; i += 1) {\n var result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n return undefined;\n }\n\n /**\n * Iterate through floating items at the end. Iterates in increasing order.\n * @param end The count of floating items at the end\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingEnd(end, total, callback) {\n for (var i = 0; i < end && total - (end - i) >= 0; i += 1) {\n var result = callback(total - (end - i));\n if (result !== undefined) {\n return result;\n }\n }\n return undefined;\n }\n\n /**\n * Iterate through all floating items in increasing order, starting with the top items.\n * @param start Count of start floating rows, e.g. floatingTopRowCount\n * @param end Count of end floating rows, e.g. floatingBottomRowCount\n * @param total Total number of items\n * @param callback Callback called for each value, stopping the iterating and returning the value if one is returned\n */\n static iterateFloating(start, end, total, callback) {\n var result = GridUtils.iterateFloatingStart(start, total, callback);\n if (result !== undefined) {\n return result;\n }\n return GridUtils.iterateFloatingEnd(end, total, callback);\n }\n\n /**\n * Iterate through all items in one dimension on the grid - first floating, then visible.\n * Call the callback for each item, break if a result is returned and return that result.\n * @param visibleStart Index of the start of the visible viewport\n * @param visibleEnd Index of the end of the visible viewport\n * @param floatingStartCount Number of items floating at the start\n * @param floatingEndCount Number of items floating at the end\n * @param totalCount Total number of items\n * @param callback Callback to call for each item\n * @returns The first result from the callback called, or undefined\n */\n static iterateAllItems(visibleStart, visibleEnd, floatingStartCount, floatingEndCount, totalCount, callback) {\n var visibleStartIndex = Math.max(visibleStart, floatingStartCount);\n var visibleEndIndex = Math.min(visibleEnd, totalCount - floatingEndCount - 1);\n var result = GridUtils.iterateFloating(floatingStartCount, floatingEndCount, totalCount, callback);\n if (result !== undefined) {\n return result;\n }\n for (var i = visibleStartIndex; i <= visibleEndIndex; i += 1) {\n result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n return undefined;\n }\n\n /**\n * Check if the coordinate is within the item specified in this dimension\n * @param itemIndex Index of the item to check\n * @param itemCoordinatess Coordinate of all items in this dimension\n * @param itemSizes Size of all items in this dimension\n * @param coordinate The coordinate to check\n * @returns True if the coordinate is within the item specified, false otherwise\n */\n static isInItem(itemIndex, itemCoordinates, itemSizes, coordinate) {\n var _itemCoordinates$get, _itemSizes$get;\n var itemX = (_itemCoordinates$get = itemCoordinates.get(itemIndex)) !== null && _itemCoordinates$get !== void 0 ? _itemCoordinates$get : 0;\n var itemSize = (_itemSizes$get = itemSizes.get(itemIndex)) !== null && _itemSizes$get !== void 0 ? _itemSizes$get : 0;\n return itemX <= coordinate && coordinate <= itemX + itemSize;\n }\n\n /**\n * Get the Index of the item at the provided offset\n * @param offset Coordinate of the offset to get the item of\n * @param itemCount The total count of items\n * @param floatingStart Count of floating items at the start\n * @param floatingEnd Count of floating items at the end\n * @param items Index of all items\n * @param itemCoordinates The coordinate of each item\n * @param itemSizes The size of each item\n * @returns The item index, or null if no item matches\n */\n static getItemAtOffset(offset, itemCount, floatingStart, floatingEnd, items, itemCoordinates, itemSizes) {\n var ignoreFloating = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;\n var floatingItem = ignoreFloating ? undefined : GridUtils.iterateFloating(floatingStart, floatingEnd, itemCount, item => {\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n return undefined;\n });\n if (!ignoreFloating && floatingItem !== undefined) {\n return floatingItem;\n }\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n }\n return null;\n }\n\n /**\n * Get the index of the column at the specified x coordinate\n * @param x Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the column at that coordinate, or null if no column matches\n */\n static getColumnAtX(x, metrics) {\n var ignoreFloating = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n gridX\n } = metrics;\n if (x < gridX) {\n return null;\n }\n return this.getItemAtOffset(x - gridX, columnCount, floatingLeftColumnCount, floatingRightColumnCount, visibleColumns, allColumnXs, allColumnWidths, ignoreFloating);\n }\n\n /**\n * Get the index of the row at the specified y coordinate\n * @param y Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the row at that coordinate, or null if no row matches\n */\n static getRowAtY(y, metrics) {\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n visibleRows,\n allRowYs,\n allRowHeights,\n gridY\n } = metrics;\n if (y < gridY) {\n return null;\n }\n return this.getItemAtOffset(y - gridY, rowCount, floatingTopRowCount, floatingBottomRowCount, visibleRows, allRowYs, allRowHeights);\n }\n\n /**\n * Iterate backward through the visible items until a shown item is hit\n * @param startIndex The index to start from\n * @param modelIndexes The mapping of model indexes\n * @param visibleItems The visible items\n * @param userSizes The user set sizes\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownItem(startIndex, modelIndexes, visibleItems, userSizes) {\n var visibleItemIndex = visibleItems.findIndex(value => value === startIndex) || 0;\n visibleItemIndex -= 1;\n while (visibleItemIndex != null && visibleItemIndex >= 0) {\n var item = visibleItems[visibleItemIndex];\n var modelIndex = modelIndexes.get(item);\n if (modelIndex != null && userSizes.get(modelIndex) !== 0) {\n return item;\n }\n visibleItemIndex -= 1;\n }\n return null;\n }\n\n /**\n * Iterate backward through the visible columns until a shown column is hit\n * @param columnIndex The column index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownColumn(startIndex, metrics) {\n var {\n modelColumns,\n visibleColumns,\n userColumnWidths\n } = metrics;\n return GridUtils.getNextShownItem(startIndex, modelColumns, visibleColumns, userColumnWidths);\n }\n\n /**\n * Iterate backward through the visible rows until a shown row is hit\n * @param rowIndex The row index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownRow(startIndex, metrics) {\n var {\n modelRows,\n visibleRows,\n userRowHeights\n } = metrics;\n return GridUtils.getNextShownItem(startIndex, modelRows, visibleRows, userRowHeights);\n }\n\n /**\n * Gets the column index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x Mouse x coordinate\n * @param y Mouse y coordinate\n * @param metrics The grid metrics\n * @param theme The grid theme with potential user overrides\n * @returns Index of the column separator at the coordinates provided, or null if none match\n */\n static getColumnSeparatorIndex(x, y, metrics, theme) {\n var {\n rowHeaderWidth,\n columnHeaderHeight,\n floatingColumns,\n floatingLeftWidth,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n columnHeaderMaxDepth\n } = metrics;\n var {\n allowColumnResize,\n headerSeparatorHandleSize\n } = theme;\n if (columnHeaderMaxDepth * columnHeaderHeight < y || !allowColumnResize || headerSeparatorHandleSize <= 0) {\n return null;\n }\n var gridX = x - rowHeaderWidth;\n var halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate through the floating columns first since they're on top\n var isPreviousColumnHidden = false;\n for (var i = floatingColumns.length - 1; i >= 0; i -= 1) {\n var _allColumnXs$get, _allColumnWidths$get;\n var column = floatingColumns[i];\n var columnX = (_allColumnXs$get = allColumnXs.get(column)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : 0;\n var columnWidth = (_allColumnWidths$get = allColumnWidths.get(column)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0;\n var isColumnHidden = columnWidth === 0;\n if (!isPreviousColumnHidden || !isColumnHidden) {\n var midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n var minX = midX - halfSeparatorSize;\n var maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n // Iterate backward so that you can reveal hidden columns properly\n isPreviousColumnHidden = false;\n for (var _i = visibleColumns.length - 1; _i >= 0; _i -= 1) {\n var _allColumnXs$get2, _allColumnWidths$get2;\n var _column = visibleColumns[_i];\n var _columnX = (_allColumnXs$get2 = allColumnXs.get(_column)) !== null && _allColumnXs$get2 !== void 0 ? _allColumnXs$get2 : 0;\n var _columnWidth = (_allColumnWidths$get2 = allColumnWidths.get(_column)) !== null && _allColumnWidths$get2 !== void 0 ? _allColumnWidths$get2 : 0;\n var _isColumnHidden = _columnWidth === 0;\n\n // If this column is under the floating columns \"layer\". Terminate early.\n if (_columnX < floatingLeftWidth - _columnWidth) {\n return null;\n }\n if (!isPreviousColumnHidden || !_isColumnHidden) {\n var _midX = _columnX + _columnWidth;\n if (_isColumnHidden) {\n _midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n _midX -= halfSeparatorSize;\n }\n var _minX = _midX - halfSeparatorSize;\n var _maxX = _midX + halfSeparatorSize;\n if (_minX <= gridX && gridX <= _maxX) {\n return _column;\n }\n isPreviousColumnHidden = _isColumnHidden;\n }\n }\n return null;\n }\n\n /**\n * Check if the item specified is hidden\n * @param itemIndex Index of the item to check\n * @param visibleSizes Sizes of all visible items\n * @returns True if the item is hidden, false otherwise\n */\n static isItemHidden(itemIndex, visibleSizes) {\n return visibleSizes.get(itemIndex) === 0;\n }\n\n /**\n * Check if the column specified is hidden\n * @param columnIndex Index of the column to check\n * @param metrics Grid metrics\n * @returns True if the column is hidden, false otherwise\n */\n static isColumnHidden(columnIndex, metrics) {\n var {\n allColumnWidths\n } = metrics;\n return GridUtils.isItemHidden(columnIndex, allColumnWidths);\n }\n\n /**\n * Check if the provided row is a floating row\n * @param row The row index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating row, false otherwise\n */\n static isFloatingRow(row, metrics) {\n if (row == null) {\n return false;\n }\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount\n } = metrics;\n return row < floatingTopRowCount || row >= rowCount - floatingBottomRowCount;\n }\n\n /**\n * Check if the provided column is a floating column\n * @param column The column index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating column, false otherwise\n */\n static isFloatingColumn(column, metrics) {\n if (column == null) {\n return false;\n }\n var {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount\n } = metrics;\n return column < floatingLeftColumnCount || column >= columnCount - floatingRightColumnCount;\n }\n\n /**\n * Get all the items that are hidden under the same Index\n * E.g. If columns are 1, 2, 3, 4, 5, and column 2, 3, 4 are hidden, and we check for item 4, the return will be [2, 3, 4]\n * @param itemIndex Index of the item to start at\n * @param visibleSizes Visible size map\n * @param visibleItems Visible items\n * @returns Array of items that are hidden\n */\n static getHiddenItems(itemIndex, visibleSizes, visibleItems) {\n if (!GridUtils.isItemHidden(itemIndex, visibleSizes)) {\n return [];\n }\n var hiddenItems = [itemIndex];\n var visibleItemIndex = visibleItems.findIndex(value => value === itemIndex);\n for (var i = visibleItemIndex - 1; i >= 0; i -= 1) {\n var item = visibleItems[i];\n if (!GridUtils.isItemHidden(item, visibleSizes)) {\n break;\n }\n hiddenItems.push(item);\n }\n return hiddenItems;\n }\n\n /**\n * Get all the columns that are hidden under the same Index\n * @param columnIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenColumns(columnIndex, metrics) {\n var {\n visibleColumns,\n allColumnWidths\n } = metrics;\n return GridUtils.getHiddenItems(columnIndex, allColumnWidths, visibleColumns);\n }\n\n /**\n * Returns the row index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x X coordinate to check\n * @param y Y coordinate to check\n * @param metrics The grid metrics\n * @param theme The grid theme\n * @returns Index of the row separator at the coordinates provided, or null if none match\n */\n static getRowSeparatorIndex(x, y, metrics, theme) {\n var {\n rowHeaderWidth,\n columnHeaderHeight,\n visibleRows,\n allRowYs,\n allRowHeights\n } = metrics;\n var {\n allowRowResize,\n headerSeparatorHandleSize\n } = theme;\n if (rowHeaderWidth < x || !allowRowResize || headerSeparatorHandleSize <= 0) {\n return null;\n }\n var gridY = y - columnHeaderHeight;\n var halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate backward so you can reveal hidden rows properly\n var isPreviousRowHidden = false;\n for (var i = visibleRows.length - 1; i >= 0; i -= 1) {\n var _allRowYs$get, _allRowHeights$get;\n var row = visibleRows[i];\n var rowY = (_allRowYs$get = allRowYs.get(row)) !== null && _allRowYs$get !== void 0 ? _allRowYs$get : 0;\n var rowHeight = (_allRowHeights$get = allRowHeights.get(row)) !== null && _allRowHeights$get !== void 0 ? _allRowHeights$get : 0;\n var isRowHidden = rowHeight === 0;\n if (!isPreviousRowHidden || !isRowHidden) {\n var midY = rowY + rowHeight;\n if (isRowHidden) {\n midY += halfSeparatorSize;\n } else if (isPreviousRowHidden) {\n midY -= halfSeparatorSize;\n }\n var minY = midY - halfSeparatorSize;\n var maxY = midY + halfSeparatorSize;\n if (minY <= gridY && gridY <= maxY) {\n return row;\n }\n isPreviousRowHidden = isRowHidden;\n }\n }\n return null;\n }\n\n /**\n * Check if the row specified is hidden\n * @param rowIndex Index of the row to check\n * @param metrics Grid metrics\n * @returns True if the row is hidden, false otherwise\n */\n static isRowHidden(rowIndex, metrics) {\n var {\n allRowHeights\n } = metrics;\n return GridUtils.isItemHidden(rowIndex, allRowHeights);\n }\n\n /**\n * Get all the rows that are hidden under the same Index\n * @param rowIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenRows(rowIndex, metrics) {\n var {\n visibleRows,\n allRowHeights\n } = metrics;\n return GridUtils.getHiddenItems(rowIndex, allRowHeights, visibleRows);\n }\n\n /**\n * Set a new order for items in the grid\n * @param from The visible index to move from\n * @param to The visible index to move the item to\n * @param oldMovedItems The old reordered items\n * @returns The new reordered items\n */\n static moveItem(from, to, oldMovedItems) {\n if (from === to) {\n return [...oldMovedItems];\n }\n var movedItems = [...oldMovedItems];\n var lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. 1 -> 2, 2 -> 3 can just be 1 -> 3\n if (lastMovedItem != null && !isBoundedAxisRange(lastMovedItem.from) && lastMovedItem.to === from) {\n // Remove the move if it is now a no-op\n if (lastMovedItem.from === to) {\n movedItems.pop();\n } else {\n movedItems[movedItems.length - 1] = _objectSpread(_objectSpread({}, lastMovedItem), {}, {\n to\n });\n }\n } else {\n movedItems.push({\n from,\n to\n });\n }\n return movedItems;\n }\n\n /**\n * Move a visible range in the grid\n *\n * This will effectively slice the range out of the grid,\n * re-index the remaining columns,\n * then insert the range with the first element at the provided index\n *\n * @param from The visible axis range to move\n * @param to The visible index to move the start of the range to\n * @param oldMovedItems The old reordered items\n * @param isPreMoveTo If toParam is the index before the movement\n * If true, this will account for the shift when moving\n * a range before the drop positin\n * E.g. Move range [0, 2] 1 item down (after element 3)\n * The move is [0, 2] -> 1 if this is false. [0, 2] -> 3 if this is true\n * Both will result in [0, 2] -> 1\n * @returns The new reordered items\n */\n static moveRange(from, toParam, oldMovedItems) {\n var isPreMoveTo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (from[0] === from[1]) {\n return GridUtils.moveItem(from[0], toParam, oldMovedItems);\n }\n var to = toParam;\n if (isPreMoveTo && from[0] < toParam) {\n to -= from[1] - from[0];\n }\n if (from[0] === to) {\n return [...oldMovedItems];\n }\n var movedItems = [...oldMovedItems];\n var lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. [1, 2] -> 2, [2, 3] -> 3 can just be [1, 2] -> 3\n if (lastMovedItem != null && isBoundedAxisRange(lastMovedItem.from) && lastMovedItem.from[1] - lastMovedItem.from[0] === from[1] - from[0] && lastMovedItem.to === from[0]) {\n movedItems[movedItems.length - 1] = _objectSpread(_objectSpread({}, lastMovedItem), {}, {\n to\n });\n } else {\n movedItems.push({\n from,\n to\n });\n }\n var newLastMovedItem = movedItems[movedItems.length - 1];\n // Remove the move if it is now a no-op\n if (isBoundedAxisRange(newLastMovedItem.from) && newLastMovedItem.from[0] === newLastMovedItem.to) {\n movedItems.pop();\n }\n return movedItems;\n }\n static moveItemOrRange(from, to, oldMovedItems) {\n var isPreMoveTo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n return Array.isArray(from) ? GridUtils.moveRange(from, to, oldMovedItems, isPreMoveTo) : GridUtils.moveItem(from, to, oldMovedItems);\n }\n\n /**\n * Applies the items moves to the AxisRange\n * @param start The start index of the range\n * @param end The end index of the range\n * @param movedItems The move operations to apply\n * @param reverse If the moved items should be applied in reverse (this reverses the effects of the moves)\n * @returns A list of AxisRanges in the translated space. Possibly multiple non-continuous ranges\n */\n static applyItemMoves(start, end, movedItems) {\n var reverse = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var result = [[start, end]];\n var _loop = function _loop() {\n var {\n from: fromItemOrRange,\n to: toItem\n } = movedItems[i];\n var length = 1;\n var fromItem;\n if (isBoundedAxisRange(fromItemOrRange)) {\n length = fromItemOrRange[1] - fromItemOrRange[0] + 1; // Ranges are inclusive\n [fromItem] = fromItemOrRange;\n } else {\n fromItem = fromItemOrRange;\n }\n var fromStart = reverse ? toItem : fromItem;\n var fromEnd = fromStart + length - 1;\n var toStart = reverse ? fromItem : toItem;\n var moveDistance = toStart - fromStart;\n var nextResult = [];\n var _loop2 = function _loop2() {\n var _result$j$, _result$j$2;\n var currentStart = (_result$j$ = result[j][0]) !== null && _result$j$ !== void 0 ? _result$j$ : Number.NEGATIVE_INFINITY;\n var currentEnd = (_result$j$2 = result[j][1]) !== null && _result$j$2 !== void 0 ? _result$j$2 : Number.POSITIVE_INFINITY;\n var movedRange;\n var currentResult = [[currentStart, fromStart - 1], [fromStart, fromEnd], [fromEnd + 1, currentEnd]].map(_ref2 => {\n var [s, e] = _ref2;\n return [\n // Cap the ranges to within the current range bounds\n Math.max(s, currentStart), Math.min(e, currentEnd)];\n }).filter(_ref3 => {\n var [s, e] = _ref3;\n return s <= e;\n }) // Remove invalid ranges\n .map(range => {\n var [s, e] = range;\n if (fromStart <= s && fromEnd >= e) {\n // Current range in moved range\n movedRange = [s + moveDistance, e + moveDistance];\n return movedRange;\n }\n if (fromEnd < s) {\n // Current range is after moved range\n return [s - length, e - length];\n }\n return range;\n }).map(range => {\n var [s, e] = range;\n if (toStart > s && toStart <= e) {\n // Moved range splits this range\n return [[s, toStart - 1], [toStart + length, e + length]];\n }\n if (range === movedRange) {\n // Moved range has already been shifted\n return [range];\n }\n if (toStart <= s) {\n // Moved range shifts this range right\n return [[s + length, e + length]];\n }\n return [range];\n }).flat();\n nextResult.push(...currentResult);\n };\n for (var j = 0; j < result.length; j += 1) {\n _loop2();\n }\n\n // Return infinity values back to null\n result = nextResult.map(_ref => {\n var [s, e] = _ref;\n return [Number.isFinite(s) ? s : null, Number.isFinite(e) ? e : null];\n });\n };\n for (var i = reverse ? movedItems.length - 1 : 0; reverse ? i >= 0 : i < movedItems.length; reverse ? i -= 1 : i += 1) {\n _loop();\n }\n return result;\n }\n\n /**\n * Applies the items moves to the givengrid range\n * @param range The grid range to translate\n * @param movedColumns The moved columns\n * @param movedRows The moved rows\n * @param reverse If the moved items should be reversed (i.e. visible to model range)\n * @returns A list of grid ranges in the translated space. Possibly multiple non-continuous ranges\n */\n static translateRange(range, movedColumns, movedRows, reverse) {\n var columnRanges = GridUtils.applyItemMoves(range.startColumn, range.endColumn, movedColumns, reverse);\n var rowRanges = GridUtils.applyItemMoves(range.startRow, range.endRow, movedRows, reverse);\n var ranges = [];\n for (var i = 0; i < columnRanges.length; i += 1) {\n var c = columnRanges[i];\n for (var j = 0; j < rowRanges.length; j += 1) {\n var r = rowRanges[j];\n ranges.push(new GridRange(c[0], r[0], c[1], r[1]));\n }\n }\n return ranges;\n }\n\n /**\n * Retrieve the model index given the currently moved items\n * @param visibleIndex The visible index of the item to get the model index for\n * @param movedItems The moved items\n * @returns The model index of the item\n */\n static getModelIndex(visibleIndex, movedItems) {\n var modelIndex = GridUtils.applyItemMoves(visibleIndex, visibleIndex, movedItems, true)[0][0];\n return modelIndex;\n }\n\n /**\n * Retrieve the model indexes given the currently moved items\n * @param visibleIndexes The visible indexes of the item to get the model indexes for\n * @param movedItems The moved items\n * @returns The model indexes of the item\n */\n static getModelIndexes(visibleIndexes, movedItems) {\n return visibleIndexes.map(i => GridUtils.getModelIndex(i, movedItems));\n }\n\n /**\n * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getModelRangeIndexes(start, end, movedItems) {\n return GridUtils.applyItemMoves(start, end, movedItems, true);\n }\n\n /**\n * Translate the provided UI range into model range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRange(uiRange) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n return GridUtils.translateRange(uiRange, movedColumns, movedRows, true);\n }\n\n /**\n * Translate the provided UI range into model ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRanges The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRanges(uiRanges) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n var modelRanges = [];\n for (var i = 0; i < uiRanges.length; i += 1) {\n modelRanges.push(...GridUtils.getModelRange(uiRanges[i], movedColumns, movedRows));\n }\n return modelRanges;\n }\n\n /**\n * Translate the provided UI start/end indexes to the visible start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getVisibleRangeIndexes(start, end, movedItems) {\n return GridUtils.applyItemMoves(start, end, movedItems, false);\n }\n\n /**\n * Translate the provided UI range into visible range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRange(modelRange) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n return this.translateRange(modelRange, movedColumns, movedRows, false);\n }\n\n /**\n * Translate the provided model ranges into visible ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param modelRanges The model ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRanges(modelRanges) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n var visibleRanges = [];\n for (var i = 0; i < modelRanges.length; i += 1) {\n visibleRanges.push(...GridUtils.getVisibleRange(modelRanges[i], movedColumns, movedRows));\n }\n return visibleRanges;\n }\n\n /**\n * Retrieve the visible index given the currently moved items\n * @param modelIndex The model index to get the visible index for\n * @param movedItems Moved items\n * @returns The visible index of the item\n */\n static getVisibleIndex(modelIndex, movedItems) {\n var visibleIndex = GridUtils.applyItemMoves(modelIndex, modelIndex, movedItems)[0][0];\n return visibleIndex;\n }\n\n /**\n * Retrieve the visible indexes given the currently moved items\n * @param modelIndexes The model indexes to get the visible indexes for\n * @param movedItems Moved items\n * @returns The visible indexes of the item\n */\n static getVisibleIndexes(modelIndexes, movedItems) {\n return modelIndexes.map(i => GridUtils.getVisibleIndex(i, movedItems));\n }\n\n /**\n * Check if the current platform is Mac\n * @returns True if this platform is a Mac, false otherwise\n */\n static isMacPlatform() {\n var {\n platform\n } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Get the modifier key for the current platform\n * @returns The modifier key for the current platform\n */\n static getModifierKey() {\n if (GridUtils.isMacPlatform()) {\n return 'metaKey';\n }\n return 'ctrlKey';\n }\n\n /**\n * Check if the modifier key is down for the given event\n * @param event The event to check\n * @returns True if the modifier key is down, false otherwise\n */\n static isModifierKeyDown(event) {\n var modifierKey = GridUtils.getModifierKey();\n return event[modifierKey];\n }\n\n /**\n * Check if the user has hidden the specified column\n * @param modelIndex The model index to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden the column\n */\n static checkColumnHidden(modelIndex, userColumnWidths) {\n return userColumnWidths.get(modelIndex) === 0;\n }\n\n /**\n * Check if all the columns specified are hidden\n * @param columns Columns to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden all of the columns\n */\n static checkAllColumnsHidden(columns, userColumnWidths) {\n if (userColumnWidths.size === 0) {\n return false;\n }\n return columns.every(column => userColumnWidths.get(column) === 0);\n }\n\n /**\n * Get the bounds the mouse needs to be dragged outside of from an initial selection before scrolling occurs.\n * Taking into account any floating rows that may be covering the viewport.\n * @param metrics Grid metrics\n * @param row The row they started dragging in\n * @param column The column they started the drag from\n * @returns Dimensions of the drag area in relation to the canvas they need to drag outside of to start scrolling\n */\n static getScrollDragBounds(metrics, row, column) {\n var {\n gridX,\n gridY,\n width,\n height,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingTopHeight,\n floatingBottomHeight,\n columnCount,\n rowCount\n } = metrics;\n var x1 = gridX;\n var y1 = gridY;\n var x2 = width;\n var y2 = height;\n if (column != null) {\n if (column > floatingLeftColumnCount) {\n x1 += floatingLeftWidth;\n }\n if (column < columnCount - floatingRightColumnCount) {\n x2 -= floatingRightWidth;\n }\n }\n if (row != null) {\n if (row > floatingTopRowCount) {\n y1 += floatingTopHeight;\n }\n if (row < rowCount - floatingBottomRowCount) {\n y2 -= floatingBottomHeight;\n }\n }\n return {\n x1,\n y1,\n x2,\n y2\n };\n }\n\n /**\n * Converts the delta coordinates from the provided wheel event to pixels\n * Different platforms have different ways of providing the delta so this normalizes it\n * @param wheelEvent The mouse wheel event to get the scrolling delta for\n * @param pageWidth The width of the page that is scrolling\n * @param pageHeight The height of the page that is scrolling\n * @param lineWidth The width of the line scrolling in line mode\n * @param lineHeight The height of the line scrolling in line mode\n * @returns The delta coordinates normalized to pixels\n */\n static getScrollDelta(wheelEvent) {\n var pageWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1024;\n var pageHeight = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 768;\n var lineWidth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 20;\n var lineHeight = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 20;\n var {\n deltaX,\n deltaY\n } = wheelEvent;\n\n // Flip scroll direction if shiftKey is held on windows/linux.\n // On mac, deltaX/Y values are switched at the event level when shiftKey=true.\n // Guard on strictly Y only changing, to ignore trackpad diagonal motion,\n // through that guard may not be necessary, but it is difficult to determine for\n // all platforms/browser/scroll method combos.\n if (!GridUtils.isMacPlatform() && wheelEvent.shiftKey && wheelEvent.deltaX === 0 && wheelEvent.deltaY !== 0) {\n deltaX = wheelEvent.deltaY;\n deltaY = wheelEvent.deltaX;\n }\n\n // Normalize other deltaMode values to pixel units\n // deltaMode 0, is already in pixel units\n if ((wheelEvent === null || wheelEvent === void 0 ? void 0 : wheelEvent.deltaMode) === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n deltaX *= pageWidth;\n deltaY *= pageHeight;\n } else if ((wheelEvent === null || wheelEvent === void 0 ? void 0 : wheelEvent.deltaMode) === WheelEvent.DOM_DELTA_LINE) {\n // Firefox reports deltaMode line\n // Normalize distance travelled between browsers\n // but remain ~platform/browser combo consistent\n if (GridUtils.isMacPlatform()) {\n // for mac treat lines as a standard row height\n // on mac, firefox travels less distance then chrome per tick\n deltaX = Math.round(deltaX * lineWidth);\n deltaY = Math.round(deltaY * lineHeight);\n } else {\n // for windows convert to pixels using the same method as chrome\n // chrome goes 100 per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n // make the behaviour the same between as it's close enough\n deltaX = Math.round(deltaX * this.PIXELS_PER_LINE);\n deltaY = Math.round(deltaY * this.PIXELS_PER_LINE);\n }\n }\n return {\n deltaX,\n deltaY\n };\n }\n static compareRanges(range1, range2) {\n if (range1[0] == null || range1[1] == null || range2[0] == null || range2[1] == null) {\n return 0;\n }\n return range1[0] !== range2[0] ? range1[0] - range2[0] : range1[1] - range2[1];\n }\n static mergeSortedRanges(ranges) {\n var mergedRanges = [];\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n var start = range[0];\n var end = range[1];\n if (i === 0) {\n mergedRanges.push([start, end]);\n } else if (start - 1 <= mergedRanges[mergedRanges.length - 1][1]) {\n mergedRanges[mergedRanges.length - 1][1] = Math.max(mergedRanges[mergedRanges.length - 1][1], end);\n } else {\n mergedRanges.push([start, end]);\n }\n }\n return mergedRanges;\n }\n\n /**\n * Translates coordinates that are relative to gridX/gridY to be translated by gridX and gridY\n * @param tokenBox The token box to translate\n * @param metrics The grid metrics\n * @returns The token box with translated coordinates\n */\n static translateTokenBox(tokenBox, metrics) {\n var {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom\n } = tokenBox;\n var {\n gridX,\n gridY,\n width: gridWidth,\n height: gridHeight,\n verticalBarWidth,\n horizontalBarHeight\n } = metrics;\n\n // Clamp the values within the grid\n var newLeft = clamp(gridX + left, gridX, gridWidth - verticalBarWidth);\n var newRight = clamp(gridX + right, gridX, gridWidth - verticalBarWidth);\n var newTop = clamp(gridY + top, gridY, gridHeight - horizontalBarHeight);\n var newBottom = clamp(gridY + bottom, gridY, gridHeight - horizontalBarHeight);\n return {\n x1: newLeft,\n y1: newTop,\n x2: newRight,\n y2: newBottom,\n token: tokenBox.token\n };\n }\n\n /**\n * Gets textWidth and X-Y position for a specific cell\n * The textWidth returned is the width that the text can occupy accounting for any other cell markings\n * The width accounts for tree table indents and cell padding, so it is the width the text may consume\n *\n * @param state GridRenderState to get the text metrics for\n * @param column Column of cell to get text metrics for\n * @param row Row of cell to get text metrics for\n * @returns Object with width, x, and y of the text\n */\n static getTextRenderMetrics(state, column, row) {\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n allRowHeights,\n modelRows,\n modelColumns\n } = metrics;\n var {\n cellHorizontalPadding,\n treeDepthIndent,\n treeHorizontalPadding\n } = theme;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var textAlign = model.textAlignForCell(modelColumn, modelRow);\n var x = getOrThrow(allColumnXs, column);\n var y = getOrThrow(allRowYs, row);\n var columnWidth = getOrThrow(allColumnWidths, column);\n var rowHeight = getOrThrow(allRowHeights, row);\n var isFirstColumn = column === firstColumn;\n var treeIndent = 0;\n if (isExpandableGridModel(model) && model.hasExpandableRows && isFirstColumn) {\n treeIndent = treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;\n }\n var textWidth = columnWidth - treeIndent;\n var textX = x + cellHorizontalPadding;\n var textY = y + rowHeight * 0.5;\n if (textAlign === 'right') {\n textX = x + textWidth - cellHorizontalPadding;\n } else if (textAlign === 'center') {\n textX = x + textWidth * 0.5;\n }\n textX += treeIndent;\n return {\n width: textWidth - cellHorizontalPadding * 2,\n x: textX,\n y: textY\n };\n }\n\n /**\n * Finds tokens in text (urls, emails) that start with https:// or http://\n * @param text The text to search in\n * @returns An array of tokens\n */\n static findTokensWithProtocolInText(text) {\n var tokens = linkifyFind(text);\n return tokens.filter(token => {\n if (token.type === 'url') {\n return /^https?:\\/\\//.test(token.value);\n }\n return true;\n });\n }\n}\n_defineProperty(GridUtils, \"PIXELS_PER_LINE\", 100 / 3);\nexport default GridUtils;\n//# sourceMappingURL=GridUtils.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * Extension of memoizee that clears the entire cache when it's full.\n * This avoids the situation where LRU cache starts thrashing when it fills up.\n * Could look at writing our own memoize with a smarter cache to avoid overhead of\n * LRU queue, but this should be sufficient for now.\n */\nimport memoizee from 'memoizee';\n\n/**\n * @param fn The function to memoize\n * @param options The options to set for memoization\n */\nexport var memoizeClear = (fn, options) => {\n var isClearingCache = false;\n var memoizedFn = memoizee(fn, _objectSpread(_objectSpread({}, options), {}, {\n dispose: () => {\n // Need to track when we're clearing because dispose gets called for all items removed\n if (!isClearingCache) {\n isClearingCache = true;\n memoizedFn.clear();\n isClearingCache = false;\n }\n }\n }));\n return memoizedFn;\n};\nexport default memoizeClear;\n//# sourceMappingURL=memoizeClear.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { EventTarget } from 'event-target-shim';\nimport memoizeClear from \"./memoizeClear.js\";\nimport GridUtils from \"./GridUtils.js\";\nvar LINK_TRUNCATION_LENGTH = 5000;\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n/**\n * Model for a Grid\n * All of these methods should return very quickly, as they will be called many times in the render cycle.\n * If data needs to be loaded asynchronously, return something immediately, then trigger an event for the table to refresh (Not yet implemented).\n */\nclass GridModel extends EventTarget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"getCachedTokensInText\", memoizeClear((text, visibleLength) => {\n // If no text is truncated, then directly search in text\n if (visibleLength >= text.length) {\n return GridUtils.findTokensWithProtocolInText(text);\n }\n\n // To check for links, we should check to the first space after the truncatedText length\n var indexOfProceedingWhitespace = text.slice(visibleLength - 1, LINK_TRUNCATION_LENGTH).search(/\\s/); // index or -1 if not found\n\n var lengthOfContent = visibleLength + indexOfProceedingWhitespace;\n // If it doesn't exist, set lengthOfContent to the minimum between length of the original text and 5000\n if (indexOfProceedingWhitespace === -1) {\n lengthOfContent = Math.min(LINK_TRUNCATION_LENGTH, text.length);\n }\n var contentToCheckForLinks = text.substring(0, lengthOfContent);\n return GridUtils.findTokensWithProtocolInText(contentToCheckForLinks);\n }));\n }\n /** Count of rows in the grid */\n /** Count of columns in the grid */\n /** Count of rows that are frozen (or 'floating') at the top */\n get floatingTopRowCount() {\n return 0;\n }\n\n /** Count of rows that are frozen at the bottom */\n get floatingBottomRowCount() {\n return 0;\n }\n\n /** Count of columns that are frozen (or 'floating') at the left */\n get floatingLeftColumnCount() {\n return 0;\n }\n\n /** Count of columns that are frozen (or 'floating') at the right */\n get floatingRightColumnCount() {\n return 0;\n }\n\n /**\n * How many columns header levels are in the grid\n * Used for column grouping where columns at depth 0 are the base columns\n *\n * A grid with 1-level grouping would have a columnHeaderDepth of 2\n * and column headers at depths 0 and 1\n */\n get columnHeaderMaxDepth() {\n return 1;\n }\n\n /**\n * Get the text for the specified cell\n * @param column Column to get the text for\n * @param row Row to get the text for\n * @returns Text for the specified cell\n */\n\n /**\n * Get the character to replace text when truncated for a specific cell.\n * Leave undefined to show text truncated with ellipsis\n * @param column Column to get the truncation character for\n * @param row Row to get the truncation character for\n * @returns Truncation character for the specified cell\n */\n truncationCharForCell(column, row) {\n return undefined;\n }\n\n /**\n * Get the text alignment for the specified cell\n * @param column Column to get the alignment for\n * @param row Row to get the alignment for\n * @returns Text alignment for the specified cell\n */\n textAlignForCell(column, row) {\n return 'left';\n }\n\n /**\n * Get the color for the text in the specified cell\n * @param column Column to get the color for\n * @param row Row to get the color for\n * @param theme Theme applied to the grid\n * @returns Color for the text in the cell\n */\n colorForCell(column, row, theme) {\n return theme.textColor;\n }\n\n /**\n * Get the background color for the cell\n * @param column Column to get the background color for\n * @param row Row to get the background color for\n * @param theme Theme applied to the grid\n * @returns Background color for the cell\n */\n backgroundColorForCell(column, row, theme) {\n return null;\n }\n\n /**\n * Text for the column header\n * @param column Column to get the header for\n * @param depth Depth to get the header text for. 0 is base columns\n * @returns Text to put in the column header\n */\n\n /** Color for column header\n * @param column Column to get the color for\n * @param depth Header depth to get the color for\n * @returns Color for the header at the depth or null\n */\n colorForColumnHeader(column) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return null;\n }\n\n /**\n * Text for the row header\n * @param row Row to get the header for\n * @returns Text to put in the row header\n */\n textForRowHeader(row) {\n return '';\n }\n\n /**\n * Text for the row footer\n * @param row Row to get the footer for\n * @returns Text to put in the row footer\n */\n textForRowFooter(row) {\n return '';\n }\n\n /**\n * @param column Column to check\n * @returns True if the column is movable\n */\n isColumnMovable(column) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return true;\n }\n\n /**\n * @param row Row to check\n * @returns True if the row is movable\n */\n isRowMovable(row) {\n return true;\n }\n getColumnHeaderGroup(modelIndex, depth) {\n return undefined;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n return undefined;\n }\n\n /**\n * Gets the tokens in the cell at column and row, based on the visible text\n * @param column The model column\n * @param row The model row\n * @param visibleLength The length of the visible text\n * @returns An array of Tokens in the cell\n */\n tokensForCell(column, row) {\n var visibleLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : LINK_TRUNCATION_LENGTH;\n var text = this.textForCell(column, row);\n return this.getCachedTokensInText(text, visibleLength);\n }\n renderTypeForCell(column, row) {\n return 'text';\n }\n}\nexport default GridModel;\n//# sourceMappingURL=GridModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable class-methods-use-this */\n\nimport { GridModel } from '@deephaven/grid';\nvar EMPTY_ARRAY = [];\n\n/**\n * Abstract class that extends the GridModel to have more functionality, like filtering and sorting.\n * For use from IrisGrid.\n * Provides some abstraction from the dh.Table and dh.TreeTable classes, so we can treat them somewhat the same.\n * Note that it still uses dh.Column, dh.FilterCondition, dh.Sort, etc., still. Theoretically should abstract\n * those out as well, so there's no dependency on IrisAPI at all, but it's a lot of work for no real gain at this time.\n */\nclass IrisGridModel extends GridModel {\n constructor(dh) {\n super();\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"listenerCount\", void 0);\n this.dh = dh;\n this.listenerCount = 0;\n }\n // Pulled directly from event-target-shim implementation signature\n // https://github.com/mysticatea/event-target-shim/blob/master/src/lib/event-target.ts#L99\n // Using Parameters<GridModel['addEventListener']> doesn't work\n addEventListener(type0, callback0, options0) {\n super.addEventListener(type0, callback0, options0);\n this.listenerCount += 1;\n if (this.listenerCount === 1) {\n this.startListening();\n }\n }\n removeEventListener(type0, callback0, options0) {\n super.removeEventListener(type0, callback0, options0);\n this.listenerCount -= 1;\n if (this.listenerCount === 0) {\n this.stopListening();\n }\n }\n\n /**\n * Function called when first listener is added.\n * Override for implementation specific behaviour.\n */\n startListening() {\n // no-op\n }\n\n /**\n * Function called when last listener is removed.\n * Override for implementation specific behaviour.\n */\n stopListening() {\n // no-op\n }\n\n /**\n * Gets the columns for this model\n * @returns All columns in the model\n */\n\n /**\n * Retrieve the grouped columns for this model\n * @returns The columns that are grouped\n */\n get groupedColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * Gets the columns for the model before any transformations (such as rollups) are applied.\n * @returns All original columns in the model.\n */\n get originalColumns() {\n return this.columns;\n }\n\n /**\n * Gets the column index for this model\n * @param name The model column name.\n * @returns The numeric index of the requested column.\n */\n\n /**\n * Retrieve the source cell for a given cell. Returns something different if the cell is a proxied cell\n * that retrieves data from another cell.\n * @param column Column to get the source for\n * @param row Row to get the source for\n * @returns Source cell where the data is coming from\n */\n sourceForCell(column, row) {\n return {\n column,\n row\n };\n }\n\n /**\n * Retrieve the range of columns to clear filters on for a given column.\n * @param column Column to get the range of filters to clear.\n * @returns Axis range of the column filters to clear, or `null` if this should not have a clear filter option.\n */\n getClearFilterRange(column) {\n if (this.isFilterable(column)) {\n return [column, column];\n }\n return null;\n }\n\n /** List of column movements defined by the model. Used as initial movements for IrisGrid */\n get initialMovedColumns() {\n return EMPTY_ARRAY;\n }\n\n /** List of row movements defined by the model. Used as initial movements for IrisGrid */\n get initialMovedRows() {\n return EMPTY_ARRAY;\n }\n\n /** List of column header groups defined by the model */\n get initialColumnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @param column The model column index\n * @param row The model row index\n * @returns The format stored for that cell\n */\n\n /**\n * @param column The model column index\n * @param row The model row index\n * @returns The value stored for that cell\n */\n\n /**\n * @returns The filters set on this model\n */\n\n /**\n * @param filter The filters to set\n */\n\n /**\n * @returns The formatter used when formatting data\n */\n\n /**\n * @param formatter The formatter to set\n */\n\n /**\n * @param value The value to format\n * @param columnType The column type to format\n * @param columnName The column name to format\n */\n\n /**\n * @returns The sorts used on this model\n */\n\n /**\n * @param sort The sorts to use on this model\n */\n\n /**\n /**\n * @returns The custom columns on this model\n */\n\n /**\n * @param customColumns The custom columns to use\n */\n\n /**\n * @returns The format columns on this model\n */\n\n /**\n * @param formatColumns The format columns to use\n */\n\n /**\n * @param columns The columns to treat as frozen\n */\n\n /**\n * @returns The config to use for rolling up this table\n */\n\n /**\n * @returns The config to use for the totals table of this model\n */\n\n /**\n * @returns The LayoutHints to use for the columns of this table model\n */\n get layoutHints() {\n return null;\n }\n\n /**\n * @returns Names of columns which should be locked to the front, but not floating\n */\n get frontColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @returns Names of columns which should be locked to the back, but not floating\n */\n get backColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @returns Names of columns which should be frozen to the front and floating\n */\n get frozenColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @param index The column index to check\n * @returns Whether the column is one of LayoutHints' frozen columns\n */\n isColumnFrozen(index) {\n return false;\n }\n\n /**\n * @param index The column index to check\n * @returns Whether the column is sortable\n */\n isColumnSortable(index) {\n return false;\n }\n\n /**\n * @deprecated Replaced with isPartitionRequired()\n * @returns True if this model requires a filter to be set\n */\n get isFilterRequired() {\n return false;\n }\n get isReversible() {\n return true;\n }\n\n /**\n * @returns Returns a raw table that is frozen and can be used for exporting data\n */\n\n /**\n * @returns True if this model supports the columnStatistics(column) function\n */\n get isColumnStatisticsAvailable() {\n return false;\n }\n\n /**\n * The description for this model.\n * @returns The description of the model\n */\n get description() {\n return '';\n }\n\n /**\n * @param column The column to get statistics for\n * @returns The column statistics\n */\n\n /**\n * @returns True if this model supports customColumns\n */\n get isCustomColumnsAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model supports customColumns\n */\n get isFormatColumnsAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model supports the export() function\n */\n get isExportAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model supports the valuesTable(column) function\n */\n get isValuesTableAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model should allow the chart builder\n */\n get isChartBuilderAvailable() {\n return false;\n }\n\n /**\n * @returns True if the rollup rows functionality is available\n */\n get isRollupAvailable() {\n return false;\n }\n\n /**\n * @returns True if select distinct functionality is available\n */\n get isSelectDistinctAvailable() {\n return false;\n }\n\n /**\n * @returns True if the totals functionality is available\n */\n get isTotalsAvailable() {\n return false;\n }\n\n /**\n * The names of columns with select distinct enabled\n * @returns An array of column names\n */\n\n /**\n * Set the columns with select distinct enabled\n * @param names The array of column names to enable select distinct on\n */\n\n /**\n * The pending data for this model\n * @returns A map of row index to a map of column name/value pairs\n */\n\n /**\n * Set the pending data for this model\n * @param A map of row index to a map of column name/value pairs\n */\n\n /**\n * @returns The count of pending rows to show\n */\n\n /**\n * Set the count of pending rows to show\n * @param count The count of pending rows to show\n */\n\n /**\n * Errors for the pending data\n * @returns Map from row number to the error\n */\n\n /**\n * Commit pending data and save all data to the table\n */\n\n /**\n * Check if a column is filterable\n * @param columnIndex The column index to check for filterability\n * @returns True if the current provided column index is filterable, false otherwise\n */\n isFilterable(columnIndex) {\n return false;\n }\n\n /**\n * Set the indices of the viewport\n * @param top Top of viewport\n * @param bottom Bottom of viewport\n * @param columns The columns in the viewport. `undefined` for all columns\n */\n\n /**\n * Takes a snapshot of the provided ranges\n * @param ranges The model ranges to take the snapshot of\n * @returns Returns the data in a row/column matrix\n */\n\n /**\n * @param ranges The ranges to take a snapshot of\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue A function to format a value for a cell. Defaults to model format value.\n * @returns A text formatted snapshot of the data for the specified range set\n */\n\n /**\n * @param column The columns to get the distinct values for\n * @returns A table partitioned on the specified columns in the order given in\n */\n\n /**\n * Close this model. It can no longer be used after being closed\n */\n close() {\n // no-op\n }\n\n /**\n * Don't allow any rows to be movable in any IrisGrids by default. Just columns.\n */\n isRowMovable() {\n return false;\n }\n\n /**\n * Delete ranges from an input grid. Will delete the entire row, causing data to shift up\n * @param ranges The ranges to delete\n * @returns A promise that resolves successfully when the operation is complete or rejects if there's an error\n */\n\n get isSeekRowAvailable() {\n return false;\n }\n dataBarOptionsForCell(column, row, theme) {\n throw new Error('Method not implemented.');\n }\n}\n_defineProperty(IrisGridModel, \"EVENT\", Object.freeze({\n UPDATED: 'UPDATED',\n FORMATTER_UPDATED: 'FORMATTER_UPDATED',\n REQUEST_FAILED: 'REQUEST_FAILED',\n COLUMNS_CHANGED: 'COLUMNS_CHANGED',\n TABLE_CHANGED: 'TABLE_CHANGED',\n FILTERS_CHANGED: 'FILTERS_CHANGED',\n SORTS_CHANGED: 'SORTS_CHANGED',\n DISCONNECT: 'DISCONNECT',\n RECONNECT: 'RECONNECT',\n TOTALS_UPDATED: 'TOTALS_UPDATED',\n PENDING_DATA_UPDATED: 'PENDING_DATA_UPDATED'\n}));\nexport default IrisGridModel;\n//# sourceMappingURL=IrisGridModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { GridUtils } from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport Log from '@deephaven/log';\nvar log = Log.module('ColumnHeaderGroup');\nexport function isColumnHeaderGroup(x) {\n return x instanceof ColumnHeaderGroup;\n}\nexport default class ColumnHeaderGroup {\n constructor(_ref) {\n var {\n name,\n children,\n color,\n depth,\n childIndexes,\n parent\n } = _ref;\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"children\", void 0);\n _defineProperty(this, \"depth\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"childIndexes\", void 0);\n _defineProperty(this, \"getVisibleRange\", memoizeOne(movedItems => {\n var flattenedIndexes = this.childIndexes.flat();\n var visibleIndexes = GridUtils.getVisibleIndexes(flattenedIndexes, movedItems);\n var start = Math.min(...visibleIndexes);\n var end = Math.max(...visibleIndexes);\n if (end - start !== flattenedIndexes.length - 1) {\n log.warn(\"Column header group \".concat(this.name, \" is not contiguous\"));\n }\n return [start, end];\n }));\n this.name = name;\n this.children = children;\n this.color = color;\n this.depth = depth;\n this.childIndexes = childIndexes;\n this.parent = parent;\n }\n setParent(parent) {\n this.parent = parent;\n }\n addChildren(children) {\n var newChildren = new Set(this.children.concat(children));\n this.children = [...newChildren];\n }\n removeChildren(children) {\n var newChildren = new Set(this.children);\n children.forEach(name => newChildren.delete(name));\n this.children = [...newChildren];\n }\n get isNew() {\n return this.name.startsWith(ColumnHeaderGroup.NEW_GROUP_PREFIX);\n }\n}\n_defineProperty(ColumnHeaderGroup, \"NEW_GROUP_PREFIX\", ':newGroup');\n//# sourceMappingURL=ColumnHeaderGroup.js.map","export function isPartitionedGridModelProvider(model) {\n return (model === null || model === void 0 ? void 0 : model.isPartitionRequired) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionColumns) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionKeysTable) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionMergedTable) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionTable) !== undefined;\n}\nexport function isPartitionedGridModel(model) {\n return isPartitionedGridModelProvider(model) && model.partitionConfig !== undefined;\n}\n\n/**\n * A grid model that provides key tables and partitions, cannot accept a `PartitionConfig` being set\n */\n\n/**\n * A grid model that can be partitioned on a column\n */\n//# sourceMappingURL=PartitionedGridModel.js.map","var _excluded = [\"selectedValues\"],\n _excluded2 = [\"selectedValues\"];\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { GridUtils } from '@deephaven/grid';\nimport { DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { assertNotNull, bindAllMethods, EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport AggregationUtils from \"./sidebar/aggregations/AggregationUtils.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport AdvancedSettings from \"./sidebar/AdvancedSettings.js\";\nimport ColumnHeaderGroup from \"./ColumnHeaderGroup.js\";\nimport { isPartitionedGridModelProvider } from \"./PartitionedGridModel.js\";\nvar log = Log.module('IrisGridUtils');\n\n/** @deprecated Use `DehydratedSort` instead */\n\nexport function isPanelStateV1(state) {\n return state.partition !== undefined;\n}\nexport function isPanelStateV2(state) {\n return Array.isArray(state.partitions);\n}\n\n/**\n * Checks if an index is valid for the given array\n * @param x The index to check\n * @param array The array\n * @returns True if the index if valid within the array\n */\nfunction isValidIndex(x, array) {\n return x >= 0 && x < array.length;\n}\nfunction isDateWrapper(value) {\n return (value === null || value === void 0 ? void 0 : value.asDate) != null;\n}\nclass IrisGridUtils {\n /**\n * Exports the state from Grid component to a JSON stringifiable object\n * @param model The table model to export the Grid state for\n * @param gridState The state of the Grid to export\n * @returns An object that can be stringified and imported with {{@link hydrateGridState}}\n */\n static dehydrateGridState(model, gridState) {\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var {\n columns\n } = model;\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns].filter(_ref => {\n var {\n to,\n from\n } = _ref;\n return isValidIndex(to, columns) && (typeof from === 'number' && isValidIndex(from, columns) || Array.isArray(from) && isValidIndex(from[0], columns) && isValidIndex(from[1], columns));\n }).map(_ref2 => {\n var {\n to,\n from\n } = _ref2;\n return {\n to: columns[to].name,\n from: Array.isArray(from) ? [columns[from[0]].name, columns[from[1]].name] : columns[from].name\n };\n }),\n movedRows: [...movedRows]\n };\n }\n\n /**\n * Import a state for Grid that was exported with {{@link dehydrateGridState}}\n * @param model The table model to import the state for\n * @param gridState The state of the panel that was saved\n * @returns The gridState props to set on the Grid\n */\n static hydrateGridState(model, gridState) {\n var customColumns = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var {\n columns\n } = model;\n var customColumnNames = IrisGridUtils.parseCustomColumnNames(customColumns);\n var columnNames = columns.map(_ref3 => {\n var {\n name\n } = _ref3;\n return name;\n }).concat(customColumnNames);\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns].map(_ref4 => {\n var {\n to,\n from\n } = _ref4;\n var getIndex = x => typeof x === 'string' ? columnNames.findIndex(name => name === x) : x;\n return {\n to: getIndex(to),\n from: Array.isArray(from) ? [getIndex(from[0]), getIndex(from[1])] : getIndex(from)\n };\n }).filter(_ref5 => {\n var {\n to,\n from\n } = _ref5;\n return isValidIndex(to, columnNames) && (typeof from === 'number' && isValidIndex(from, columnNames) || Array.isArray(from) && isValidIndex(from[0], columnNames) && isValidIndex(from[1], columnNames));\n }),\n movedRows: [...movedRows]\n };\n }\n\n /**\n * Export the IrisGridPanel state.\n * @param model The table model the state is being dehydrated with\n * @param irisGridPanelState The current IrisGridPanel state\n * @returns The dehydrated IrisGridPanel state\n */\n static dehydrateIrisGridPanelState(model, irisGridPanelState) {\n var {\n isSelectingPartition,\n partitions,\n advancedSettings\n } = irisGridPanelState;\n\n // Return value will be serialized, should not contain undefined\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: [...advancedSettings]\n };\n }\n\n /**\n * Import the saved IrisGridPanel state.\n * @param model The model the state is being hydrated with\n * @param irisGridPanelState Exported IrisGridPanel state\n * @returns The state to apply to the IrisGridPanel\n */\n static hydrateIrisGridPanelState(model, irisGridPanelState) {\n var {\n isSelectingPartition,\n advancedSettings\n } = irisGridPanelState;\n var partitions = isPanelStateV2(irisGridPanelState) ? irisGridPanelState.partitions : [irisGridPanelState.partition];\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: new Map([...AdvancedSettings.DEFAULTS, ...advancedSettings])\n };\n }\n\n /**\n * Export the quick filters to JSON striginfiable object\n * @param quickFilters The quick filters to dehydrate\n * @returns The dehydrated quick filters\n */\n static dehydrateQuickFilters(quickFilters) {\n return [...quickFilters].map(_ref6 => {\n var [columnIndex, quickFilter] = _ref6;\n var {\n text\n } = quickFilter;\n return [columnIndex, {\n text\n }];\n });\n }\n static dehydrateLong(value) {\n return value != null ? \"\".concat(value) : null;\n }\n\n /**\n * Export the sorts from the provided table sorts to JSON stringifiable object\n * @param sorts The table sorts\n * @returns The dehydrated sorts\n */\n static dehydrateSort(sorts) {\n return sorts.map(sort => {\n var {\n column,\n isAbs,\n direction\n } = sort;\n return {\n column: column.name,\n isAbs,\n direction\n };\n });\n }\n\n /**\n * Pulls just the table settings from the panel state, eg. filters/sorts\n * @param panelState The dehydrated panel state\n * @returns A dehydrated table settings object, { partition, partitionColumn, advancedFilters, quickFilters, sorts }\n */\n static extractTableSettings(panelState) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var {\n irisGridPanelState,\n irisGridState\n } = panelState;\n var partitions = isPanelStateV2(irisGridPanelState) ? irisGridPanelState.partitions : [irisGridPanelState.partition];\n var {\n advancedFilters,\n quickFilters,\n sorts\n } = irisGridState;\n return {\n advancedFilters,\n inputFilters,\n partitions,\n quickFilters,\n sorts\n };\n }\n static getInputFiltersForColumns(columns) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return inputFilters.filter(_ref7 => {\n var {\n name,\n type\n } = _ref7;\n return columns.find(_ref8 => {\n var {\n name: columnName,\n type: columnType\n } = _ref8;\n return columnName === name && columnType === type;\n });\n });\n }\n static getFiltersFromFilterMap(filterMap) {\n var filters = [];\n var keys = Array.from(filterMap.keys());\n for (var i = 0; i < keys.length; i += 1) {\n var key = keys[i];\n var item = filterMap.get(key);\n if ((item === null || item === void 0 ? void 0 : item.filter) != null) {\n filters.push(item.filter);\n }\n }\n return filters;\n }\n\n /**\n * Get array of hidden column indexes\n * @param userColumnWidths Map of user column widths\n * @returns Array of hidden column indexes\n */\n static getHiddenColumns(userColumnWidths) {\n return [...userColumnWidths.entries()].filter(_ref9 => {\n var [, value] = _ref9;\n return value === 0;\n }).map(_ref10 => {\n var [key] = _ref10;\n return key;\n });\n }\n static parseCustomColumnNames(customColumns) {\n return customColumns.map(customColumn => customColumn.split('=')[0]);\n }\n static getRemovedCustomColumnNames(oldCustomColumns, customColumns) {\n var oldCustomColumnsNames = IrisGridUtils.parseCustomColumnNames(oldCustomColumns);\n var customColumnNames = IrisGridUtils.parseCustomColumnNames(customColumns);\n return oldCustomColumnsNames.filter(oldCustomColumnName => !customColumnNames.includes(oldCustomColumnName));\n }\n static removeSortsInColumns(sorts, columnNames) {\n return sorts.filter(sort => !columnNames.includes(sort.column.name));\n }\n static removeFiltersInColumns(columns, filters, removedColumnNames) {\n var columnNames = columns.map(_ref11 => {\n var {\n name\n } = _ref11;\n return name;\n });\n var newFilter = new Map(filters);\n removedColumnNames.forEach(columnName => newFilter.delete(columnNames.indexOf(columnName)));\n return newFilter;\n }\n static removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames) {\n var columnNames = columns.map(_ref12 => {\n var {\n name\n } = _ref12;\n return name;\n });\n var newMoves = [...movedColumns];\n var _loop = function _loop() {\n var removedColumnName = removedColumnNames[i];\n var removedColumnIndex = columnNames.findIndex(name => name === removedColumnName);\n var moves = [];\n for (var j = 0; j < newMoves.length; j += 1) {\n var move = newMoves[j];\n var newMove = _objectSpread({}, move);\n var [fromStart, fromEnd] = Array.isArray(move.from) ? move.from : [move.from, move.from];\n if (removedColumnIndex <= move.to) {\n newMove.to -= 1;\n }\n\n // If equal to fromStart, the new fromStart would stay the same\n // It's just the next element in the range which will have the same index after deletion\n if (removedColumnIndex < fromStart) {\n fromStart -= 1;\n }\n if (removedColumnIndex <= fromEnd) {\n fromEnd -= 1;\n }\n if (fromStart <= fromEnd && fromStart !== newMove.to) {\n if (fromStart === fromEnd) {\n moves.push(_objectSpread(_objectSpread({}, newMove), {}, {\n from: fromStart\n }));\n } else {\n moves.push(_objectSpread(_objectSpread({}, newMove), {}, {\n from: [fromStart, fromEnd]\n }));\n }\n }\n\n // get the next index of the removed column after the move is applied\n // eslint-disable-next-line prefer-destructuring\n removedColumnIndex = GridUtils.applyItemMoves(removedColumnIndex, removedColumnIndex, [move])[0][0];\n }\n newMoves = moves;\n columnNames.splice(columnNames.findIndex(name => name === removedColumnName), 1);\n };\n for (var i = 0; i < removedColumnNames.length; i += 1) {\n _loop();\n }\n return newMoves;\n }\n static removeColumnsFromSelectDistinctColumns(selectDistinctColumns, removedColumnNames) {\n return selectDistinctColumns.filter(columnName => !removedColumnNames.includes(columnName));\n }\n static getVisibleColumnsInRange(tableColumns, left, right, movedColumns, hiddenColumns) {\n var columns = [];\n for (var i = left; i <= right; i += 1) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.push(tableColumns[modelIndex]);\n }\n }\n return columns;\n }\n static getPrevVisibleColumns(tableColumns, startIndex, count, movedColumns, hiddenColumns) {\n var columns = [];\n var i = startIndex;\n while (i >= 0 && columns.length < count) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.unshift(tableColumns[modelIndex]);\n }\n i -= 1;\n }\n return columns;\n }\n static getNextVisibleColumns(tableColumns, startIndex, count, movedColumns, hiddenColumns) {\n var columns = [];\n var i = startIndex;\n while (i < tableColumns.length && columns.length < count) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.push(tableColumns[modelIndex]);\n }\n i += 1;\n }\n return columns;\n }\n static getColumnsToFetch(tableColumns, viewportColumns, alwaysFetchColumnNames) {\n var columnsToFetch = [...viewportColumns];\n alwaysFetchColumnNames.forEach(columnName => {\n var column = tableColumns.find(_ref13 => {\n var {\n name\n } = _ref13;\n return name === columnName;\n });\n if (column != null && !viewportColumns.includes(column)) {\n columnsToFetch.push(column);\n }\n });\n return columnsToFetch;\n }\n static getModelViewportColumns(columns, left, right, movedColumns) {\n var hiddenColumns = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n var alwaysFetchColumnNames = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n var bufferPages = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n if (left == null || right == null) {\n return undefined;\n }\n var columnsCenter = IrisGridUtils.getVisibleColumnsInRange(columns, left, right, movedColumns, hiddenColumns);\n var bufferWidth = columnsCenter.length * bufferPages;\n var columnsLeft = IrisGridUtils.getPrevVisibleColumns(columns, left - 1, bufferWidth, movedColumns, hiddenColumns);\n var columnsRight = IrisGridUtils.getNextVisibleColumns(columns, right + 1, bufferWidth, movedColumns, hiddenColumns);\n var bufferedColumns = [...columnsLeft, ...columnsCenter, ...columnsRight];\n return IrisGridUtils.getColumnsToFetch(columns, bufferedColumns, alwaysFetchColumnNames);\n }\n\n /**\n * Validate whether the ranges passed in are valid to take a snapshot from.\n * Multiple selections are valid if all of the selected rows have the same columns selected.\n *\n * @param ranges The ranges to validate\n * @returns True if the ranges are valid, false otherwise\n */\n static isValidSnapshotRanges(ranges) {\n if (ranges == null || ranges.length === 0) {\n return false;\n }\n\n // To verify all the rows selected have the same set of columns selected, build a map with string representations\n // of each range.\n var rangeMap = new Map();\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n var rowMapIndex = \"\".concat(range.startRow, \":\").concat(range.endRow);\n var columnMapIndex = \"\".concat(range.startColumn, \":\").concat(range.endColumn);\n if (!rangeMap.has(rowMapIndex)) {\n rangeMap.set(rowMapIndex, []);\n }\n rangeMap.get(rowMapIndex).push(columnMapIndex);\n }\n var keys = [...rangeMap.keys()];\n var matchColumnRanges = rangeMap.get(keys[0]).sort().join(',');\n for (var _i = 1; _i < keys.length; _i += 1) {\n if (rangeMap.get(keys[_i]).sort().join(',') !== matchColumnRanges) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Check if the provided value is a valid table index\n * @param value A value to check if it's a valid table index\n */\n static isValidIndex(value) {\n if (!Number.isInteger(value)) {\n return false;\n }\n if (!(typeof value === 'number')) {\n return false;\n }\n return value >= 0;\n }\n\n /**\n * Returns all columns used in any of the ranges provided\n * @param ranges The model ranges to get columns for\n * @param allColumns All the columns to pull from\n * @returns The columns selected in the range\n */\n static columnsFromRanges(ranges, allColumns) {\n if (ranges == null || ranges.length === 0) {\n return [];\n }\n if (ranges[0].startColumn === null && ranges[0].endColumn === null) {\n // Snapshot of all the columns\n return [...allColumns];\n }\n var columnSet = new Set();\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n assertNotNull(range.startColumn);\n assertNotNull(range.endColumn);\n for (var c = (_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0; c <= ((_range$endColumn = range.endColumn) !== null && _range$endColumn !== void 0 ? _range$endColumn : allColumns.length - 1); c += 1) {\n var _range$startColumn, _range$endColumn;\n columnSet.add(c);\n }\n }\n return [...columnSet].map(c => allColumns[c]);\n }\n\n /**\n * Transforms an iris data snapshot into a simple data matrix\n * @param data The Iris formatted table data\n * @returns A matrix of the values of the data\n */\n static snapshotDataToMatrix(data) {\n var {\n columns,\n rows\n } = data;\n var result = [];\n for (var r = 0; r < rows.length; r += 1) {\n var row = rows[r];\n var rowData = [];\n for (var c = 0; c < columns.length; c += 1) {\n var column = columns[c];\n var value = row.get(column);\n rowData.push(value);\n }\n result.push(rowData);\n }\n return result;\n }\n\n /**\n * Hydrate model rollup config\n * @param originalColumns Original model columns\n * @param config Dehydrated rollup config\n * @param aggregationSettings Aggregation settings\n * @returns Rollup config for the model\n */\n static getModelRollupConfig(originalColumns, config, aggregationSettings) {\n var _config$columns$lengt, _config$columns;\n if (((_config$columns$lengt = config === null || config === void 0 ? void 0 : (_config$columns = config.columns) === null || _config$columns === void 0 ? void 0 : _config$columns.length) !== null && _config$columns$lengt !== void 0 ? _config$columns$lengt : 0) === 0) {\n return null;\n }\n var {\n columns: groupingColumns = [],\n showConstituents: includeConstituents = true,\n showNonAggregatedColumns = true,\n includeDescriptions = true\n } = config !== null && config !== void 0 ? config : {};\n var {\n aggregations = []\n } = aggregationSettings !== null && aggregationSettings !== void 0 ? aggregationSettings : {};\n var aggregationColumns = aggregations.map(_ref14 => {\n var {\n operation,\n selected,\n invert\n } = _ref14;\n return AggregationUtils.isRollupOperation(operation) ? [] : AggregationUtils.getOperationColumnNames(originalColumns, operation, selected, invert);\n });\n var aggregationMap = {};\n // Aggregation columns should show first, add them first\n for (var i = 0; i < aggregations.length; i += 1) {\n aggregationMap[aggregations[i].operation] = aggregationColumns[i];\n }\n if (showNonAggregatedColumns) {\n // Filter out any column that already has an aggregation or grouping\n var nonAggregatedColumnSet = new Set(originalColumns.map(c => c.name).filter(name => !groupingColumns.includes(name)));\n aggregationColumns.forEach(columns => {\n columns.forEach(name => nonAggregatedColumnSet.delete(name));\n });\n if (nonAggregatedColumnSet.size > 0) {\n var _aggregationMap$Aggre;\n var existingColumns = (_aggregationMap$Aggre = aggregationMap[AggregationOperation.FIRST]) !== null && _aggregationMap$Aggre !== void 0 ? _aggregationMap$Aggre : [];\n aggregationMap[AggregationOperation.FIRST] = [...existingColumns, ...nonAggregatedColumnSet];\n }\n }\n return {\n groupingColumns,\n includeConstituents,\n includeDescriptions,\n aggregations: aggregationMap\n };\n }\n\n /**\n * @param pendingDataMap Map of pending data\n * @returns A map with the errors in the pending data\n */\n static getPendingErrors(pendingDataMap) {\n pendingDataMap.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(\"Invalid rowIndex \".concat(rowIndex));\n }\n var {\n data\n } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(\"Invalid columnIndex \".concat(columnIndex));\n }\n });\n });\n }\n\n /**\n * Retrieves a column from the provided array at the index, or `null` and logs an error if it's invalid\n *\n * @param columns The columns to get the column from\n * @param columnIndex The column index to get\n */\n static getColumn(columns, columnIndex) {\n if (columnIndex < columns.length) {\n return columns[columnIndex];\n }\n log.error('Unable to retrieve column', columnIndex, '>=', columns.length);\n return null;\n }\n\n /**\n * Retrieves a column from the provided array matching the name, or `null` and logs an error if not found\n * @param columns The columns to get the column from\n * @param columnName The column name to retrieve\n */\n static getColumnByName(columns, columnName) {\n var column = columns.find(_ref15 => {\n var {\n name\n } = _ref15;\n return name === columnName;\n });\n if (column == null) {\n log.error('Unable to retrieve column by name', columnName, columns.map(_ref16 => {\n var {\n name\n } = _ref16;\n return name;\n }));\n }\n return column;\n }\n\n /**\n * Get filter configs with column names changed to indexes, exclude missing columns\n * @param columns The columns to get column indexes from\n * @param filters Filter configs\n * @returns Updated filter configs with column names changed to indexes\n */\n static changeFilterColumnNamesToIndexes(columns, filters) {\n return filters.map(_ref17 => {\n var {\n name,\n filter\n } = _ref17;\n var index = columns.findIndex(column => column.name === name);\n return index < 0 ? null : [index, filter];\n }).filter(filterConfig => filterConfig != null);\n }\n\n /**\n * @param columnType The column type that the filters will be applied to.\n * @param filterList The list of filters to be combined.\n * @returns The combination of the filters in filterList as text.\n */\n static combineFiltersFromList(columnType, filterList) {\n filterList.sort((a, b) => {\n // move all 'equals' comparisons to end of list\n if (a.operator === 'eq' && b.operator !== 'eq') {\n return 1;\n }\n if (a.operator !== 'eq' && b.operator === 'eq') {\n return -1;\n }\n return a.startColumnIndex - b.startColumnIndex;\n });\n var combinedText = '';\n for (var i = 0; i < filterList.length; i += 1) {\n var {\n text,\n value,\n operator\n } = filterList[i];\n if (value !== undefined) {\n var symbol = '';\n if (operator !== undefined) {\n if (value == null && operator === 'eq') {\n symbol = '=';\n } else if (operator !== 'eq') {\n if (operator === 'startsWith' || operator === 'endsWith') {\n symbol = '*';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n }\n var filterText = \"\".concat(symbol).concat(text);\n if (operator === 'startsWith') {\n filterText = \"\".concat(text).concat(symbol);\n }\n if (columnType != null && value !== null && TableUtils.isCharType(columnType)) {\n filterText = \"\".concat(symbol).concat(String.fromCharCode(parseInt(text, 10)));\n }\n if (i !== 0) {\n combinedText += operator === 'eq' ? ' || ' : ' && ';\n }\n combinedText += filterText;\n }\n }\n return combinedText;\n }\n\n /**\n * Parses the column header groups provided.\n * If undefined, should provide default groups such as from layoutHints\n *\n * @returns Object containing groups array, max depth, map of name to parent group, and map of name to group\n */\n static parseColumnHeaderGroups(model, groupsParam) {\n var maxDepth = 1;\n var parentMap = new Map();\n var groupMap = new Map();\n\n // Remove any empty groups before parsing\n var groups = groupsParam === null || groupsParam === void 0 ? void 0 : groupsParam.filter(_ref18 => {\n var {\n children\n } = _ref18;\n return children.length > 0;\n });\n if (groups.length === 0) {\n return {\n groups: [],\n maxDepth,\n parentMap,\n groupMap\n };\n }\n var originalGroupMap = new Map(groups.map(group => [group.name, group]));\n var seenChildren = new Set();\n var addGroup = group => {\n var {\n name\n } = group;\n if (model.getColumnIndexByName(name) != null) {\n throw new Error(\"Column header group has same name as column: \".concat(name));\n }\n var existingGroup = groupMap.get(name);\n if (existingGroup) {\n return existingGroup;\n }\n var childIndexes = [];\n var depth = 1;\n group.children.forEach(childName => {\n if (seenChildren.has(childName)) {\n throw new Error(\"Column group child \".concat(childName, \" specified in multiple groups\"));\n }\n seenChildren.add(childName);\n var childGroup = originalGroupMap.get(childName);\n var childIndex = model.getColumnIndexByName(childName);\n if (childGroup) {\n // Adding another column header group\n var addedGroup = addGroup(childGroup);\n childIndexes.push(...addedGroup.childIndexes);\n depth = Math.max(depth, addedGroup.depth + 1);\n } else if (childIndex != null) {\n // Adding a base column\n childIndexes.push(childIndex);\n depth = Math.max(depth, 1);\n } else {\n throw new Error(\"Unknown child \".concat(childName, \" in group \").concat(name));\n }\n });\n var columnHeaderGroup = new ColumnHeaderGroup(_objectSpread(_objectSpread({}, group), {}, {\n depth,\n childIndexes: childIndexes.flat()\n }));\n groupMap.set(name, columnHeaderGroup);\n group.children.forEach(childName => parentMap.set(childName, columnHeaderGroup));\n maxDepth = Math.max(maxDepth, columnHeaderGroup.depth + 1);\n return columnHeaderGroup;\n };\n var groupNames = new Set();\n groups.forEach(group => {\n var {\n name\n } = group;\n if (groupNames.has(name)) {\n throw new Error(\"Duplicate column group name: \".concat(name));\n }\n groupNames.add(name);\n addGroup(group);\n });\n groupMap.forEach(group => {\n var _parentMap$get;\n group.setParent((_parentMap$get = parentMap.get(group.name)) === null || _parentMap$get === void 0 ? void 0 : _parentMap$get.name);\n });\n return {\n groups: [...groupMap.values()],\n maxDepth,\n groupMap,\n parentMap\n };\n }\n\n /**\n * @param value The value of the cell in a column\n * @param columnType The type of the column\n * @returns The value of the cell converted to text\n */\n static convertValueToText(value, columnType) {\n if (columnType != null && TableUtils.isCharType(columnType) && value != null && typeof value === 'number') {\n return String.fromCharCode(value);\n }\n if (TableUtils.isDateType(columnType) && isDateWrapper(value)) {\n var date = new Date(value.asDate());\n var offset = date.getTimezoneOffset();\n var offsetDate = new Date(date.getTime() - offset * 60 * 1000);\n var dateText = offsetDate.toISOString();\n var formattedText = dateText.replace('T', ' ').substring(0, 23);\n return formattedText;\n }\n if (value == null) {\n return '';\n }\n return \"\".concat(value);\n }\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n this.dh = dh;\n this.tableUtils = new TableUtils(dh);\n bindAllMethods(this);\n }\n\n /**\n * Exports the state from IrisGrid to a JSON stringifiable object\n * @param model The table model to export the state for\n * @param irisGridState The current state of the IrisGrid\n */\n dehydrateIrisGridState(model, irisGridState) {\n var {\n aggregationSettings = {\n aggregations: EMPTY_ARRAY,\n showOnTop: false\n },\n advancedFilters,\n customColumnFormatMap,\n isFilterBarShown,\n metrics,\n quickFilters,\n customColumns,\n conditionalFormats = EMPTY_ARRAY,\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns = EMPTY_ARRAY,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n columnHeaderGroups,\n partitionConfig = undefined\n } = irisGridState;\n assertNotNull(metrics);\n var {\n userColumnWidths,\n userRowHeights\n } = metrics;\n var {\n columns\n } = model;\n var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];\n\n // Return value will be serialized, should not contain undefined\n return {\n advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),\n aggregationSettings,\n customColumnFormatMap: [...customColumnFormatMap],\n isFilterBarShown,\n quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),\n sorts: IrisGridUtils.dehydrateSort(sorts),\n userColumnWidths: [...userColumnWidths].filter(_ref19 => {\n var [columnIndex] = _ref19;\n return columnIndex != null && columnIndex >= 0 && columnIndex < columns.length;\n }).map(_ref20 => {\n var [columnIndex, width] = _ref20;\n return [columns[columnIndex].name, width];\n }),\n userRowHeights: [...userRowHeights],\n customColumns: [...customColumns],\n conditionalFormats: [...conditionalFormats],\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns: [...selectDistinctColumns],\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.dehydratePendingDataMap(columns, pendingDataMap),\n frozenColumns,\n columnHeaderGroups: columnHeaderGroups === null || columnHeaderGroups === void 0 ? void 0 : columnHeaderGroups.map(item => ({\n name: item.name,\n children: item.children,\n color: item.color\n })),\n partitionConfig: this.dehydratePartitionConfig(partitionColumns, partitionConfig)\n };\n }\n\n /**\n * Import a state for IrisGrid that was exported with {{@link dehydrateIrisGridState}}\n * @param model The table model to import the state with\n * @param irisGridState The saved IrisGrid state\n */\n hydrateIrisGridState(model, irisGridState) {\n var _ref24, _model$layoutHints;\n var {\n advancedFilters,\n aggregationSettings = {\n aggregations: [],\n showOnTop: false\n },\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n sorts,\n customColumns,\n conditionalFormats,\n userColumnWidths,\n userRowHeights,\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns = true,\n pendingDataMap = [],\n frozenColumns,\n columnHeaderGroups,\n partitionConfig\n } = irisGridState;\n var {\n columns,\n formatter\n } = model;\n var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];\n return {\n advancedFilters: this.hydrateAdvancedFilters(columns, advancedFilters, formatter.timeZone),\n aggregationSettings,\n customColumnFormatMap: new Map(customColumnFormatMap),\n isFilterBarShown,\n quickFilters: this.hydrateQuickFilters(columns, quickFilters, formatter.timeZone),\n sorts: this.hydrateSort(columns, sorts),\n userColumnWidths: new Map(userColumnWidths.map(_ref21 => {\n var [column, width] = _ref21;\n if (typeof column === 'string' || column instanceof String) {\n return [columns.findIndex(_ref22 => {\n var {\n name\n } = _ref22;\n return name === column;\n }), width];\n }\n return [column, width];\n }).filter(_ref23 => {\n var [column] = _ref23;\n return column != null && column >= 0 && column < columns.length;\n })),\n customColumns,\n conditionalFormats,\n userRowHeights: new Map(userRowHeights),\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.hydratePendingDataMap(columns, pendingDataMap),\n frozenColumns,\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(model, (_ref24 = columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : (_model$layoutHints = model.layoutHints) === null || _model$layoutHints === void 0 ? void 0 : _model$layoutHints.columnGroups) !== null && _ref24 !== void 0 ? _ref24 : []).groups,\n partitionConfig: this.hydratePartitionConfig(partitionColumns, partitionConfig)\n };\n }\n\n /**\n * Import the saved quick filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedQuickFilters Exported quick filters definitions\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns The quick filters to apply to the columns\n */\n hydrateQuickFilters(columns, savedQuickFilters, timeZone) {\n var importedFilters = savedQuickFilters.map(_ref25 => {\n var [columnIndex, quickFilter] = _ref25;\n var {\n text\n } = quickFilter;\n var filter = null;\n try {\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n if (column != null) {\n filter = this.tableUtils.makeQuickFilter(column, text, timeZone);\n }\n } catch (error) {\n log.error('hydrateQuickFilters error with', text, error);\n }\n return [columnIndex, {\n text,\n filter\n }];\n });\n return new Map(importedFilters);\n }\n\n /**\n * Export the advanced filters from the provided columns to JSON striginfiable object\n * @param columns The columns for the filters\n * @param advancedFilters The advanced filters to dehydrate\n * @returns The dehydrated advanced filters\n */\n dehydrateAdvancedFilters(columns, advancedFilters) {\n return [...advancedFilters].map(_ref26 => {\n var [columnIndex, advancedFilter] = _ref26;\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n var options = this.dehydrateAdvancedFilterOptions(column, advancedFilter.options);\n return [columnIndex, {\n options\n }];\n });\n }\n\n /**\n * Import the saved advanced filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedAdvancedFilters Exported advanced filters definitions\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns The advanced filters to apply to the columns\n */\n hydrateAdvancedFilters(columns, savedAdvancedFilters, timeZone) {\n var importedFilters = savedAdvancedFilters.map(_ref27 => {\n var [columnIndex, advancedFilter] = _ref27;\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n var options = this.hydrateAdvancedFilterOptions(column, advancedFilter.options);\n var filter = null;\n try {\n var columnRetrieved = IrisGridUtils.getColumn(columns, columnIndex);\n if (columnRetrieved != null) {\n filter = this.tableUtils.makeAdvancedFilter(column, options, timeZone);\n }\n } catch (error) {\n log.error('hydrateAdvancedFilters error with', options, error);\n }\n return [columnIndex, {\n options,\n filter\n }];\n });\n return new Map(importedFilters);\n }\n dehydrateAdvancedFilterOptions(column, options) {\n var {\n selectedValues\n } = options,\n otherOptions = _objectWithoutProperties(options, _excluded);\n return _objectSpread({\n selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => this.dehydrateValue(value, column === null || column === void 0 ? void 0 : column.type))\n }, otherOptions);\n }\n hydrateAdvancedFilterOptions(column, options) {\n var {\n selectedValues\n } = options,\n otherOptions = _objectWithoutProperties(options, _excluded2);\n return _objectSpread({\n selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => this.hydrateValue(value, column === null || column === void 0 ? void 0 : column.type))\n }, otherOptions);\n }\n dehydratePendingDataMap(columns, pendingDataMap) {\n return [...pendingDataMap].map(_ref28 => {\n var [rowIndex, {\n data\n }] = _ref28;\n return [rowIndex, {\n data: [...data].map(_ref29 => {\n var [c, value] = _ref29;\n return [columns[c].name, this.dehydrateValue(value, columns[c].type)];\n })\n }];\n });\n }\n hydratePendingDataMap(columns, pendingDataMap) {\n var columnMap = new Map();\n var getColumnIndex = columnName => {\n if (!columnMap.has(columnName)) {\n columnMap.set(columnName, columns.findIndex(_ref30 => {\n var {\n name\n } = _ref30;\n return name === columnName;\n }));\n }\n return columnMap.get(columnName);\n };\n return new Map(pendingDataMap.map(_ref31 => {\n var [rowIndex, {\n data\n }] = _ref31;\n return [rowIndex, {\n data: new Map(data.map(_ref32 => {\n var _getColumnIndex;\n var [columnName, value] = _ref32;\n var index = getColumnIndex(columnName);\n assertNotNull(index);\n return [(_getColumnIndex = getColumnIndex(columnName)) !== null && _getColumnIndex !== void 0 ? _getColumnIndex : null, this.hydrateValue(value, columns[index].type)];\n }))\n }];\n }));\n }\n dehydratePartitionConfig(partitionColumns, partitionConfig) {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n return _objectSpread(_objectSpread({}, partitionConfig), {}, {\n partitions: partitionConfig.partitions.map((partition, index) => this.dehydrateValue(partition, partitionColumns[index].type))\n });\n }\n hydratePartitionConfig(partitionColumns, partitionConfig) {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n return _objectSpread(_objectSpread({}, partitionConfig), {}, {\n partitions: partitionConfig.partitions.map((partition, index) => this.hydrateValue(partition, partitionColumns[index].type))\n });\n }\n\n /**\n * Dehydrates/serializes a value for storage.\n * @param value The value to dehydrate\n * @param columnType The column type\n */\n dehydrateValue(value, columnType) {\n if (TableUtils.isDateType(columnType)) {\n return this.dehydrateDateTime(value);\n }\n if (TableUtils.isLongType(columnType)) {\n return IrisGridUtils.dehydrateLong(value);\n }\n return value;\n }\n\n /**\n * Hydrate a value from it's serialized state\n * @param value The dehydrated value that needs to be hydrated\n * @param columnType The type of column\n */\n hydrateValue(value, columnType) {\n if (TableUtils.isDateType(columnType)) {\n return this.hydrateDateTime(value);\n }\n if (TableUtils.isLongType(columnType)) {\n return this.hydrateLong(value);\n }\n return value;\n }\n dehydrateDateTime(value) {\n return value != null ? this.dh.i18n.DateTimeFormat.format(DateUtils.FULL_DATE_FORMAT, value) : null;\n }\n hydrateDateTime(value) {\n return value != null ? this.dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, value) : null;\n }\n hydrateLong(value) {\n return value != null ? this.dh.LongWrapper.ofString(value) : null;\n }\n\n /**\n * Import the saved sorts to apply to the table. Does not actually apply the sort.\n * @param columns The columns the sorts will be applied to\n * @param sorts Exported sort definitions\n * @returns The sorts to apply to the table\n */\n hydrateSort(columns, sorts) {\n var {\n dh\n } = this;\n return sorts.map(sort => {\n var {\n column: columnIndexOrName,\n isAbs,\n direction\n } = sort;\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n var column = typeof columnIndexOrName === 'string' ? IrisGridUtils.getColumnByName(columns, columnIndexOrName) : IrisGridUtils.getColumn(columns, columnIndexOrName);\n if (column != null) {\n var columnSort = column.sort();\n if (isAbs) {\n columnSort = columnSort.abs();\n }\n if (direction === TableUtils.sortDirection.descending) {\n columnSort = columnSort.desc();\n } else {\n columnSort = columnSort.asc();\n }\n return columnSort;\n }\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n // If the item is a reverse sort item, filter it out - it will get applied with the `reverseType` property\n // This should only happen when loading a legacy dashboard\n .filter(item => item != null && item.direction !== TableUtils.sortDirection.reverse);\n }\n\n /**\n * Applies the passed in table settings directly to the provided table\n * @param table The table to apply the settings to\n * @param tableSettings Dehydrated table settings extracted with `extractTableSettings`\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n applyTableSettings(table, tableSettings, timeZone) {\n var {\n columns\n } = table;\n var quickFilters = [];\n if (tableSettings.quickFilters) {\n quickFilters = IrisGridUtils.getFiltersFromFilterMap(this.hydrateQuickFilters(columns, tableSettings.quickFilters, timeZone));\n }\n var advancedFilters = [];\n if (tableSettings.advancedFilters) {\n advancedFilters = IrisGridUtils.getFiltersFromFilterMap(this.hydrateAdvancedFilters(columns, tableSettings.advancedFilters, timeZone));\n }\n var inputFilters = this.getFiltersFromInputFilters(columns, tableSettings.inputFilters, timeZone);\n var sorts = [];\n if (tableSettings.sorts) {\n sorts = this.hydrateSort(columns, tableSettings.sorts);\n }\n var filters = [...quickFilters, ...advancedFilters];\n var {\n partitions,\n partitionColumns: partitionColumnNames\n } = tableSettings;\n if (partitions && partitions.length && partitionColumnNames && partitionColumnNames !== null && partitionColumnNames !== void 0 && partitionColumnNames.length) {\n var partitionColumns = partitionColumnNames.map(partitionColumnName => IrisGridUtils.getColumnByName(columns, partitionColumnName));\n for (var i = 0; i < partitionColumns.length; i += 1) {\n if (partitionColumns[i] !== undefined && partitions[i] != null) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n var partitionFilter = partitionColumns[i].filter().eq(this.dh.FilterValue.ofString(partitions[i]));\n filters = [partitionFilter, ...filters];\n }\n }\n }\n filters = [...inputFilters, ...filters];\n table.applyFilter(filters);\n table.applySort(sorts);\n }\n getFiltersFromInputFilters(columns) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var timeZone = arguments.length > 2 ? arguments[2] : undefined;\n return inputFilters.map(_ref33 => {\n var {\n name,\n type,\n value\n } = _ref33;\n var column = columns.find(_ref34 => {\n var {\n name: columnName,\n type: columnType\n } = _ref34;\n return columnName === name && columnType === type;\n });\n if (column) {\n try {\n return this.tableUtils.makeQuickFilter(column, value, timeZone);\n } catch (e) {\n // It may be unable to create it because user hasn't completed their input\n log.debug('Unable to create input filter', e);\n }\n }\n return null;\n }).filter(filter => filter != null);\n }\n\n /**\n * Get the dh.RangeSet representation of the provided ranges.\n * Ranges are sorted prior to creating the RangeSet. Only the rows are taken into account,\n * RangeSet does not have an option for columns.\n * @param ranges The ranges to get the range set for\n * @returns The rangeset for the provided ranges\n */\n rangeSetFromRanges(ranges) {\n var {\n dh\n } = this;\n var rangeSets = ranges.slice().sort((a, b) => {\n assertNotNull(a.startRow);\n assertNotNull(b.startRow);\n return a.startRow - b.startRow;\n }).map(range => {\n var {\n startRow,\n endRow\n } = range;\n assertNotNull(startRow);\n assertNotNull(endRow);\n return dh.RangeSet.ofRange(startRow, endRow);\n });\n return dh.RangeSet.ofRanges(rangeSets);\n }\n}\nexport default IrisGridUtils;\n//# sourceMappingURL=IrisGridUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass MissingPartitionError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isMissingPartitionError\", true);\n }\n}\nexport function isMissingPartitionError(err) {\n return (err === null || err === void 0 ? void 0 : err.isMissingPartitionError) === true;\n}\nexport default MissingPartitionError;\n//# sourceMappingURL=MissingPartitionError.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass MissingKeyError extends Error {\n constructor(rowIndex, columnName) {\n super(\"\".concat(columnName, \" can't be empty (on pending row \").concat(rowIndex + 1, \")\"));\n _defineProperty(this, \"isMissingKey\", true);\n _defineProperty(this, \"rowIndex\", void 0);\n _defineProperty(this, \"columnName\", void 0);\n this.rowIndex = rowIndex;\n this.columnName = columnName;\n }\n}\nexport default MissingKeyError;\n//# sourceMappingURL=MissingKeyError.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable no-underscore-dangle */\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridRange, GridUtils, memoizeClear } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport { TableUtils, Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport MissingKeyError from \"./MissingKeyError.js\";\nimport { isColumnHeaderGroup } from \"./ColumnHeaderGroup.js\";\nvar log = Log.module('IrisGridTableModelTemplate');\nvar SET_VIEWPORT_THROTTLE = 150;\nvar APPLY_VIEWPORT_THROTTLE = 0;\nexport function isIrisGridTableModelTemplate(model) {\n return model.table !== undefined;\n}\n\n/**\n * Template model for a grid\n */\n\nclass IrisGridTableModelTemplate extends IrisGridModel {\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n throw new Error('Method not implemented.');\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get customColumns() {\n return [];\n }\n set customColumns(customColumns) {\n throw new Error('Method not implemented.');\n }\n get formatColumns() {\n return [];\n }\n set formatColumns(formatColumns) {\n throw new Error('Method not implemented.');\n }\n updateFrozenColumns(columns) {\n throw new Error('Method not implemented.');\n }\n get rollupConfig() {\n throw new Error('Method not implemented.');\n }\n set rollupConfig(rollupConfig) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n throw new Error('Method not implemented.');\n }\n set selectDistinctColumns(names) {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Returns an array of the columns in the model\n * The order of model columns should never change once established\n */\n get columns() {\n return this.table.columns;\n }\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(dh, table) {\n var _this$layoutHints$col, _this$layoutHints;\n var _formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"irisGridUtils\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"irisFormatter\", void 0);\n _defineProperty(this, \"inputTable\", void 0);\n _defineProperty(this, \"subscription\", void 0);\n _defineProperty(this, \"table\", void 0);\n _defineProperty(this, \"viewport\", void 0);\n _defineProperty(this, \"viewportData\", void 0);\n _defineProperty(this, \"formattedStringData\", void 0);\n _defineProperty(this, \"pendingStringData\", void 0);\n _defineProperty(this, \"isSaveInProgress\", void 0);\n _defineProperty(this, \"totalsTable\", void 0);\n _defineProperty(this, \"totalsTablePromise\", void 0);\n _defineProperty(this, \"totals\", void 0);\n _defineProperty(this, \"totalsDataMap\", void 0);\n _defineProperty(this, \"pendingNewDataMap\", void 0);\n _defineProperty(this, \"pendingNewRowCount\", 0);\n _defineProperty(this, \"_columnHeaderGroupMap\", new Map());\n _defineProperty(this, \"columnHeaderParentMap\", new Map());\n _defineProperty(this, \"_columnHeaderMaxDepth\", null);\n _defineProperty(this, \"_columnHeaderGroups\", []);\n _defineProperty(this, \"_movedColumns\", null);\n _defineProperty(this, \"getMemoizedInitialMovedColumns\", memoize(layoutHints => {\n var _layoutHints$columnGr;\n if (!layoutHints) {\n return [];\n }\n var movedColumns = [];\n var {\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr !== void 0 ? _layoutHints$columnGr : []);\n var moveColumn = (name, toIndex) => {\n var modelIndex = this.getColumnIndexByName(name);\n if (modelIndex == null) {\n throw new Error(\"Unknown layout hint column: \".concat(name));\n }\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n movedColumns = GridUtils.moveItem(visibleIndex, toIndex, movedColumns);\n };\n var moveGroup = (name, toIndex) => {\n var group = groupMap.get(name);\n if (group == null) {\n throw new Error(\"Unknown layout hint group: \".concat(name));\n }\n var visibleRange = group.getVisibleRange(movedColumns);\n movedColumns = GridUtils.moveRange(visibleRange, toIndex, movedColumns);\n };\n var {\n frontColumns = [],\n backColumns = [],\n frozenColumns = []\n } = layoutHints;\n if (frontColumns.length || backColumns.length || frozenColumns.length) {\n var usedColumns = new Set();\n var frontIndex = 0;\n frozenColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n frontColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n var backIndex = this.columnMap.size - 1;\n backColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n var layoutHintColumnGroups = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups;\n if (layoutHintColumnGroups) {\n var columnGroups = [...groupMap.values()];\n columnGroups.sort((a, b) => a.depth - b.depth);\n columnGroups.forEach(group => {\n var firstChildName = group.children[0];\n var rightModelIndex = this.getColumnIndexByName(firstChildName);\n var rightVisibleIndex;\n if (rightModelIndex != null) {\n rightVisibleIndex = GridUtils.getVisibleIndex(rightModelIndex, movedColumns);\n } else {\n var firstChildGroup = groupMap.get(firstChildName);\n if (!firstChildGroup) {\n throw new Error(\"Unknown column \".concat(firstChildName, \" in group \").concat(group.name));\n }\n var visibleRange = firstChildGroup.getVisibleRange(movedColumns);\n // Columns will be moved to start at the end of the first child group\n [, rightVisibleIndex] = visibleRange;\n }\n for (var i = 1; i < group.children.length; i += 1) {\n var childName = group.children[i];\n var childGroup = groupMap.get(childName);\n var childColumn = this.getColumnIndexByName(childName);\n if (childGroup) {\n // All columns in the group will be before or after the start index\n // Lower level groups are re-arranged first, so they will be contiguous\n var isBeforeGroup = childGroup.getVisibleRange(movedColumns)[0] < rightVisibleIndex;\n var moveToIndex = isBeforeGroup ? rightVisibleIndex - childGroup.childIndexes.length + 1 : rightVisibleIndex + 1;\n moveGroup(childName, moveToIndex);\n rightVisibleIndex = moveToIndex + childGroup.childIndexes.length - 1;\n } else if (childColumn != null) {\n var _isBeforeGroup = GridUtils.getVisibleIndex(childColumn, movedColumns) < rightVisibleIndex;\n var _moveToIndex = _isBeforeGroup ? rightVisibleIndex : rightVisibleIndex + 1;\n moveColumn(childName, _moveToIndex);\n rightVisibleIndex = _moveToIndex;\n }\n }\n });\n }\n this._movedColumns = movedColumns;\n return movedColumns;\n }));\n _defineProperty(this, \"getMemoizedInitialColumnHeaderGroups\", memoize(layoutHints => {\n var _layoutHints$columnGr2;\n return IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr2 = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr2 !== void 0 ? _layoutHints$columnGr2 : []).groups;\n }));\n _defineProperty(this, \"getMemoizedColumnMap\", memoize(tableColumns => {\n var columnMap = new Map();\n tableColumns.forEach(col => columnMap.set(col.name, col));\n return columnMap;\n }));\n _defineProperty(this, \"getColumnIndicesByNameMap\", memoize(columns => {\n var indices = new Map();\n columns.forEach((_ref, i) => {\n var {\n name\n } = _ref;\n return indices.set(name, i);\n });\n return indices;\n }));\n _defineProperty(this, \"setViewport\", throttle((top, bottom, columns) => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n var {\n viewport\n } = this;\n if (viewport != null && viewport.top === top && viewport.bottom === bottom && viewport.columns === columns) {\n log.debug2('Ignoring duplicate viewport', viewport);\n return;\n }\n this.viewport = {\n top,\n bottom,\n columns\n };\n log.debug2('setViewport', this.viewport);\n this.applyViewport();\n }, SET_VIEWPORT_THROTTLE));\n _defineProperty(this, \"applyViewport\", throttle(() => {\n if (!this.viewport) {\n return;\n }\n log.debug2('applyViewport', this.viewport);\n var {\n top,\n bottom,\n columns\n } = this.viewport;\n var [viewportTop, viewportBottom] = this.getCachedViewportRowRange(top, bottom);\n this.applyBufferedViewport(viewportTop, viewportBottom, columns);\n }, APPLY_VIEWPORT_THROTTLE, {\n leading: false\n }));\n _defineProperty(this, \"getCachedFormattedString\", memoizeClear((formatter, value, columnType, columnName, formatOverride) => formatter.getFormattedString(value, columnType, columnName, formatOverride), {\n max: 10000\n }));\n _defineProperty(this, \"getCachedCustomColumnFormatFlag\", memoizeClear(FormatterUtils.isCustomColumnFormatDefined, {\n max: 10000\n }));\n _defineProperty(this, \"getCachedViewportRowRange\", memoize((top, bottom) => {\n var viewHeight = bottom - top;\n var viewportTop = Math.max(0, top - viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES);\n var viewportBottom = bottom + viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n }));\n _defineProperty(this, \"getCachedPendingErrors\", memoize((pendingDataMap, columns, keyColumnCount) => {\n var map = new Map();\n pendingDataMap.forEach((row, rowIndex) => {\n var {\n data: rowData\n } = row;\n for (var i = 0; i < keyColumnCount; i += 1) {\n if (!rowData.has(i)) {\n var _map$get;\n if (!map.has(rowIndex)) {\n map.set(rowIndex, []);\n }\n (_map$get = map.get(rowIndex)) === null || _map$get === void 0 ? void 0 : _map$get.push(new MissingKeyError(rowIndex, columns[i].name));\n }\n }\n });\n return map;\n }));\n this.handleTableDisconnect = this.handleTableDisconnect.bind(this);\n this.handleTableReconnect = this.handleTableReconnect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTotalsUpdate = this.handleTotalsUpdate.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);\n this.dh = dh;\n this.irisFormatter = _formatter;\n this.irisGridUtils = new IrisGridUtils(dh);\n this.inputTable = inputTable;\n this.subscription = null;\n this.table = table;\n this.tableUtils = new TableUtils(dh);\n this.viewport = null;\n this.viewportData = null;\n this.formattedStringData = [];\n this.pendingStringData = [];\n this.isSaveInProgress = false;\n this.totalsTable = null;\n this.totalsTablePromise = null;\n this.totals = null;\n this.totalsDataMap = null;\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n this.pendingNewDataMap = new Map();\n this.pendingNewRowCount = 0;\n this.columnHeaderGroups = IrisGridUtils.parseColumnHeaderGroups(this, (_this$layoutHints$col = (_this$layoutHints = this.layoutHints) === null || _this$layoutHints === void 0 ? void 0 : _this$layoutHints.columnGroups) !== null && _this$layoutHints$col !== void 0 ? _this$layoutHints$col : []).groups;\n }\n close() {\n this.table.close();\n if (this.totalsTable !== null) {\n this.totalsTable.close();\n }\n if (this.totalsTablePromise !== null) {\n this.totalsTablePromise.cancel();\n }\n }\n startListening() {\n super.startListening();\n var {\n dh\n } = this;\n this.table.addEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.addEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n this.applyViewport();\n }\n stopListening() {\n super.stopListening();\n var {\n dh\n } = this;\n this.table.removeEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.removeEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.removeEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.removeEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.closeSubscription();\n }\n addTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.addEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n\n // Totals table only has one row of data\n totalsTable.setViewport(0, 0);\n }\n removeTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n }\n handleTableDisconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.DISCONNECT));\n }\n handleTableReconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n handleTableUpdate(event) {\n this.copyViewportData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleTotalsUpdate(event) {\n this.copyTotalsData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleRequestFailed(event) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event));\n }\n handleCustomColumnsChanged() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns\n }));\n }\n get rowCount() {\n var _this$totals$operatio, _this$totals, _this$totals$operatio2;\n return (\n // Table size can be negative if the table isn't ready yet\n Math.max(this.table.size, 0) + this.pendingNewRowCount + ((_this$totals$operatio = (_this$totals = this.totals) === null || _this$totals === void 0 ? void 0 : (_this$totals$operatio2 = _this$totals.operationOrder) === null || _this$totals$operatio2 === void 0 ? void 0 : _this$totals$operatio2.length) !== null && _this$totals$operatio !== void 0 ? _this$totals$operatio : 0)\n );\n }\n get pendingDataErrors() {\n var _this$inputTable$keyC, _this$inputTable;\n return this.getCachedPendingErrors(this.pendingNewDataMap, this.columns, (_this$inputTable$keyC = (_this$inputTable = this.inputTable) === null || _this$inputTable === void 0 ? void 0 : _this$inputTable.keyColumns.length) !== null && _this$inputTable$keyC !== void 0 ? _this$inputTable$keyC : 0);\n }\n get pendingDataMap() {\n return this.pendingNewDataMap;\n }\n set pendingDataMap(map) {\n if (map === this.pendingNewDataMap) {\n return;\n }\n map.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(\"Invalid rowIndex \".concat(rowIndex));\n }\n var {\n data\n } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(\"Invalid columnIndex \".concat(columnIndex));\n }\n });\n });\n this.pendingNewDataMap = map;\n this.pendingNewRowCount = Math.max(this.pendingNewRowCount, this.maxPendingDataRow);\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n }\n get pendingRowCount() {\n return this.pendingNewRowCount;\n }\n set pendingRowCount(count) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n get maxPendingDataRow() {\n return this.pendingNewDataMap.size > 0 ? Math.max(...this.pendingNewDataMap.keys()) + 1 : 0;\n }\n get columnCount() {\n return this.columns.length;\n }\n get floatingBottomRowCount() {\n var _this$totals$operatio3, _this$totals2, _this$totals2$operati;\n return this.totals != null && this.totals.showOnTop ? 0 : (_this$totals$operatio3 = (_this$totals2 = this.totals) === null || _this$totals2 === void 0 ? void 0 : (_this$totals2$operati = _this$totals2.operationOrder) === null || _this$totals2$operati === void 0 ? void 0 : _this$totals2$operati.length) !== null && _this$totals$operatio3 !== void 0 ? _this$totals$operatio3 : 0;\n }\n get floatingTopRowCount() {\n var _this$totals$operatio4, _this$totals3, _this$totals3$operati;\n return this.totals != null && this.totals.showOnTop ? (_this$totals$operatio4 = (_this$totals3 = this.totals) === null || _this$totals3 === void 0 ? void 0 : (_this$totals3$operati = _this$totals3.operationOrder) === null || _this$totals3$operati === void 0 ? void 0 : _this$totals3$operati.length) !== null && _this$totals$operatio4 !== void 0 ? _this$totals$operatio4 : 0 : 0;\n }\n get isChartBuilderAvailable() {\n return true;\n }\n get isTotalsAvailable() {\n return this.table.getTotalsTable != null;\n }\n get isEditable() {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n cacheFormattedValue(x, y, text) {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n cachePendingValue(x, y, text) {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n clearPendingValue(x, y) {\n var column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n textValueForCell(x, y) {\n var _this$pendingStringDa, _this$formattedString;\n // First check if there's any pending values we should read from\n if (((_this$pendingStringDa = this.pendingStringData[x]) === null || _this$pendingStringDa === void 0 ? void 0 : _this$pendingStringDa[y]) !== undefined) {\n return this.pendingStringData[x][y];\n }\n\n // Use a separate cache from memoization just for the strings that are currently displayed\n if (((_this$formattedString = this.formattedStringData[x]) === null || _this$formattedString === void 0 ? void 0 : _this$formattedString[y]) === undefined) {\n var _value = this.valueForCell(x, y);\n if (_value === null) {\n return null;\n }\n if (_value === undefined) {\n return undefined;\n }\n var _column = this.sourceColumn(x, y);\n var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(this.formatter, _column.name, _column.type);\n var formatOverride;\n if (!hasCustomColumnFormat) {\n var formatForCell = this.formatForCell(x, y);\n if ((formatForCell === null || formatForCell === void 0 ? void 0 : formatForCell.formatString) != null) {\n formatOverride = formatForCell;\n }\n }\n var text = this.displayString(_value, _column.type, _column.name, formatOverride);\n this.cacheFormattedValue(x, y, text);\n }\n return this.formattedStringData[x][y];\n }\n textForCell(x, y) {\n var _this$columns$x;\n var text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null && this.pendingDataMap.has(pendingRow)) {\n // Asterisk to show a value is required for a key column on a row that has some data entered\n return '*';\n }\n }\n if (TableUtils.isTextType((_this$columns$x = this.columns[x]) === null || _this$columns$x === void 0 ? void 0 : _this$columns$x.type)) {\n if (text === null) {\n return this.formatter.showNullStrings ? 'null' : '';\n }\n if (text === '') {\n return this.formatter.showEmptyStrings ? 'empty' : '';\n }\n }\n return text !== null && text !== void 0 ? text : '';\n }\n truncationCharForCell(x) {\n var column = this.columns[x];\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type) && this.formatter.truncateNumbersWithPound) {\n return '#';\n }\n return undefined;\n }\n colorForCell(x, y, theme) {\n var data = this.dataForCell(x, y);\n if (data) {\n var {\n format,\n value: _value2\n } = data;\n if (_value2 == null || _value2 === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if (format && format.color) {\n return format.color;\n }\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n assertNotNull(theme.pendingTextColor);\n return theme.pendingTextColor;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (_value2 != null) {\n var _column2 = this.sourceColumn(x, y);\n if (TableUtils.isDateType(_column2.type) || _column2.name === 'Date') {\n assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(_column2.type)) {\n if (_value2 > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if (_value2 < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n assertNotNull(theme.errorTextColor);\n return theme.errorTextColor;\n }\n return theme.textColor;\n }\n backgroundColorForCell(x, y, theme) {\n var _this$formatForCell$b, _this$formatForCell;\n return (_this$formatForCell$b = (_this$formatForCell = this.formatForCell(x, y)) === null || _this$formatForCell === void 0 ? void 0 : _this$formatForCell.backgroundColor) !== null && _this$formatForCell$b !== void 0 ? _this$formatForCell$b : null;\n }\n textAlignForCell(x) {\n var column = this.columns[x];\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type)) {\n return 'right';\n }\n if (TableUtils.isDateType(type) || column.name === 'Date') {\n return 'center';\n }\n return 'left';\n }\n textForColumnHeader(x) {\n var _header$displayName;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var header = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(header)) {\n return header.isNew ? '' : header.name;\n }\n return (_header$displayName = header === null || header === void 0 ? void 0 : header.displayName) !== null && _header$displayName !== void 0 ? _header$displayName : header === null || header === void 0 ? void 0 : header.name;\n }\n colorForColumnHeader(x) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var column = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(column)) {\n var _column$color;\n return (_column$color = column.color) !== null && _column$color !== void 0 ? _column$color : null;\n }\n return null;\n }\n getColumnHeaderGroup(modelIndex, depth) {\n var group = this.columnAtDepth(modelIndex, depth);\n if (isColumnHeaderGroup(group)) {\n return group;\n }\n return undefined;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n var _this$columnAtDepth$n, _this$columnAtDepth;\n return this.columnHeaderParentMap.get((_this$columnAtDepth$n = (_this$columnAtDepth = this.columnAtDepth(modelIndex, depth)) === null || _this$columnAtDepth === void 0 ? void 0 : _this$columnAtDepth.name) !== null && _this$columnAtDepth$n !== void 0 ? _this$columnAtDepth$n : '');\n }\n columnAtDepth(x) {\n var _this$columns$x2;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (depth === 0) {\n return this.columns[x];\n }\n var columnName = (_this$columns$x2 = this.columns[x]) === null || _this$columns$x2 === void 0 ? void 0 : _this$columns$x2.name;\n var group = this.columnHeaderParentMap.get(columnName);\n if (!group) {\n return undefined;\n }\n var currentDepth = group.depth;\n while (currentDepth < depth) {\n group = this.columnHeaderParentMap.get(group.name);\n if (!group) {\n return undefined;\n }\n currentDepth = group.depth;\n }\n if (group.depth === depth) {\n return group;\n }\n return undefined;\n }\n textForRowFooter(y) {\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null && this.totals) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get initialMovedColumns() {\n var _this$layoutHints2;\n return this.getMemoizedInitialMovedColumns((_this$layoutHints2 = this.layoutHints) !== null && _this$layoutHints2 !== void 0 ? _this$layoutHints2 : undefined);\n }\n get initialColumnHeaderGroups() {\n var _this$layoutHints3;\n return this.getMemoizedInitialColumnHeaderGroups((_this$layoutHints3 = this.layoutHints) !== null && _this$layoutHints3 !== void 0 ? _this$layoutHints3 : undefined);\n }\n get columnMap() {\n return this.getMemoizedColumnMap(this.table.columns);\n }\n get columnHeaderMaxDepth() {\n var _this$_columnHeaderMa;\n return (_this$_columnHeaderMa = this._columnHeaderMaxDepth) !== null && _this$_columnHeaderMa !== void 0 ? _this$_columnHeaderMa : 1;\n }\n set columnHeaderMaxDepth(depth) {\n this._columnHeaderMaxDepth = depth;\n }\n get columnHeaderGroupMap() {\n return this._columnHeaderGroupMap;\n }\n get columnHeaderGroups() {\n return this._columnHeaderGroups;\n }\n set columnHeaderGroups(groups) {\n if (groups === this._columnHeaderGroups) {\n return;\n }\n var {\n groups: newGroups,\n maxDepth,\n parentMap,\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, groups !== null && groups !== void 0 ? groups : this.initialColumnHeaderGroups);\n this._columnHeaderGroups = newGroups;\n this.columnHeaderMaxDepth = maxDepth;\n this.columnHeaderParentMap = parentMap;\n this._columnHeaderGroupMap = groupMap;\n }\n row(y) {\n var _this$totals$operatio5, _this$totals4, _this$totals4$operati, _this$totals$showOnTo, _this$totals5, _this$viewportData$of, _this$viewportData, _this$viewportData$ro, _this$viewportData2, _this$viewportData2$r;\n var totalsRowCount = (_this$totals$operatio5 = (_this$totals4 = this.totals) === null || _this$totals4 === void 0 ? void 0 : (_this$totals4$operati = _this$totals4.operationOrder) === null || _this$totals4$operati === void 0 ? void 0 : _this$totals4$operati.length) !== null && _this$totals$operatio5 !== void 0 ? _this$totals$operatio5 : 0;\n var showOnTop = (_this$totals$showOnTo = (_this$totals5 = this.totals) === null || _this$totals5 === void 0 ? void 0 : _this$totals5.showOnTop) !== null && _this$totals$showOnTo !== void 0 ? _this$totals$showOnTo : false;\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n var _this$totals6, _this$totalsDataMap$g, _this$totalsDataMap;\n var operation = (_this$totals6 = this.totals) === null || _this$totals6 === void 0 ? void 0 : _this$totals6.operationOrder[totalsRow];\n assertNotNull(operation);\n return (_this$totalsDataMap$g = (_this$totalsDataMap = this.totalsDataMap) === null || _this$totalsDataMap === void 0 ? void 0 : _this$totalsDataMap.get(operation)) !== null && _this$totalsDataMap$g !== void 0 ? _this$totalsDataMap$g : null;\n }\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n var _this$pendingNewDataM;\n return (_this$pendingNewDataM = this.pendingNewDataMap.get(pendingRow)) !== null && _this$pendingNewDataM !== void 0 ? _this$pendingNewDataM : null;\n }\n var offset = (_this$viewportData$of = (_this$viewportData = this.viewportData) === null || _this$viewportData === void 0 ? void 0 : _this$viewportData.offset) !== null && _this$viewportData$of !== void 0 ? _this$viewportData$of : 0;\n var viewportY = (showOnTop ? y - totalsRowCount : y) - offset;\n return (_this$viewportData$ro = (_this$viewportData2 = this.viewportData) === null || _this$viewportData2 === void 0 ? void 0 : (_this$viewportData2$r = _this$viewportData2.rows) === null || _this$viewportData2$r === void 0 ? void 0 : _this$viewportData2$r[viewportY]) !== null && _this$viewportData$ro !== void 0 ? _this$viewportData$ro : null;\n }\n\n /**\n * Retrieve the source column for given coordinates.\n * - Retrieve the totals column if this is a totals row\n * - Retrieve the source column if it's a proxied column\n * - Otherwise return the column at the given index\n * @param column Column index to get the source column from\n * @param row Row index to get the source column from\n */\n sourceColumn(column, row) {\n var totalsRow = this.totalsRow(row);\n if (totalsRow != null) {\n var _this$totals7, _this$totals$defaultO, _this$totals8, _this$totalsTable;\n var operation = (_this$totals7 = this.totals) === null || _this$totals7 === void 0 ? void 0 : _this$totals7.operationOrder[totalsRow];\n var defaultOperation = (_this$totals$defaultO = (_this$totals8 = this.totals) === null || _this$totals8 === void 0 ? void 0 : _this$totals8.defaultOperation) !== null && _this$totals$defaultO !== void 0 ? _this$totals$defaultO : AggregationOperation.SUM;\n var tableColumn = this.columns[column];\n\n // Find the matching totals table column for the operation\n // When there are multiple aggregations, the column name will be the original name of the column with the operation appended afterward\n // When the the operation is the default operation OR there is only one operation, then the totals column name is just the original column name\n var totalsColumn = (_this$totalsTable = this.totalsTable) === null || _this$totalsTable === void 0 ? void 0 : _this$totalsTable.columns.find(col => {\n var _this$totals9;\n return col.name === \"\".concat(tableColumn.name, \"__\").concat(operation) || (operation === defaultOperation || ((_this$totals9 = this.totals) === null || _this$totals9 === void 0 ? void 0 : _this$totals9.operationOrder.length) === 1) && col.name === tableColumn.name;\n });\n if (totalsColumn != null) {\n return totalsColumn;\n }\n // There may be cases were the totals table doesn't have a column, such as when there's a virtual column\n }\n\n return this.columns[column];\n }\n\n /**\n * Translate from the row in the model to a row in the totals table.\n * If the row is not a totals row, return null\n * @param y The row in the model to get the totals row for\n * @returns The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y) {\n var _this$totals$operatio6, _this$totals10, _this$totals10$operat, _this$totals$showOnTo2, _this$totals11;\n var totalsRowCount = (_this$totals$operatio6 = (_this$totals10 = this.totals) === null || _this$totals10 === void 0 ? void 0 : (_this$totals10$operat = _this$totals10.operationOrder) === null || _this$totals10$operat === void 0 ? void 0 : _this$totals10$operat.length) !== null && _this$totals$operatio6 !== void 0 ? _this$totals$operatio6 : 0;\n var showOnTop = (_this$totals$showOnTo2 = (_this$totals11 = this.totals) === null || _this$totals11 === void 0 ? void 0 : _this$totals11.showOnTop) !== null && _this$totals$showOnTo2 !== void 0 ? _this$totals$showOnTo2 : false;\n var totalsRow = showOnTop ? y : y - this.table.size;\n if (totalsRow >= 0 && totalsRow < totalsRowCount) {\n return totalsRow;\n }\n return null;\n }\n\n /**\n * Translate from the row in the model to a pending input row.\n * If the row is not a pending input row, return null\n * @param y The row in the model to get the pending row for\n * @returns The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y) {\n var pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0 && pendingRow < this.pendingNewRowCount) {\n return pendingRow;\n }\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param y The row in the model to check if it's a totals table row\n * @returns True if the row is a totals row, false if not\n */\n isTotalsRow(y) {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param y The row in the model to check if it's a pending new row\n * @returns True if the row is a pending new row, false if not\n */\n isPendingRow(y) {\n return this.pendingRow(y) != null;\n }\n dataForCell(x, y) {\n var _this$row;\n return (_this$row = this.row(y)) === null || _this$row === void 0 ? void 0 : _this$row.data.get(x);\n }\n formatForCell(x, y) {\n var _this$dataForCell;\n return (_this$dataForCell = this.dataForCell(x, y)) === null || _this$dataForCell === void 0 ? void 0 : _this$dataForCell.format;\n }\n valueForCell(x, y) {\n var data = this.dataForCell(x, y);\n\n /* JS API current sets null values as undefined in some instances. This means \n we need to nullish coaelesce so all undefined values from the API return null \n since the data has been fetched. undefined is used to indicate the API has not \n fetched data yet */\n if (data) {\n var _data$value;\n return (_data$value = data.value) !== null && _data$value !== void 0 ? _data$value : null;\n }\n return undefined;\n }\n copyViewportData(data) {\n if (data == null) {\n log.warn('invalid data!');\n return;\n }\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n copyTotalsData(totalsData) {\n var _this$totals$defaultO2,\n _this$totals12,\n _this$totals13,\n _this = this;\n if (totalsData == null) {\n log.warn('invalid data!');\n return;\n }\n var {\n columns,\n rows\n } = totalsData;\n if (rows.length !== 1) {\n log.error('Unexpected number of rows received for totals table, ignoring update');\n return;\n }\n var dataMap = new Map();\n var row = rows[0];\n var defaultOperation = (_this$totals$defaultO2 = (_this$totals12 = this.totals) === null || _this$totals12 === void 0 ? void 0 : _this$totals12.defaultOperation) !== null && _this$totals$defaultO2 !== void 0 ? _this$totals$defaultO2 : AggregationOperation.SUM;\n var operationMap = (_this$totals13 = this.totals) === null || _this$totals13 === void 0 ? void 0 : _this$totals13.operationMap;\n var _loop = function _loop() {\n var _operationMap$name$, _operationMap$name;\n var column = columns[c];\n var [name, operation = (_operationMap$name$ = operationMap === null || operationMap === void 0 ? void 0 : (_operationMap$name = operationMap[name]) === null || _operationMap$name === void 0 ? void 0 : _operationMap$name[0]) !== null && _operationMap$name$ !== void 0 ? _operationMap$name$ : defaultOperation] = column.name.split('__');\n if (!dataMap.has(operation)) {\n dataMap.set(operation, {\n data: new Map()\n });\n }\n var {\n data: rowData\n } = dataMap.get(operation);\n var columnIndex = _this.columns.findIndex(col => col.name === name);\n rowData.set(columnIndex, {\n value: row.get(column),\n format: row.getFormat(column)\n });\n };\n for (var c = 0; c < columns.length; c += 1) {\n _loop();\n }\n log.debug2('copyTotalsData', dataMap);\n this.totalsDataMap = dataMap;\n this.formattedStringData = [];\n }\n\n /**\n * Use this as the canonical column index since things like layoutHints could have\n * changed the column order.\n */\n getColumnIndexByName(name) {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param data The data to copy from\n */\n extractViewportData(data) {\n var newData = {\n offset: data.offset,\n rows: []\n };\n var {\n columns\n } = data;\n for (var r = 0; r < data.rows.length; r += 1) {\n var _row = data.rows[r];\n var newRow = this.extractViewportRow(_row, columns);\n newData.rows.push(newRow);\n }\n return newData;\n }\n extractViewportRow(row, columns) {\n var data = new Map();\n for (var c = 0; c < columns.length; c += 1) {\n var _column3 = columns[c];\n var index = this.getColumnIndexByName(_column3.name);\n assertNotNull(index);\n data.set(index, {\n value: row.get(_column3),\n format: row.getFormat(_column3)\n });\n }\n return {\n data\n };\n }\n closeSubscription() {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n }\n this.setViewport.cancel();\n this.applyViewport.cancel();\n }\n get filter() {\n return this.table.filter;\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n get formatter() {\n return this.irisFormatter;\n }\n set formatter(formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED));\n }\n displayString(value, columnType) {\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var formatOverride = arguments.length > 3 ? arguments[3] : undefined;\n return this.getCachedFormattedString(this.formatter, value, columnType, columnName, formatOverride);\n }\n get sort() {\n return this.table.sort;\n }\n set sort(sort) {\n this.closeSubscription();\n this.table.applySort(sort);\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n setTotalsTable(totalsTable) {\n log.debug('setTotalsTable', totalsTable);\n if (this.totalsTable !== null) {\n if (this.listenerCount > 0) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.totalsTable.close();\n }\n this.totalsTable = totalsTable;\n this.totalsDataMap = null;\n if (this.listenerCount > 0 && this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n }\n\n /**\n * Applies the current viewport to the underlying table.\n */\n\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n log.debug2('applyBufferedViewport', viewportTop, viewportBottom, columns);\n if (this.subscription == null) {\n log.debug2('applyBufferedViewport creating new subscription');\n this.subscription = this.table.setViewport(viewportTop, viewportBottom, columns);\n } else {\n log.debug2('applyBufferedViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }\n snapshot(ranges) {\n var _arguments = arguments,\n _this2 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var formatValue = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : value => value;\n var consolidateRanges = _arguments.length > 3 && _arguments[3] !== undefined ? _arguments[3] : true;\n if (_this2.subscription == null) {\n throw new Error('No subscription available');\n }\n var consolidated = consolidateRanges ? GridRange.consolidate(ranges) : ranges;\n if (!IrisGridUtils.isValidSnapshotRanges(consolidated)) {\n throw new Error(\"Invalid snapshot ranges \".concat(ranges));\n }\n\n // Need to separate out the floating ranges as they're from a different source\n var topFloatingRowsSet = new Set();\n var tableRanges = [];\n var bottomFloatingRowsSet = new Set();\n for (var i = 0; i < consolidated.length; i += 1) {\n var range = consolidated[i];\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n // Get the rows that are in the top aggregations section\n for (var r = range.startRow; r <= range.endRow && r < _this2.floatingTopRowCount; r += 1) {\n topFloatingRowsSet.add(r);\n }\n\n // Separate out the range that is part of the actual table (ie. not the floating ranges, not aggregations)\n if (range.endRow >= _this2.floatingTopRowCount && range.startRow <= _this2.floatingTopRowCount + _this2.table.size) {\n tableRanges.push(new GridRange(range.startColumn, Math.min(Math.max(0, range.startRow - _this2.floatingTopRowCount)), range.endColumn, Math.min(Math.max(0, range.endRow - _this2.floatingTopRowCount), _this2.table.size - _this2.floatingTopRowCount)));\n }\n // Get the rows that are in the bottom aggregations section\n for (var _r = Math.max(range.startRow, _this2.floatingTopRowCount + _this2.table.size); _r <= range.endRow && _r < _this2.floatingTopRowCount + _this2.table.size + _this2.floatingBottomRowCount; _r += 1) {\n bottomFloatingRowsSet.add(_r);\n }\n }\n var columns = IrisGridUtils.columnsFromRanges(consolidated, _this2.columns);\n var result = [];\n if (includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var topFloatingRows = [...topFloatingRowsSet].sort();\n var _loop2 = function* _loop2() {\n var row = topFloatingRows[_i];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i = 0; _i < topFloatingRows.length; _i += 1) {\n yield* _loop2();\n }\n if (tableRanges.length > 0) {\n var rangeSet = _this2.irisGridUtils.rangeSetFromRanges(tableRanges);\n var snapshot = yield _this2.subscription.snapshot(rangeSet, columns);\n result.push(...snapshot.rows.map(rowData => columns.map(column => formatValue(rowData.get(column), column))));\n }\n var bottomFloatingRows = [...bottomFloatingRowsSet].sort();\n var _loop3 = function* _loop3() {\n var row = bottomFloatingRows[_i2];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i2 = 0; _i2 < bottomFloatingRows.length; _i2 += 1) {\n yield* _loop3();\n }\n return result;\n })();\n }\n\n /**\n * Get a text snapshot of the provided ranges\n * @param ranges The ranges to get the snapshot for\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue Function for formatting the raw value into a string\n * @returns A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n textSnapshot(ranges) {\n var _arguments2 = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;\n var formatValue = _arguments2.length > 2 && _arguments2[2] !== undefined ? _arguments2[2] : value => \"\".concat(value);\n log.debug2('textSnapshot', ranges, includeHeaders);\n var data = yield _this3.snapshot(ranges, includeHeaders, formatValue, false);\n return data.map(row => row.join('\\t')).join('\\n');\n })();\n }\n valuesTable(columns) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var table = null;\n try {\n table = yield _this4.table.copy();\n table.applyFilter([]);\n table.applySort([]);\n return table.selectDistinct(Array.isArray(columns) ? columns : [columns]);\n } finally {\n if (table != null) {\n table.close();\n }\n }\n })();\n }\n isColumnMovable(modelIndex, depth) {\n if (modelIndex < 0 || modelIndex >= this.columnCount) {\n return false;\n }\n\n // All groups are movable\n if (depth > 0) {\n return true;\n }\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName) || !columnName) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnSortable(modelIndex) {\n var _this$columns$modelIn;\n return (_this$columns$modelIn = this.columns[modelIndex].isSortable) !== null && _this$columns$modelIn !== void 0 ? _this$columns$modelIn : true;\n }\n isKeyColumn(x) {\n var _this$inputTable$keyC2, _this$inputTable2;\n return x < ((_this$inputTable$keyC2 = (_this$inputTable2 = this.inputTable) === null || _this$inputTable2 === void 0 ? void 0 : _this$inputTable2.keyColumns.length) !== null && _this$inputTable$keyC2 !== void 0 ? _this$inputTable$keyC2 : 0);\n }\n isRowMovable() {\n return false;\n }\n isEditableRange(range) {\n // Make sure we have an input table and a valid range\n if (this.inputTable == null || !GridRange.isBounded(range)) {\n return false;\n }\n\n // Check that the edit is in the editable range\n // If an input table has keyed columns, the non-key columns are always editable\n // If an input table does not have key columns, it is append only and existing rows cannot be editable\n // Pending rows are always editable\n var isPendingRange = this.isPendingRow(range.startRow) && this.isPendingRow(range.endRow);\n if (!(isPendingRange || this.inputTable.keyColumns.length !== 0 && range.startColumn >= this.inputTable.keyColumns.length && range.endColumn >= this.inputTable.keyColumns.length)) {\n return false;\n }\n\n // Editing the aggregations/totals which are floating above/below is not allowed\n if (range.startRow < this.floatingTopRowCount || range.startRow >= this.floatingTopRowCount + this.table.size + this.pendingRowCount || range.endRow >= this.floatingTopRowCount + this.table.size + this.pendingRowCount) {\n return false;\n }\n return true;\n }\n isDeletableRange(range) {\n return this.inputTable != null && range.startRow != null && range.endRow != null && range.startRow >= this.floatingTopRowCount && range.startRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount && range.endRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount;\n }\n isEditableRanges(ranges) {\n return ranges.every(range => this.isEditableRange(range));\n }\n isDeletableRanges(ranges) {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns A range corresponding to the underlying table\n */\n getTableAreaRange() {\n return new GridRange(null, this.floatingTopRowCount, null, this.floatingTopRowCount + this.table.size - 1);\n }\n\n /**\n * @returns A range corresponding to the pending new rows\n */\n getPendingAreaRange() {\n return new GridRange(null, this.floatingTopRowCount + this.table.size, null, this.floatingTopRowCount + this.table.size + this.pendingNewRowCount - 1);\n }\n\n /**\n * Set value in an editable table\n * @param x The column to set\n * @param y The row to set\n * @param value The value to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForCell(x, y, text) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n return _this5.setValueForRanges([new GridRange(x, y, x, y)], text);\n })();\n }\n\n /**\n * Set value in an editable table\n * @param ranges The ranges to set\n * @param value The values to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForRanges(ranges, text) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (!_this6.isEditableRanges(ranges)) {\n throw new Error(\"Uneditable ranges \".concat(ranges));\n }\n try {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n var columnSet = new Set();\n\n // Formatted text for each column\n // Since there could be different formatting for each column, but the value will be the same across rows\n var formattedText = [];\n GridRange.forEachCell(ranges, (x, y) => {\n var column = _this6.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n var _value3 = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n formattedText[x] = _value3 != null ? _this6.displayString(_value3, column.type, column.name) : null;\n }\n _this6.cachePendingValue(x, y, formattedText[x]);\n });\n\n // Take care of updates to the pending new area first, as they can be updated synchronously\n var pendingAreaRange = _this6.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this6.floatingTopRowCount + _this6.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_this6.pendingNewDataMap);\n GridRange.forEachCell(pendingRanges, (columnIndex, rowIndex) => {\n if (!newDataMap.has(rowIndex)) {\n newDataMap.set(rowIndex, {\n data: new Map()\n });\n }\n var column = _this6.columns[columnIndex];\n var row = newDataMap.get(rowIndex);\n assertNotNull(row);\n var {\n data: rowData\n } = row;\n var newRowData = new Map(rowData);\n var value = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n if (value != null) {\n newRowData.set(columnIndex, {\n value\n });\n } else {\n newRowData.delete(columnIndex);\n }\n if (newRowData.size > 0) {\n newDataMap.set(rowIndex, _objectSpread(_objectSpread({}, row), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(rowIndex);\n }\n });\n _this6.pendingDataMap = newDataMap;\n }\n _this6.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n var tableAreaRange = _this6.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this6$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this6.snapshot(tableRanges.map(range => {\n var _range$startRow, _range$endRow;\n return new GridRange(null, (_range$startRow = range === null || range === void 0 ? void 0 : range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : null, null, (_range$endRow = range === null || range === void 0 ? void 0 : range.endRow) !== null && _range$endRow !== void 0 ? _range$endRow : null);\n }));\n var newRows = data.map(row => {\n var newRow = {};\n for (var c = 0; c < _this6.columns.length; c += 1) {\n newRow[_this6.columns[c].name] = row[c];\n }\n columnSet.forEach(column => {\n newRow[column.name] = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n });\n return newRow;\n });\n var result = yield (_this6$inputTable = _this6.inputTable) === null || _this6$inputTable === void 0 ? void 0 : _this6$inputTable.addRows(newRows);\n log.debug('setValueForRanges(', ranges, ',', text, ') set tableRanges', tableRanges, 'result', result);\n }\n\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n GridRange.forEachCell(ranges, (x, y) => {\n var cellText = formattedText[x];\n assertNotNull(cellText);\n _this6.cacheFormattedValue(x, y, cellText);\n });\n } catch (err) {\n log.error('Unable to set ranges', ranges, text, err);\n } finally {\n GridRange.forEachCell(ranges, (x, y) => {\n _this6.clearPendingValue(x, y);\n });\n }\n })();\n }\n setValues() {\n var _arguments3 = arguments,\n _this7 = this;\n return _asyncToGenerator(function* () {\n var edits = _arguments3.length > 0 && _arguments3[0] !== undefined ? _arguments3[0] : [];\n log.debug('setValues(', edits, ')');\n if (!edits.every(edit => {\n var _edit$column, _edit$row;\n return _this7.isEditableRange(GridRange.makeCell((_edit$column = edit.column) !== null && _edit$column !== void 0 ? _edit$column : edit.x, (_edit$row = edit.row) !== null && _edit$row !== void 0 ? _edit$row : edit.y));\n })) {\n throw new Error(\"Uneditable ranges \".concat(edits));\n }\n try {\n var newDataMap = new Map(_this7.pendingNewDataMap);\n\n // Cache the display values\n edits.forEach(edit => {\n var _edit$column2, _edit$row2;\n var {\n text\n } = edit;\n var x = (_edit$column2 = edit.column) !== null && _edit$column2 !== void 0 ? _edit$column2 : edit.x;\n var y = (_edit$row2 = edit.row) !== null && _edit$row2 !== void 0 ? _edit$row2 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cachePendingValue(x, y, formattedText);\n\n // Take care of updates to the pending new area as well, as that can be updated synchronously\n var pendingRow = _this7.pendingRow(y);\n if (pendingRow != null) {\n if (!newDataMap.has(pendingRow)) {\n newDataMap.set(pendingRow, {\n data: new Map()\n });\n }\n var _row2 = newDataMap.get(pendingRow);\n assertNotNull(_row2);\n var {\n data: rowData\n } = _row2;\n var newRowData = new Map(rowData);\n if (value != null) {\n newRowData.set(x, {\n value\n });\n } else {\n newRowData.delete(x);\n }\n if (newRowData.size > 0) {\n newDataMap.set(pendingRow, _objectSpread(_objectSpread({}, _row2), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(pendingRow);\n }\n }\n });\n _this7.pendingDataMap = newDataMap;\n\n // Send an update right after setting the pending map so the values are displayed immediately\n _this7.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n\n // Need to group by row...\n var rowEditMap = edits.reduce((rowMap, edit) => {\n var _edit$row3, _rowMap$get;\n var y = (_edit$row3 = edit.row) !== null && _edit$row3 !== void 0 ? _edit$row3 : edit.y;\n if (!rowMap.has(y)) {\n rowMap.set(y, []);\n }\n (_rowMap$get = rowMap.get(y)) === null || _rowMap$get === void 0 ? void 0 : _rowMap$get.push(edit);\n return rowMap;\n }, new Map());\n var ranges = GridRange.consolidate(edits.map(edit => {\n var _edit$column3, _edit$row4;\n return GridRange.makeCell((_edit$column3 = edit.column) !== null && _edit$column3 !== void 0 ? _edit$column3 : edit.x, (_edit$row4 = edit.row) !== null && _edit$row4 !== void 0 ? _edit$row4 : edit.y);\n }));\n var tableAreaRange = _this7.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this7$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this7.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(null, range.startRow, null, range.endRow);\n }));\n var newRows = data.map((row, dataIndex) => {\n var rowIndex = null;\n var r = dataIndex;\n for (var i = 0; i < tableRanges.length; i += 1) {\n var range = tableRanges[i];\n assertNotNull(range);\n var rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n assertNotNull(range.startRow);\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n var newRow = {};\n for (var c = 0; c < _this7.columns.length; c += 1) {\n newRow[_this7.columns[c].name] = row[c];\n }\n assertNotNull(rowIndex);\n var rowEdits = rowEditMap.get(rowIndex);\n if (rowEdits != null) {\n rowEdits.forEach(edit => {\n var _edit$column4;\n var column = _this7.columns[(_edit$column4 = edit.column) !== null && _edit$column4 !== void 0 ? _edit$column4 : edit.x];\n newRow[column.name] = _this7.tableUtils.makeValue(column.type, edit.text, _this7.formatter.timeZone);\n });\n }\n return newRow;\n });\n log.info('setValues setting tableRanges', tableRanges);\n var result = yield (_this7$inputTable = _this7.inputTable) === null || _this7$inputTable === void 0 ? void 0 : _this7$inputTable.addRows(newRows);\n log.info('setValues set tableRanges', tableRanges, 'SUCCESS', result);\n }\n\n // We've sent the changes to the server, but have not yet got an update with those changes committed\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n edits.forEach(edit => {\n var _edit$column5, _edit$row5;\n var {\n text\n } = edit;\n var x = (_edit$column5 = edit.column) !== null && _edit$column5 !== void 0 ? _edit$column5 : edit.x;\n var y = (_edit$row5 = edit.row) !== null && _edit$row5 !== void 0 ? _edit$row5 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cacheFormattedValue(x, y, formattedText);\n });\n } finally {\n edits.forEach(edit => {\n _this7.clearPendingValue(edit.column, edit.row);\n });\n }\n })();\n }\n commitPending() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (_this8.pendingNewDataMap.size <= 0) {\n throw new Error('No pending changes to commit');\n }\n try {\n var _this8$inputTable, _this8$viewport$botto, _this8$viewport;\n _this8.isSaveInProgress = true;\n var newRows = [];\n _this8.pendingNewDataMap.forEach(row => {\n var newRow = {};\n row.data.forEach((_ref2, columnIndex) => {\n var {\n value\n } = _ref2;\n var column = _this8.columns[columnIndex];\n newRow[column.name] = value;\n });\n newRows.push(newRow);\n });\n var result = yield (_this8$inputTable = _this8.inputTable) === null || _this8$inputTable === void 0 ? void 0 : _this8$inputTable.addRows(newRows);\n log.debug('commitPending()', _this8.pendingNewDataMap, 'result', result);\n _this8.pendingNewDataMap = new Map();\n _this8.pendingNewRowCount = Math.max(0, ((_this8$viewport$botto = (_this8$viewport = _this8.viewport) === null || _this8$viewport === void 0 ? void 0 : _this8$viewport.bottom) !== null && _this8$viewport$botto !== void 0 ? _this8$viewport$botto : 0) - _this8.table.size);\n _this8.formattedStringData = [];\n _this8.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n } finally {\n _this8.isSaveInProgress = false;\n }\n })();\n }\n editValueForCell(x, y) {\n return this.textValueForCell(x, y);\n }\n delete(ranges) {\n return _asyncToGenerator(function* () {\n throw new Error('Delete not implemented');\n })();\n }\n isValidForCell(x, y, value) {\n try {\n var _column4 = this.columns[x];\n this.tableUtils.makeValue(_column4.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n_defineProperty(IrisGridTableModelTemplate, \"ROW_BUFFER_PAGES\", 1);\nexport default IrisGridTableModelTemplate;\n//# sourceMappingURL=IrisGridTableModelTemplate.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nvar log = Log.module('IrisGridTableModel');\n\n/**\n * Model for a grid showing an iris data table\n */\n\nclass IrisGridTableModel extends IrisGridTableModelTemplate {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh, table, formatter, inputTable);\n _defineProperty(this, \"userFrozenColumns\", void 0);\n _defineProperty(this, \"customColumnList\", void 0);\n _defineProperty(this, \"formatColumnList\", void 0);\n _defineProperty(this, \"initialFilters\", []);\n _defineProperty(this, \"getMemoizedFrontColumns\", memoize(layoutHintsFrontColumns => layoutHintsFrontColumns !== null && layoutHintsFrontColumns !== void 0 ? layoutHintsFrontColumns : []));\n _defineProperty(this, \"getMemoizedBackColumns\", memoize(layoutHintsBackColumns => layoutHintsBackColumns !== null && layoutHintsBackColumns !== void 0 ? layoutHintsBackColumns : []));\n _defineProperty(this, \"getMemoizedFrozenColumns\", memoize((layoutHintsFrozenColumns, userFrozenColumns) => {\n var _ref;\n return (_ref = userFrozenColumns !== null && userFrozenColumns !== void 0 ? userFrozenColumns : layoutHintsFrozenColumns) !== null && _ref !== void 0 ? _ref : [];\n }));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize(columns => new Set(columns.map((_, index) => index))));\n _defineProperty(this, \"getCachedPartitionColumns\", memoize(columns => columns.filter(column => column.isPartitionColumn)));\n this.customColumnList = [];\n this.formatColumnList = [];\n this.initialFilters = table.filter;\n }\n get isExportAvailable() {\n return this.table.freeze != null;\n }\n get isColumnStatisticsAvailable() {\n return this.table.getColumnStatistics != null;\n }\n get isValuesTableAvailable() {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n get isRollupAvailable() {\n return this.table.rollup != null;\n }\n get isSelectDistinctAvailable() {\n return this.table.selectDistinct != null;\n }\n get isCustomColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n get isFormatColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n get frontColumns() {\n var _this$layoutHints;\n return this.getMemoizedFrontColumns((_this$layoutHints = this.layoutHints) === null || _this$layoutHints === void 0 ? void 0 : _this$layoutHints.frontColumns);\n }\n get backColumns() {\n var _this$layoutHints2;\n return this.getMemoizedBackColumns((_this$layoutHints2 = this.layoutHints) === null || _this$layoutHints2 === void 0 ? void 0 : _this$layoutHints2.backColumns);\n }\n get frozenColumns() {\n var _this$layoutHints3;\n return this.getMemoizedFrozenColumns((_this$layoutHints3 = this.layoutHints) === null || _this$layoutHints3 === void 0 ? void 0 : _this$layoutHints3.frozenColumns, this.userFrozenColumns);\n }\n get layoutHints() {\n return this.table.layoutHints;\n }\n get floatingLeftColumnCount() {\n return this.frozenColumns.length;\n }\n get description() {\n return this.table.description;\n }\n get customColumns() {\n return this.customColumnList;\n }\n set customColumns(customColumns) {\n log.debug2('set customColumns', customColumns, this.customColumnList, customColumns === this.customColumnList);\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n get formatColumns() {\n return this.formatColumnList;\n }\n set formatColumns(formatColumns) {\n log.debug2('set formatColumns', formatColumns, this.formatColumnList, formatColumns === this.formatColumnList);\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n updateFrozenColumns(columns) {\n this.userFrozenColumns = columns;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: this.table\n }));\n }\n get partitionColumns() {\n return this.getCachedPartitionColumns(this.columns);\n }\n partitionKeysTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.valuesTable(_this.partitionColumns);\n })();\n }\n partitionMergedTable() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var t = yield _this2.table.copy();\n t.applyFilter([]);\n return t;\n })();\n }\n partitionTable(partitions) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n log.debug('getting partition table for partitions', partitions);\n var partitionFilters = [];\n for (var i = 0; i < _this3.partitionColumns.length; i += 1) {\n var partition = partitions[i];\n var partitionColumn = _this3.partitionColumns[i];\n var partitionFilter = _this3.tableUtils.makeFilterRawValue(partitionColumn.type, partition);\n partitionFilters.push(partitionColumn.filter().eq(partitionFilter));\n }\n var t = yield _this3.table.copy();\n t.applyFilter([..._this3.initialFilters, ...partitionFilters]);\n return t;\n })();\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter([...this.initialFilters, ...filter]);\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n get isFilterRequired() {\n return this.table.isUncoalesced;\n }\n get isPartitionRequired() {\n return this.table.isUncoalesced && this.isValuesTableAvailable && this.partitionColumns.length > 0;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n export() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n return _this4.table.freeze();\n })();\n }\n columnStatistics(column) {\n return this.table.getColumnStatistics(column);\n }\n isColumnMovable(modelIndex) {\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName)) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnFrozen(modelIndex) {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\n }\n delete(ranges) {\n var _superprop_getPendingDataMap = () => super.pendingDataMap,\n _superprop_setPendingDataMap = _value => super.pendingDataMap = _value,\n _this5 = this;\n return _asyncToGenerator(function* () {\n var _this5$inputTable;\n if (!_this5.isDeletableRanges(ranges)) {\n throw new Error(\"Undeletable ranges \".concat(ranges));\n }\n assertNotNull(_this5.inputTable);\n var {\n keyColumns\n } = _this5.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n var pendingAreaRange = _this5.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this5.floatingTopRowCount + _this5.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_superprop_getPendingDataMap());\n for (var i = 0; i < pendingRanges.length; i += 1) {\n var pendingRange = pendingRanges[i];\n assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\n for (var r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n _superprop_setPendingDataMap(newDataMap);\n _this5.formattedStringData = [];\n _this5.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n _this5.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n var tableAreaRange = _this5.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length <= 0) {\n return;\n }\n var [data, deleteTable] = yield Promise.all([\n // Need to get the key values of each row\n _this5.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n // Need to map each key column to it's range so we can pass that into the snapshot function\n return keyColumns.map(keyColumn => {\n var keyIndex = _this5.getColumnIndexByName(keyColumn.name);\n if (keyIndex == null) {\n throw new Error(\"Key column \".concat(keyColumn.name, \" not found\"));\n }\n return new GridRange(keyIndex, range.startRow, keyIndex, range.endRow);\n });\n }).flat()), _this5.table.copy()]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n var filters = data.map(row => {\n var columnFilters = [];\n for (var c = 0; c < keyColumns.length; c += 1) {\n var column = keyColumns[c];\n var value = row[c];\n var filterValue = _this5.tableUtils.makeFilterRawValue(column.type, value);\n var _filter = column.filter().eq(filterValue);\n columnFilters.push(_filter);\n }\n return columnFilters.reduce((agg, curr) => {\n var _agg$and;\n return (_agg$and = agg === null || agg === void 0 ? void 0 : agg.and(curr)) !== null && _agg$and !== void 0 ? _agg$and : curr;\n });\n });\n var filter = filters.reduce((agg, curr) => {\n var _agg$or;\n return (_agg$or = agg === null || agg === void 0 ? void 0 : agg.or(curr)) !== null && _agg$or !== void 0 ? _agg$or : curr;\n });\n deleteTable.applyFilter([filter]);\n yield (_this5$inputTable = _this5.inputTable) === null || _this5$inputTable === void 0 ? void 0 : _this5$inputTable.deleteTable(deleteTable);\n deleteTable.close();\n })();\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n return _this6.table.seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards);\n })();\n }\n get isSeekRowAvailable() {\n return this.table.seekRow != null;\n }\n}\nexport default IrisGridTableModel;\n//# sourceMappingURL=IrisGridTableModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nclass EmptyIrisGridModel extends IrisGridModel {\n constructor(dh) {\n var formatter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Formatter(dh);\n super(dh);\n _defineProperty(this, \"modelFormatter\", void 0);\n this.modelFormatter = formatter;\n }\n get rowCount() {\n return 0;\n }\n get columnCount() {\n return 0;\n }\n textForCell(column, row) {\n return '';\n }\n textForColumnHeader(column, depth) {\n return undefined;\n }\n get columns() {\n return EMPTY_ARRAY;\n }\n getColumnIndexByName(name) {\n return undefined;\n }\n get initialMovedColumns() {\n return EMPTY_ARRAY;\n }\n get initialMovedRows() {\n return EMPTY_ARRAY;\n }\n get initialColumnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n get groupedColumns() {\n return EMPTY_ARRAY;\n }\n formatForCell(column, row) {\n return undefined;\n }\n valueForCell(column, row) {\n return undefined;\n }\n get filter() {\n return EMPTY_ARRAY;\n }\n set filter(filter) {\n // No-op\n }\n get partition() {\n return EMPTY_ARRAY;\n }\n set partition(partition) {\n // No-op\n }\n get partitionColumns() {\n return EMPTY_ARRAY;\n }\n get formatter() {\n return this.modelFormatter;\n }\n set formatter(formatter) {\n this.modelFormatter = formatter;\n }\n displayString(value, columnType, columnName) {\n return '';\n }\n get sort() {\n return EMPTY_ARRAY;\n }\n set sort(sort) {\n // No-op\n }\n get customColumns() {\n return EMPTY_ARRAY;\n }\n set customColumns(customColumns) {\n // No-op\n }\n get formatColumns() {\n return EMPTY_ARRAY;\n }\n updateFrozenColumns(columns) {\n // Do nothing\n }\n get rollupConfig() {\n return null;\n }\n set rollupConfig(rollupConfig) {\n // No-op\n }\n get totalsConfig() {\n return null;\n }\n set totalsConfig(totalsConfig) {\n // No-op\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n return EMPTY_ARRAY;\n }\n set selectDistinctColumns(selectDistinctColumns) {\n // No-op\n }\n get pendingDataMap() {\n return EMPTY_MAP;\n }\n set pendingDataMap(map) {\n // No-op\n }\n get pendingRowCount() {\n return 0;\n }\n set pendingRowCount(count) {\n // No-op\n }\n get pendingDataErrors() {\n return EMPTY_MAP;\n }\n commitPending() {\n return Promise.resolve();\n }\n setViewport(top, bottom, columns) {\n // No-op\n }\n snapshot(ranges) {\n return Promise.resolve([]);\n }\n textSnapshot(ranges, includeHeaders, formatValue) {\n return Promise.resolve('');\n }\n valuesTable(columns) {\n throw new Error('Method not implemented.');\n }\n delete(ranges) {\n return Promise.resolve();\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n return Promise.resolve(0);\n }\n get columnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n set columnHeaderGroups(groups) {\n // No-op\n }\n get columnHeaderGroupMap() {\n return EMPTY_MAP;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n return undefined;\n }\n}\nexport default EmptyIrisGridModel;\n//# sourceMappingURL=EmptyIrisGridModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport EmptyIrisGridModel from \"./EmptyIrisGridModel.js\";\nimport MissingPartitionError, { isMissingPartitionError } from \"./MissingPartitionError.js\";\nclass IrisGridPartitionedTableModel extends EmptyIrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Partitioned table to be used in the model\n * @param formatter The formatter to use when getting formats\n */\n constructor(dh, partitionedTable) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n super(dh, formatter);\n _defineProperty(this, \"partitionedTable\", void 0);\n this.partitionedTable = partitionedTable;\n }\n get isPartitionRequired() {\n return true;\n }\n get isReversible() {\n return false;\n }\n displayString(value, columnType, columnName) {\n return '';\n }\n close() {\n this.partitionedTable.close();\n }\n get columns() {\n return this.partitionedTable.columns;\n }\n get partitionColumns() {\n return this.partitionedTable.keyColumns;\n }\n partitionKeysTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.partitionedTable.getKeyTable();\n })();\n }\n partitionMergedTable() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.partitionedTable.getMergedTable();\n })();\n }\n partitionTable(partitions) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n try {\n var table = yield _this3.partitionedTable.getTable(partitions);\n if (table == null) {\n // TODO: Will be unnecessary with https://github.com/deephaven/deephaven-core/pull/5050\n throw new MissingPartitionError('Partition not found');\n }\n return table;\n } catch (e) {\n if (!isMissingPartitionError(e)) {\n throw new MissingPartitionError('Unable to retrieve partition');\n } else {\n throw e;\n }\n }\n })();\n }\n}\nexport default IrisGridPartitionedTableModel;\n//# sourceMappingURL=IrisGridPartitionedTableModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull } from '@deephaven/utils';\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nvar log = Log.module('IrisGridTreeTableModel');\nclass IrisGridTreeTableModel extends IrisGridTableModelTemplate {\n /** We keep a virtual column at the front that tracks the \"group\" that is expanded */\n\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh, table, formatter, inputTable);\n _defineProperty(this, \"virtualColumns\", void 0);\n _defineProperty(this, \"getCachedColumns\", memoize((virtualColumns, tableColumns) => [...virtualColumns, ...tableColumns]));\n _defineProperty(this, \"getCachedGroupColumns\", memoize((virtualColumns, tableGroupedColumns) => [...virtualColumns, ...tableGroupedColumns]));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize((columns, groupedColumns, virtualColumns) => new Set(((groupedColumns === null || groupedColumns === void 0 ? void 0 : groupedColumns.length) > 0 ? groupedColumns : columns).filter(c => !virtualColumns.includes(c)).map(c1 => columns.findIndex(c2 => c1.name === c2.name)))));\n _defineProperty(this, \"getCachedGroupedColumnSet\", memoize(groupedColumns => new Set(groupedColumns.map(c1 => this.columns.findIndex(c2 => c1.name === c2.name)))));\n this.virtualColumns = [{\n name: '__DH_UI_GROUP__',\n displayName: 'Group',\n type: TableUtils.dataType.STRING,\n constituentType: TableUtils.dataType.STRING,\n isPartitionColumn: false,\n isSortable: false,\n isProxy: true,\n description: 'Key column',\n filter: () => {\n throw new Error('Filter not implemented for virtual column');\n },\n sort: () => {\n throw new Error('Sort not implemented virtual column');\n },\n formatColor: () => {\n throw new Error('Color not implemented for virtual column');\n },\n formatRowColor: () => {\n throw new Error('Color not implemented for virtual column');\n }\n }];\n }\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n var viewportColumns = [\n // Need to always fetch the grouped columns so we always have key data for the rows\n // Used to display our virtual key column\n ...this.table.groupedColumns, ...columns.filter(c => !this.virtualColumns.includes(c) && !this.groupedColumns.includes(c))];\n this.table.setViewport(viewportTop, viewportBottom, viewportColumns);\n }\n textForCell(x, y) {\n var column = this.sourceColumn(x, y);\n var row = this.row(y);\n if (row != null && column != null) {\n if (!row.hasChildren && column.constituentType != null) {\n var _value = this.valueForCell(x, y);\n return this.displayString(_value, column.constituentType, column.name);\n }\n // Show empty string instead of null in rollup grouping columns (issue #1483)\n if (row.hasChildren && row.depth <= x + 1 && this.valueForCell(x, y) === null && this.getCachedGroupedColumnSet(this.groupedColumns).has(x)) {\n return '';\n }\n }\n return super.textForCell(x, y);\n }\n extractViewportRow(row, columns) {\n var {\n isExpanded,\n hasChildren,\n depth\n } = row;\n var extractedRow = super.extractViewportRow(row, columns);\n var modifiedData = new Map(extractedRow.data);\n if (hasChildren) {\n for (var i = 0; i < this.virtualColumns.length; i += 1) {\n var key = i + (depth - 1) + (this.virtualColumns.length - 1);\n var cellData = modifiedData.get(key);\n if (cellData == null) {\n log.warn('Missing key data for virtual column', i, depth, key, row);\n } else {\n modifiedData.set(i, cellData);\n }\n }\n }\n return _objectSpread(_objectSpread({}, extractedRow), {}, {\n data: modifiedData,\n isExpanded,\n hasChildren,\n depth\n });\n }\n snapshot(ranges, includeHeaders, formatValue) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _this$viewport$column, _this$viewportData;\n assertNotNull(_this.viewport);\n assertNotNull(_this.viewportData);\n var columns = (_this$viewport$column = _this.viewport.columns) !== null && _this$viewport$column !== void 0 ? _this$viewport$column : _this.columns;\n var result = [];\n if (includeHeaders != null && includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var viewportRange = new GridRange(0, (_this$viewportData = _this.viewportData) === null || _this$viewportData === void 0 ? void 0 : _this$viewportData.offset, columns.length, _this.viewportData.offset + _this.viewportData.rows.length);\n for (var i = 0; i < ranges.length; i += 1) {\n var intersection = GridRange.intersection(viewportRange, ranges[i]);\n assertNotNull(intersection);\n assertNotNull(intersection.startRow);\n assertNotNull(intersection.endRow);\n for (var r = intersection.startRow; r <= intersection.endRow; r += 1) {\n var resultRow = [];\n var viewportRow = _this.viewportData.rows[r - _this.viewportData.offset];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (var c = intersection.startColumn; c <= intersection.endColumn; c += 1) {\n var _viewportRow$data$get;\n assertNotNull(formatValue);\n resultRow.push(formatValue((_viewportRow$data$get = viewportRow.data.get(c)) === null || _viewportRow$data$get === void 0 ? void 0 : _viewportRow$data$get.value, _this.columns[c]));\n }\n result.push(resultRow);\n }\n }\n return result;\n })();\n }\n get columns() {\n return this.getCachedColumns(this.virtualColumns, super.columns);\n }\n get groupedColumns() {\n return this.getCachedGroupColumns(this.virtualColumns, this.table.groupedColumns);\n }\n sourceForCell(column, row) {\n if (column >= this.virtualColumns.length) {\n return {\n column,\n row\n };\n }\n var depth = this.depthForRow(row);\n return {\n column: column + depth,\n row\n };\n }\n sourceColumn(column, row) {\n if (column >= this.virtualColumns.length) {\n return super.sourceColumn(column, row);\n }\n var depth = this.depthForRow(row);\n return this.columns[column + depth];\n }\n getClearFilterRange(column) {\n if (column >= this.virtualColumns.length) {\n return super.getClearFilterRange(column);\n }\n // Source for the proxied column could be any of the grouped columns.\n // Return the range of columns matching the grouped columns.\n return [this.virtualColumns.length, this.groupedColumns.length];\n }\n get hasExpandableRows() {\n return true;\n }\n get isExpandAllAvailable() {\n return this.table.expandAll !== undefined;\n }\n get isChartBuilderAvailable() {\n return false;\n }\n get isSelectDistinctAvailable() {\n return false;\n }\n get isReversible() {\n return false;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns, this.groupedColumns, this.virtualColumns).has(columnIndex);\n }\n isColumnMovable(column) {\n return column >= this.groupedColumns.length;\n }\n isRowExpandable(y) {\n var _row$hasChildren;\n var row = this.row(y);\n return (_row$hasChildren = row === null || row === void 0 ? void 0 : row.hasChildren) !== null && _row$hasChildren !== void 0 ? _row$hasChildren : false;\n }\n isRowExpanded(y) {\n var _row$isExpanded;\n var row = this.row(y);\n return (_row$isExpanded = row === null || row === void 0 ? void 0 : row.isExpanded) !== null && _row$isExpanded !== void 0 ? _row$isExpanded : false;\n }\n setRowExpanded(y, isExpanded) {\n var expandDescendants = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (this.isExpandAllAvailable) {\n this.table.setExpanded(y, isExpanded, expandDescendants);\n } else {\n this.table.setExpanded(y, isExpanded);\n }\n }\n expandAll() {\n if (this.table.expandAll) {\n this.table.expandAll();\n }\n }\n collapseAll() {\n if (this.table.collapseAll) {\n this.table.collapseAll();\n }\n }\n depthForRow(y) {\n var _row$depth;\n var row = this.row(y);\n return ((_row$depth = row === null || row === void 0 ? void 0 : row.depth) !== null && _row$depth !== void 0 ? _row$depth : 1) - 1;\n }\n updateFrozenColumns(columns) {\n if (columns.length > 0) {\n throw new Error('Cannot freeze columns on a tree table');\n }\n }\n}\nexport default IrisGridTreeTableModel;\n//# sourceMappingURL=IrisGridTreeTableModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport deepEqual from 'deep-equal';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils } from '@deephaven/utils';\nimport { isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport IrisGridTableModel from \"./IrisGridTableModel.js\";\nimport IrisGridPartitionedTableModel from \"./IrisGridPartitionedTableModel.js\";\nimport IrisGridTreeTableModel from \"./IrisGridTreeTableModel.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport { isIrisGridTableModelTemplate } from \"./IrisGridTableModelTemplate.js\";\nimport { isPartitionedGridModelProvider } from \"./PartitionedGridModel.js\";\nvar log = Log.module('IrisGridProxyModel');\nfunction makeModel(dh, table, formatter, inputTable) {\n if (TableUtils.isTreeTable(table)) {\n return new IrisGridTreeTableModel(dh, table, formatter);\n }\n if (TableUtils.isPartitionedTable(table)) {\n return new IrisGridPartitionedTableModel(dh, table, formatter);\n }\n return new IrisGridTableModel(dh, table, formatter, inputTable);\n}\n\n/**\n * Model which proxies calls to other IrisGridModels.\n * This allows for operations that generate new tables, like rollups.\n */\nclass IrisGridProxyModel extends IrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n\n constructor(dh, table) {\n var _this;\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh);\n _this = this;\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"originalModel\", void 0);\n _defineProperty(this, \"model\", void 0);\n _defineProperty(this, \"modelPromise\", void 0);\n _defineProperty(this, \"rollup\", void 0);\n _defineProperty(this, \"partition\", void 0);\n _defineProperty(this, \"selectDistinct\", void 0);\n _defineProperty(this, \"currentViewport\", void 0);\n _defineProperty(this, \"textForCell\", function () {\n return _this.model.textForCell(...arguments);\n });\n _defineProperty(this, \"truncationCharForCell\", function () {\n return _this.model.truncationCharForCell(...arguments);\n });\n _defineProperty(this, \"textAlignForCell\", function () {\n return _this.model.textAlignForCell(...arguments);\n });\n _defineProperty(this, \"colorForCell\", function () {\n return _this.model.colorForCell(...arguments);\n });\n _defineProperty(this, \"backgroundColorForCell\", function () {\n return _this.model.backgroundColorForCell(...arguments);\n });\n _defineProperty(this, \"textForColumnHeader\", function () {\n return _this.model.textForColumnHeader(...arguments);\n });\n _defineProperty(this, \"colorForColumnHeader\", function () {\n return _this.model.colorForColumnHeader(...arguments);\n });\n _defineProperty(this, \"textForRowHeader\", function () {\n return _this.model.textForRowHeader(...arguments);\n });\n _defineProperty(this, \"textForRowFooter\", function () {\n return _this.model.textForRowFooter(...arguments);\n });\n _defineProperty(this, \"isRowMovable\", function () {\n return _this.model.isRowMovable(...arguments);\n });\n _defineProperty(this, \"isColumnMovable\", function () {\n return _this.model.isColumnMovable(...arguments);\n });\n _defineProperty(this, \"isRowExpandable\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.isRowExpandable(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"isRowExpanded\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.isRowExpanded(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"setRowExpanded\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.setRowExpanded(...arguments);\n }\n throw Error('Function setRowExpanded does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"expandAll\", () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.expandAll();\n }\n throw Error('Function expandAll does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"collapseAll\", () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.collapseAll();\n }\n throw Error('Function collapseAll does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"depthForRow\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.depthForRow(...arguments);\n }\n return 0;\n // throw Error('Function depthForRow does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"getColumnHeaderGroup\", function () {\n return _this.model.getColumnHeaderGroup(...arguments);\n });\n _defineProperty(this, \"getColumnHeaderParentGroup\", function () {\n return _this.model.getColumnHeaderParentGroup(...arguments);\n });\n _defineProperty(this, \"sourceForCell\", function () {\n return _this.model.sourceForCell(...arguments);\n });\n _defineProperty(this, \"getClearFilterRange\", function () {\n return _this.model.getClearFilterRange(...arguments);\n });\n _defineProperty(this, \"formatForCell\", function () {\n return _this.model.formatForCell(...arguments);\n });\n _defineProperty(this, \"valueForCell\", function () {\n return _this.model.valueForCell(...arguments);\n });\n _defineProperty(this, \"renderTypeForCell\", function () {\n return _this.model.renderTypeForCell(...arguments);\n });\n _defineProperty(this, \"dataBarOptionsForCell\", function () {\n return _this.model.dataBarOptionsForCell(...arguments);\n });\n _defineProperty(this, \"displayString\", function () {\n return _this.model.displayString(...arguments);\n });\n _defineProperty(this, \"isEditableRange\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.isEditableRange(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"isFilterable\", function () {\n return _this.model.isFilterable(...arguments);\n });\n _defineProperty(this, \"setViewport\", (top, bottom, columns) => {\n this.currentViewport = {\n top,\n bottom,\n columns\n };\n this.model.setViewport(top, bottom, columns);\n });\n _defineProperty(this, \"snapshot\", function () {\n return _this.model.snapshot(...arguments);\n });\n _defineProperty(this, \"textSnapshot\", function () {\n return _this.model.textSnapshot(...arguments);\n });\n _defineProperty(this, \"valuesTable\", function () {\n return _this.model.valuesTable(...arguments);\n });\n _defineProperty(this, \"editValueForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.editValueForCell(...arguments);\n }\n return '';\n });\n _defineProperty(this, \"setValueForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValueForCell(...arguments);\n }\n return Promise.reject(new Error('Model is not editable'));\n });\n _defineProperty(this, \"setValueForRanges\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValueForRanges(...arguments);\n }\n return Promise.reject(new Error('Model is not editable'));\n });\n _defineProperty(this, \"setValues\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValues(...arguments);\n }\n return Promise.resolve();\n });\n _defineProperty(this, \"isValidForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.isValidForCell(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"delete\", function () {\n return _this.model.delete(...arguments);\n });\n _defineProperty(this, \"commitPending\", function () {\n return _this.model.commitPending(...arguments);\n });\n this.handleModelEvent = this.handleModelEvent.bind(this);\n var model = makeModel(dh, table, formatter, inputTable);\n this.dh = dh;\n this.originalModel = model;\n this.model = model;\n this.modelPromise = null;\n this.rollup = null;\n this.partition = null;\n this.selectDistinct = [];\n }\n close() {\n this.originalModel.close();\n if (this.model !== this.originalModel) {\n this.model.close();\n }\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n }\n handleModelEvent(event) {\n log.debug2('handleModelEvent', event);\n var {\n detail,\n type\n } = event;\n this.dispatchEvent(new EventShimCustomEvent(type, {\n detail\n }));\n }\n setModel(model) {\n log.debug('setModel', model);\n var oldModel = this.model;\n var {\n columns: oldColumns\n } = oldModel;\n if (oldModel !== this.originalModel) {\n oldModel.close();\n }\n this.model = model;\n if (this.listenerCount > 0) {\n this.addListeners(model);\n }\n if (oldColumns !== model.columns) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: model.columns\n }));\n } else if (this.currentViewport != null) {\n // If the columns haven't changed, the current viewport should still valid, and needs to be set on the new model\n var {\n top,\n bottom,\n columns\n } = this.currentViewport;\n model.setViewport(top, bottom, columns);\n }\n if (isIrisGridTableModelTemplate(model)) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: model.table\n }));\n }\n }\n setNextModel(modelPromise) {\n log.debug2('setNextModel');\n if (this.modelPromise) {\n this.modelPromise.cancel();\n }\n if (this.listenerCount > 0) {\n this.removeListeners(this.model);\n }\n this.modelPromise = PromiseUtils.makeCancelable(modelPromise, model => model.close());\n this.modelPromise.then(model => {\n this.modelPromise = null;\n this.setModel(model);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('setNextModel cancelled');\n return;\n }\n log.error('Unable to set next model', err);\n this.modelPromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n startListening() {\n super.startListening();\n this.addListeners(this.model);\n }\n stopListening() {\n super.stopListening();\n this.removeListeners(this.model);\n }\n addListeners(model) {\n var events = Object.keys(IrisGridModel.EVENT);\n for (var i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.addEventListener(events[i], this.handleModelEvent);\n }\n }\n removeListeners(model) {\n var events = Object.keys(IrisGridModel.EVENT);\n for (var i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.removeEventListener(events[i], this.handleModelEvent);\n }\n }\n get rowCount() {\n return this.model.rowCount;\n }\n get columnCount() {\n return this.model.columnCount;\n }\n get floatingTopRowCount() {\n return this.model.floatingTopRowCount;\n }\n get floatingBottomRowCount() {\n return this.model.floatingBottomRowCount;\n }\n get floatingLeftColumnCount() {\n return this.model.floatingLeftColumnCount;\n }\n get floatingRightColumnCount() {\n return this.model.floatingRightColumnCount;\n }\n isColumnFrozen(x) {\n return this.model.isColumnFrozen(x);\n }\n isColumnSortable(index) {\n return this.model.isColumnSortable(index);\n }\n get hasExpandableRows() {\n if (isExpandableGridModel(this.model)) {\n return this.model.hasExpandableRows;\n }\n return false;\n }\n get isExpandAllAvailable() {\n if (isExpandableGridModel(this.model)) {\n var _this$model$isExpandA;\n return (_this$model$isExpandA = this.model.isExpandAllAvailable) !== null && _this$model$isExpandA !== void 0 ? _this$model$isExpandA : false;\n }\n return false;\n }\n get isExportAvailable() {\n return this.model.isExportAvailable;\n }\n get isColumnStatisticsAvailable() {\n return this.model.isColumnStatisticsAvailable;\n }\n get isValuesTableAvailable() {\n return this.model.isValuesTableAvailable;\n }\n get isCustomColumnsAvailable() {\n return this.model.isCustomColumnsAvailable &&\n // Disable for selectDistinct tables\n !(this.isSelectDistinctAvailable && this.selectDistinctColumns.length > 0);\n }\n get isFormatColumnsAvailable() {\n return this.model.isFormatColumnsAvailable;\n }\n get isChartBuilderAvailable() {\n return this.model.isChartBuilderAvailable;\n }\n get isRollupAvailable() {\n return (this.originalModel.isRollupAvailable || this.rollup != null) && this.selectDistinct.length === 0;\n }\n get isSelectDistinctAvailable() {\n return (this.originalModel.isSelectDistinctAvailable || this.selectDistinct.length > 0) && this.rollup == null;\n }\n get isTotalsAvailable() {\n return this.model.isTotalsAvailable;\n }\n get isReversible() {\n return this.model.isReversible;\n }\n get columns() {\n return this.model.columns;\n }\n get initialMovedColumns() {\n return this.model.initialMovedColumns;\n }\n get initialMovedRows() {\n return this.model.initialMovedRows;\n }\n get layoutHints() {\n return this.model.layoutHints;\n }\n get frontColumns() {\n return this.model.frontColumns;\n }\n get backColumns() {\n return this.model.backColumns;\n }\n get frozenColumns() {\n return this.model.frozenColumns;\n }\n get columnHeaderGroups() {\n return this.model.columnHeaderGroups;\n }\n set columnHeaderGroups(groups) {\n this.model.columnHeaderGroups = groups;\n }\n get initialColumnHeaderGroups() {\n return this.model.initialColumnHeaderGroups;\n }\n get columnHeaderGroupMap() {\n return this.model.columnHeaderGroupMap;\n }\n get columnHeaderMaxDepth() {\n return this.model.columnHeaderMaxDepth;\n }\n updateFrozenColumns(columns) {\n return this.model.updateFrozenColumns(columns);\n }\n get originalColumns() {\n return this.originalModel.columns;\n }\n get groupedColumns() {\n return this.model.groupedColumns;\n }\n get partitionColumns() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n return [];\n }\n return this.originalModel.partitionColumns;\n }\n get description() {\n return this.model.description;\n }\n get filter() {\n return this.model.filter;\n }\n set filter(filter) {\n this.model.filter = filter;\n }\n get partitionConfig() {\n if (!isPartitionedGridModelProvider(this.originalModel) || !this.originalModel.isPartitionRequired) {\n return null;\n }\n return this.partition;\n }\n set partitionConfig(partitionConfig) {\n if (!this.isPartitionRequired) {\n throw new Error('Partitions are not available');\n }\n log.debug('set partitionConfig', partitionConfig);\n this.partition = partitionConfig;\n var modelPromise = Promise.resolve(this.originalModel);\n if (partitionConfig != null && isPartitionedGridModelProvider(this.originalModel)) {\n if (partitionConfig.mode === 'keys') {\n modelPromise = this.originalModel.partitionKeysTable().then(table => makeModel(this.dh, table, this.formatter));\n } else if (partitionConfig.mode === 'merged') {\n modelPromise = this.originalModel.partitionMergedTable().then(table => makeModel(this.dh, table, this.formatter));\n } else {\n modelPromise = this.originalModel.partitionTable(partitionConfig.partitions).then(table => makeModel(this.dh, table, this.formatter));\n }\n }\n this.setNextModel(modelPromise);\n }\n partitionKeysTable() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionKeysTable();\n }\n partitionMergedTable() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionMergedTable();\n }\n partitionTable(partitions) {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionTable(partitions);\n }\n get formatter() {\n return this.model.formatter;\n }\n set formatter(formatter) {\n this.model.formatter = formatter;\n }\n get sort() {\n return this.model.sort;\n }\n set sort(sort) {\n this.model.sort = sort;\n }\n get customColumns() {\n return this.model.customColumns;\n }\n set customColumns(customColumns) {\n this.model.customColumns = customColumns;\n }\n get formatColumns() {\n return this.model.formatColumns;\n }\n set formatColumns(formatColumns) {\n this.model.formatColumns = formatColumns;\n }\n get rollupConfig() {\n return this.rollup;\n }\n set rollupConfig(rollupConfig) {\n log.debug('set rollupConfig', rollupConfig);\n if (!this.isRollupAvailable) {\n throw new Error('Rollup Rows are not available');\n }\n\n // Prevent model update when IrisGridModelUpdater is mounted\n // if rollup is already initialized in IrisGridPanel\n if (deepEqual(rollupConfig, this.rollup)) {\n return;\n }\n this.rollup = rollupConfig;\n var modelPromise = Promise.resolve(this.originalModel);\n if (isIrisGridTableModelTemplate(this.originalModel) && rollupConfig != null) {\n modelPromise = this.originalModel.table.rollup(rollupConfig).then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n get selectDistinctColumns() {\n return this.selectDistinct;\n }\n set selectDistinctColumns(columnNames) {\n log.debug('set selectDistinctColumns', columnNames);\n if (!this.isSelectDistinctAvailable) {\n throw new Error('Select distinct is not available');\n }\n if (columnNames === this.selectDistinctColumns || columnNames.length === 0 && this.selectDistinctColumns.length === 0) {\n log.debug('Ignore same selectDistinctColumns', columnNames);\n return;\n }\n this.selectDistinct = columnNames;\n var selectDistinctColumns = columnNames.map(name => this.originalColumns.find(column => column.name === name)).filter(column => column != null);\n var modelPromise = Promise.resolve(this.originalModel);\n if (isIrisGridTableModelTemplate(this.originalModel) && selectDistinctColumns.length > 0) {\n modelPromise = this.originalModel.table.selectDistinct(selectDistinctColumns).then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n get table() {\n if (isIrisGridTableModelTemplate(this.model)) {\n return this.model.table;\n }\n return undefined;\n }\n get totalsConfig() {\n return this.model.totalsConfig;\n }\n set totalsConfig(totalsConfig) {\n this.model.totalsConfig = totalsConfig;\n }\n get isFilterRequired() {\n return this.originalModel.isFilterRequired;\n }\n get isPartitionRequired() {\n return isPartitionedGridModelProvider(this.originalModel) ? this.originalModel.isPartitionRequired : false;\n }\n get isEditable() {\n return isEditableGridModel(this.model) && this.model.isEditable;\n }\n export() {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'export' property\");\n }\n return this.model.export();\n }\n columnStatistics(column) {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'columnStatistics' function\");\n }\n return this.model.columnStatistics(column);\n }\n get pendingDataMap() {\n return this.model.pendingDataMap;\n }\n set pendingDataMap(map) {\n this.model.pendingDataMap = map;\n }\n get pendingRowCount() {\n return this.model.pendingRowCount;\n }\n set pendingRowCount(count) {\n this.model.pendingRowCount = count;\n }\n get pendingDataErrors() {\n return this.model.pendingDataErrors;\n }\n getColumnIndexByName(name) {\n return this.model.getColumnIndexByName(name);\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.model.seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards);\n })();\n }\n get isSeekRowAvailable() {\n return this.model.isSeekRowAvailable;\n }\n}\nexport default IrisGridProxyModel;\n//# sourceMappingURL=IrisGridProxyModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport IrisGridProxyModel from \"./IrisGridProxyModel.js\";\n/**\n * Factory to create an IrisGridDataModel based on a table or tree table, whatever is passed in.\n */\nclass IrisGridModelFactory {\n /**\n * @param table The Table or TreeTable object to create the model with\n * @param formatter The formatter to use\n * @returns An IrisGridModel that uses the table provided\n */\n static makeModel(dh, table) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n var formatter = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : new Formatter(dh);\n var inputTable = null;\n if (!TableUtils.isTreeTable(table) && !TableUtils.isPartitionedTable(table) && table.hasInputTable) {\n inputTable = yield table.inputTable();\n }\n return new IrisGridProxyModel(dh, table, formatter, inputTable);\n })();\n }\n}\nexport default IrisGridModelFactory;\n//# sourceMappingURL=IrisGridModelFactory.js.map","import { createContext } from 'react';\nexport var ConnectionContext = /*#__PURE__*/createContext(null);\nexport default ConnectionContext;\n//# sourceMappingURL=ConnectionContext.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { ConnectionContext } from \"./ConnectionContext.js\";\n/**\n * Retrieve the connection for the current context.\n *\n * @returns Connection for the current context\n */\nexport function useConnection() {\n return useContextOrThrow(ConnectionContext, 'No IdeConnection available in useConnection. Was code wrapped in ConnectionContext.Provider?');\n}\nexport default useConnection;\n//# sourceMappingURL=useConnection.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { UserContext } from '@deephaven/auth-plugins';\nexport function useUser() {\n return useContextOrThrow(UserContext, 'No user available in useUser. Was code wrapped in UserBootstrap or UserContext.Provider?');\n}\nexport default useUser;\n//# sourceMappingURL=useUser.js.map"],"file":"assets/useUser-4dd7df18.js"}
1
+ {"version":3,"mappings":"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","names":["EMPTY_ARRAY","EMPTY_MAP","EMPTY_FUNCTION","removeNullAndUndefined","_len","maybeDefined","_key","m","_defineProperty","obj","key","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","CanceledPromiseError","CanceledPromiseError$1","bindAllMethods","instance","traversePrototypeChain","methodNames","getAllMethodNames","methodName","current","level","name","EventShimCustomEvent","typeArg","eventInitDict","TimeoutError","TimeoutError$1","PromiseUtils","promise","cleanup","hasCanceled","resolved","rejectFn","wrappedPromise","resolve","reject","val","error","timeoutMs","callback","err","TextUtils","items","conjunction","itemText","lastItem","text","isNullAllowed","a","b","isAscending","TextUtils$1","useContextOrThrow","context","message","useContext","isPromise","ContextActionUtils","_a$group","_b$group","_a$order","_b$order","_a$title","_b$title","actions","sortedActions","platform","event","modifierKey","actionsParam","includePromises","menuItems","action","newMenuItems","startIndex","delta","firstIndex","menuIndex","item","ContextActionUtils$1","ContextMenuItem","React","props","ref","_menuItem$shortcutTex","_menuItem$shortcut","handleMenuItemClick","e","menuItem","onMenuItemClick","handleMenuItemMouseMove","onMenuItemMouseMove","handleMenuItemContextMenu","onMenuItemContextMenu","renderCustomMenuElement","element","iconElement","displayShortcut","closeMenu","isKeyboardSelected","isMouseSelected","dataTestId","forwardedProps","children","icon","menuItemIcon","style","_jsx","FontAwesomeIcon","subMenuIndicator","isSubMenuActive","vsChevronRight","content","_menuItem$description","menuItemDisabled","iconHasOutline","classNames","_jsxs","ContextMenuItem$1","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","log","Log","ContextMenu","PureComponent","_this$container$curre","onMenuOpened","prevProps","prevState","activeSubMenu","_this$container$curre2","_this$container$curre3","options","keyboardIndex","index","mouseIndex","nonPromiseItems","cancellablePromise","state","resolvedMenuItems","pendingItems","parentRect","_this$container$curre4","_this$container$curre5","_this$container$curre6","_this$container$curre7","updatePosition","subMenuParentWidth","subMenuParentHeight","oldTop","oldLeft","top","left","width","height","hasOverflow","isContextMenuChild","oldFocus","newFocus","openSubMenu","newSubMenu","closeAll","onMenuClosed","closeAllMenus","focusIndex","menuItemElements","subMenuTop","subMenuLeft","menuItemElement","pendingElement","LoadingSpinner","menuStyle","showSubmenu","_Fragment","verifiedTop","verifiedLeft","ContextMenu$1","ContextMenuRoot","Component","mouseEvent","contextActions","menu","ContextMenuRoot$1","FETCH_TIMEOUT","fetchVariableDefinition","connection","timeout","removeListener","timeoutId","_removeListener","handleFieldUpdates","changes","_removeListener2","definition","def","TableColumnFormatter","dh","format","formatA","formatB","label","formatString","type","TableColumnFormatter$1","BooleanColumnFormatter","BooleanColumnFormatter$1","CharColumnFormatter","CharColumnFormatter$1","DateTimeColumnFormatter","showTimeZone","showTSeparator","separator","tz","formatStringMap","timeZoneParam","defaultDateTimeFormatString","timeZone","baseFormatString","_this$formatStringMap","DecimalColumnFormatter","multiplier","defaultFormatString","valueParam","DefaultColumnFormatter","DefaultColumnFormatter$1","IntegerColumnFormatter","StringColumnFormatter","DateUtils","year","month","day","hour","minute","second","ns","yearString","monthString","dayString","hourString","minuteString","secondString","nanoString","dateString","sigNanos","zeros","nextNanoString","components","values","date","hours","minutes","seconds","nanos","jsDate","cleanMonthString","dateTimeString","regex","result","overflow","cleanText","now","_startDate","tomorrow","_endDate","_now","yesterday","_startDate2","_endDate2","_now2","startDate","endDate","dateWrapper","createComboboxFilterArgs","allValue","createSearchTextFilter","tableUtils","columnNames","searchText","maybeTable","searchTextTrimmed","factory","createFilterConditionFactory","col","createColumnCondition","conditionOperator","maybeColumns","filterConditions","next","createValueFilter","operator","createSelectedValuesFilter","columnName","selection","emptySelectionEqAll","invertSelection","maybeColumn","isAllSelected","createNotNullOrEmptyFilterCondition","column","createShowOnlyEmptyFilterCondition","isOn","filter","emptyStringValue","eqEmptyStringCondition","Operator","assertOperatorValue","Type","createKeyFromOffsetRow","row","offset","createOnTableUpdatedHandler","_ref","deserializeRow","bulkUpdate","columns","rows","updateKeyMap","defaultRowDeserializer","generateEmptyKeyedItems","start","end","getSize","table","isClosed","padFirstAndLastRow","firstRow","viewportSize","padding","tableSize","lastRow","min","max","first","clamp","last","asyncGeneratorStep","gen","_next","_throw","info","_asyncToGenerator","fn","self","args","TableUtils","_arguments","derivedTable","filterFactories","f","sort","_s$column","s","tableSort","sortIndex","columnType","FilterType","sorts","columnIndex","direction","isAbs","addToExisting","newSort","modelColumn","type1","type2","operation","eventName","matcher","eventCleanup","isPending","allowEmpty","numberText","aName","bName","sortDirection","_arguments2","_this","sourceTable","_len2","filterConditionFactories","_key2","distinctTable","distinctAscColSort","isCaseSensitive","_this2","filterConditionFactory","tableCopy","size","orComponents","orFilter","orComponent","andComponents","andFilter","j","andComponent","columnFilter","negativeSign","abnormalValue","quickFilterText","_operation","_value2","nullRegex","_value","_operation2","_value3","prefix","suffix","notEqual","cleanValue","boolValue","dateText","filterOperation","startValue","endValue","startFilter","endFilter","_startFilter","_endFilter","filterValue","filterItems","filterOperators","selectedValues","filterItem","selectedType","newFilter","filterOperator","FilterOperator","selectValueFilter","_arguments3","_this3","filters","_arguments4","_this4","t","_arguments5","_this5","_arguments6","_this6","eqFilter","notEqFilter","rawValue","isNullSelected","_ref2","exec","eventType","eventPromise","_x","_x2","_x3","Formatter","columnFormattingRules","map","dataType","formatMap","dateTimeOptions","decimalFormatOptions","integerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","createIfNecessary","_columnFormatMap$get","columnFormatMap","columnTypeFormatter","_this$typeFormatterMa","formatOverride","formatter","_formatter$dhTimeZone","getColumnFormats","settings","getDateTimeFormatterOptions","isCustomColumnFormatDefined","columnFormat","FormatterUtils","UserOverrideContext","createContext","UserPermissionsOverrideContext","UserContext","IrisGrid","lazy","__vitePreload","LazyIrisGrid","forwardRef","Suspense","LoadingOverlay","IrisGrid$1","AdvancedSettingsType","AdvancedSettingsType$1","DEFAULTS","AdvancedSettings","AggregationOperation","AggregationOperation$1","SELECTABLE_OPTIONS","isRollupOperation","isValidOperation","operationType","filterValidColumns","c","getOperationColumnNames","selected","invert","AggregationUtils","AssertionError","AssertionError$1","isEditableGridModel","model","assertIsEditableGridModel","isExpandableGridModel","SELECTION_DIRECTION","GridRange","startColumn","startRow","endColumn","endRow","right","bottom","index1","index2","ranges","wasModified","range","other","_startColumn","_endColumn","_startRow","_endRow","start1","end1","start2","end2","ranges1","ranges2","otherRange","_startColumn2","_endColumn2","_startRow2","_endRow2","_endColumn3","_endRow3","subtractRange","subtract","subtractRanges","columnCount","rowCount","_range$startColumn","_range$startRow","_range$endColumn","_range$endRow","r","columnOffset","rowOffset","rangeIndex","nextCell","nextRangeIndex","nextRange","_nextRangeIndex","_nextRange","cellCount","_range$endRow2","_range$startRow2","_range$endColumn2","_range$startColumn2","_range$endRow3","_range$startRow3","_range$endColumn3","_range$startColumn3","_this$nextCell","isAxisRange","isBoundedAxisRange","isLinkToken","token","GridUtils","x","y","metrics","columnHeaderDepth","allColumnWidths","allRowHeights","allColumnXs","allRowYs","modelColumns","modelRows","modelRow","columnWidth","rowHeight","columnHeaderHeight","columnHeaderMaxDepth","total","visibleStart","visibleEnd","floatingStartCount","floatingEndCount","totalCount","visibleStartIndex","visibleEndIndex","itemIndex","itemCoordinates","itemSizes","coordinate","_itemCoordinates$get","_itemSizes$get","itemX","itemSize","itemCount","floatingStart","floatingEnd","ignoreFloating","floatingItem","floatingLeftColumnCount","floatingRightColumnCount","visibleColumns","gridX","floatingTopRowCount","floatingBottomRowCount","visibleRows","gridY","modelIndexes","visibleItems","userSizes","visibleItemIndex","modelIndex","userColumnWidths","userRowHeights","theme","rowHeaderWidth","floatingColumns","floatingLeftWidth","allowColumnResize","headerSeparatorHandleSize","halfSeparatorSize","isPreviousColumnHidden","_allColumnXs$get","_allColumnWidths$get","columnX","isColumnHidden","midX","minX","maxX","_i","_allColumnXs$get2","_allColumnWidths$get2","_column","_columnX","_columnWidth","_isColumnHidden","_midX","_minX","_maxX","visibleSizes","hiddenItems","allowRowResize","isPreviousRowHidden","_allRowYs$get","_allRowHeights$get","rowY","isRowHidden","midY","minY","maxY","rowIndex","from","to","oldMovedItems","movedItems","lastMovedItem","toParam","isPreMoveTo","newLastMovedItem","reverse","_loop","fromItemOrRange","toItem","length","fromItem","fromStart","fromEnd","toStart","moveDistance","nextResult","_loop2","_result$j$","_result$j$2","currentStart","currentEnd","movedRange","currentResult","_ref3","movedColumns","movedRows","columnRanges","rowRanges","visibleIndex","visibleIndexes","uiRange","uiRanges","modelRanges","modelRange","visibleRanges","floatingRightWidth","floatingTopHeight","floatingBottomHeight","x1","y1","x2","y2","wheelEvent","pageWidth","pageHeight","lineWidth","lineHeight","deltaX","deltaY","range1","range2","mergedRanges","tokenBox","gridWidth","gridHeight","verticalBarWidth","horizontalBarHeight","newLeft","newRight","newTop","newBottom","firstColumn","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","getOrThrow","textAlign","isFirstColumn","treeIndent","textWidth","textX","textY","tokens","linkifyFind","GridUtils$1","memoizeClear","isClearingCache","memoizedFn","memoizee","memoizeClear$1","LINK_TRUNCATION_LENGTH","GridModel","EventTarget","visibleLength","indexOfProceedingWhitespace","lengthOfContent","contentToCheckForLinks","depth","GridModel$1","IrisGridModel","type0","callback0","options0","IrisGridModel$1","isColumnHeaderGroup","ColumnHeaderGroup","color","childIndexes","parent","memoizeOne","flattenedIndexes","newChildren","isPartitionedGridModelProvider","isPartitionedGridModel","_excluded","_excluded2","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","isPanelStateV1","isPanelStateV2","isValidIndex","array","isDateWrapper","IrisGridUtils","gridState","isStuckToBottom","isStuckToRight","customColumns","customColumnNames","_ref4","getIndex","_ref5","irisGridPanelState","isSelectingPartition","partitions","advancedSettings","quickFilters","_ref6","quickFilter","panelState","inputFilters","irisGridState","advancedFilters","_ref7","_ref8","filterMap","_ref9","_ref10","customColumn","oldCustomColumns","oldCustomColumnsNames","oldCustomColumnName","removedColumnNames","_ref11","_ref12","newMoves","removedColumnName","removedColumnIndex","moves","move","newMove","selectDistinctColumns","tableColumns","hiddenColumns","count","viewportColumns","alwaysFetchColumnNames","columnsToFetch","_ref13","bufferPages","columnsCenter","bufferWidth","columnsLeft","columnsRight","bufferedColumns","rangeMap","rowMapIndex","columnMapIndex","matchColumnRanges","allColumns","columnSet","assertNotNull","data","rowData","originalColumns","config","aggregationSettings","_config$columns$lengt","_config$columns","groupingColumns","includeConstituents","showNonAggregatedColumns","includeDescriptions","aggregations","aggregationColumns","_ref14","aggregationMap","nonAggregatedColumnSet","_aggregationMap$Aggre","existingColumns","pendingDataMap","_ref15","_ref16","_ref17","filterConfig","filterList","combinedText","symbol","filterText","groupsParam","maxDepth","parentMap","groupMap","groups","_ref18","originalGroupMap","group","seenChildren","addGroup","existingGroup","childName","childGroup","childIndex","addedGroup","columnHeaderGroup","groupNames","_parentMap$get","offsetDate","formattedText","customColumnFormatMap","isFilterBarShown","conditionalFormats","reverseType","rollupConfig","showSearchBar","searchValue","selectedSearchColumns","invertSearchColumns","frozenColumns","columnHeaderGroups","partitionConfig","partitionColumns","_ref19","_ref20","_ref24","_model$layoutHints","_ref21","_ref22","_ref23","savedQuickFilters","importedFilters","_ref25","_ref26","advancedFilter","savedAdvancedFilters","_ref27","columnRetrieved","otherOptions","_ref28","_ref29","columnMap","getColumnIndex","_ref30","_ref31","_ref32","_getColumnIndex","partition","columnIndexOrName","columnSort","tableSettings","partitionColumnNames","partitionColumnName","partitionFilter","_ref33","_ref34","rangeSets","IrisGridUtils$1","MissingPartitionError","isMissingPartitionError","MissingPartitionError$1","MissingKeyError","MissingKeyError$1","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","isIrisGridTableModelTemplate","IrisGridTableModelTemplate","valueType","insensitive","contains","isBackwards","formatColumns","names","_this$layoutHints$col","_this$layoutHints","_formatter","inputTable","memoize","layoutHints","_layoutHints$columnGr","moveColumn","toIndex","moveGroup","visibleRange","frontColumns","backColumns","usedColumns","frontIndex","backIndex","layoutHintColumnGroups","columnGroups","firstChildName","rightModelIndex","rightVisibleIndex","firstChildGroup","childColumn","isBeforeGroup","moveToIndex","_isBeforeGroup","_moveToIndex","_layoutHints$columnGr2","indices","throttle","viewport","viewportTop","viewportBottom","viewHeight","keyColumnCount","_map$get","totalsTable","_this$totals$operatio","_this$totals","_this$totals$operatio2","_this$inputTable$keyC","_this$inputTable","_this$totals$operatio3","_this$totals2","_this$totals2$operati","_this$totals$operatio4","_this$totals3","_this$totals3$operati","_this$pendingStringDa","_this$formattedString","hasCustomColumnFormat","formatForCell","_this$columns$x","pendingRow","_column2","_this$formatForCell$b","_this$formatForCell","_header$displayName","header","_column$color","_this$columnAtDepth$n","_this$columnAtDepth","_this$columns$x2","currentDepth","totalsRow","_this$layoutHints2","_this$layoutHints3","_this$_columnHeaderMa","newGroups","_this$totals$operatio5","_this$totals4","_this$totals4$operati","_this$totals$showOnTo","_this$totals5","_this$viewportData$of","_this$viewportData","_this$viewportData$ro","_this$viewportData2","_this$viewportData2$r","totalsRowCount","showOnTop","_this$totals6","_this$totalsDataMap$g","_this$totalsDataMap","_this$pendingNewDataM","viewportY","_this$totals7","_this$totals$defaultO","_this$totals8","_this$totalsTable","defaultOperation","tableColumn","totalsColumn","_this$totals9","_this$totals$operatio6","_this$totals10","_this$totals10$operat","_this$totals$showOnTo2","_this$totals11","_this$row","_this$dataForCell","_data$value","totalsData","_this$totals$defaultO2","_this$totals12","_this$totals13","dataMap","operationMap","_operationMap$name$","_operationMap$name","newData","_row","newRow","_column3","totalsConfig","includeHeaders","formatValue","consolidateRanges","consolidated","topFloatingRowsSet","tableRanges","bottomFloatingRowsSet","_r","topFloatingRows","rangeSet","snapshot","bottomFloatingRows","_loop3","_i2","_this$columns$modelIn","_this$inputTable$keyC2","_this$inputTable2","isPendingRange","pendingAreaRange","pendingRanges","newDataMap","newRowData","tableAreaRange","_this6$inputTable","newRows","cellText","_this7","edits","edit","_edit$column","_edit$row","_edit$column2","_edit$row2","_row2","rowEditMap","rowMap","_edit$row3","_rowMap$get","_edit$column3","_edit$row4","_this7$inputTable","dataIndex","rangeRowCount","rowEdits","_edit$column4","_edit$column5","_edit$row5","_this8","_this8$inputTable","_this8$viewport$botto","_this8$viewport","_column4","IrisGridTableModelTemplate$1","IrisGridTableModel","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","_","partitionFilters","partitionColumn","_superprop_getPendingDataMap","_superprop_setPendingDataMap","_this5$inputTable","keyColumns","pendingRange","deleteTable","keyColumn","keyIndex","columnFilters","_filter","agg","curr","_agg$and","_agg$or","IrisGridTableModel$1","EmptyIrisGridModel","EmptyIrisGridModel$1","IrisGridPartitionedTableModel","partitionedTable","IrisGridPartitionedTableModel$1","IrisGridTreeTableModel","virtualColumns","tableGroupedColumns","groupedColumns","c1","c2","isExpanded","hasChildren","extractedRow","modifiedData","cellData","_this$viewport$column","viewportRange","intersection","resultRow","viewportRow","_viewportRow$data$get","_row$hasChildren","_row$isExpanded","expandDescendants","_row$depth","IrisGridTreeTableModel$1","makeModel","IrisGridProxyModel","detail","oldModel","oldColumns","modelPromise","events","_this$model$isExpandA","deepEqual","IrisGridProxyModel$1","IrisGridModelFactory","IrisGridModelFactory$1","ConnectionContext","useConnection","useUser"],"sources":["../../../utils/dist/DataUtils.js","../../../utils/dist/CanceledPromiseError.js","../../../utils/dist/ClassUtils.js","../../../utils/dist/EventTargetShimUtils.js","../../../utils/dist/TimeoutError.js","../../../utils/dist/PromiseUtils.js","../../../utils/dist/TextUtils.js","../../../react-hooks/dist/useContextOrThrow.js","../../../components/dist/context-actions/ContextActionUtils.js","../../../components/dist/context-actions/ContextMenuItem.js","../../../components/dist/context-actions/ContextMenu.js","../../../components/dist/context-actions/ContextMenuRoot.js","../../../jsapi-utils/dist/ConnectionUtils.js","../../../jsapi-utils/dist/formatters/TableColumnFormatter.js","../../../jsapi-utils/dist/formatters/BooleanColumnFormatter.js","../../../jsapi-utils/dist/formatters/CharColumnFormatter.js","../../../jsapi-utils/dist/formatters/DateTimeColumnFormatter.js","../../../jsapi-utils/dist/formatters/DecimalColumnFormatter.js","../../../jsapi-utils/dist/formatters/DefaultColumnFormatter.js","../../../jsapi-utils/dist/formatters/IntegerColumnFormatter.js","../../../jsapi-utils/dist/formatters/StringColumnFormatter.js","../../../jsapi-utils/dist/DateUtils.js","../../../jsapi-utils/dist/FilterUtils.js","../../../filters/dist/Operator.js","../../../filters/dist/Type.js","../../../jsapi-utils/dist/ViewportDataUtils.js","../../../jsapi-utils/dist/TableUtils.js","../../../jsapi-utils/dist/Formatter.js","../../../jsapi-utils/dist/FormatterUtils.js","../../../auth-plugins/dist/UserContexts.js","../../../iris-grid/dist/LazyIrisGrid.js","../../../iris-grid/dist/sidebar/AdvancedSettingsType.js","../../../iris-grid/dist/sidebar/AdvancedSettings.js","../../../iris-grid/dist/sidebar/aggregations/AggregationOperation.js","../../../iris-grid/dist/sidebar/aggregations/AggregationUtils.js","../../../grid/dist/errors/AssertionError.js","../../../grid/dist/EditableGridModel.js","../../../grid/dist/ExpandableGridModel.js","../../../grid/dist/GridRange.js","../../../grid/dist/GridAxisRange.js","../../../grid/dist/GridUtils.js","../../../grid/dist/memoizeClear.js","../../../grid/dist/GridModel.js","../../../iris-grid/dist/IrisGridModel.js","../../../iris-grid/dist/ColumnHeaderGroup.js","../../../iris-grid/dist/PartitionedGridModel.js","../../../iris-grid/dist/IrisGridUtils.js","../../../iris-grid/dist/MissingPartitionError.js","../../../iris-grid/dist/MissingKeyError.js","../../../iris-grid/dist/IrisGridTableModelTemplate.js","../../../iris-grid/dist/IrisGridTableModel.js","../../../iris-grid/dist/EmptyIrisGridModel.js","../../../iris-grid/dist/IrisGridPartitionedTableModel.js","../../../iris-grid/dist/IrisGridTreeTableModel.js","../../../iris-grid/dist/IrisGridProxyModel.js","../../../iris-grid/dist/IrisGridModelFactory.js","../../../app-utils/dist/components/ConnectionContext.js","../../../app-utils/dist/components/useConnection.js","../../../app-utils/dist/components/useUser.js"],"sourcesContent":["export var EMPTY_ARRAY = Object.freeze([]);\nexport var EMPTY_MAP = new Map();\nexport var EMPTY_FUNCTION = () => undefined;\n/**\n * Filters out any null or undefined values from an array.\n * @param maybeDefined\n */\nexport function removeNullAndUndefined() {\n for (var _len = arguments.length, maybeDefined = new Array(_len), _key = 0; _key < _len; _key++) {\n maybeDefined[_key] = arguments[_key];\n }\n return maybeDefined.filter(m => m != null);\n}\n//# sourceMappingURL=DataUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass CanceledPromiseError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isCanceled\", true);\n }\n}\nexport default CanceledPromiseError;\n//# sourceMappingURL=CanceledPromiseError.js.map","/**\n * Bind all methods on the instance + its prototype to the instance. If\n * `traversePrototypeChain` is true, the prototype chain will be traversed until\n * Object.prototype is reached, and any additional methods found will be included.\n * @param instance The instance to bind methods to\n * @param traversePrototypeChain Whether to traverse the prototype chain or not\n */\nexport function bindAllMethods(instance) {\n var traversePrototypeChain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var methodNames = getAllMethodNames(instance, traversePrototypeChain);\n methodNames.forEach(methodName => {\n // eslint-disable-next-line no-param-reassign\n instance[methodName] = instance[methodName].bind(instance);\n });\n}\n\n/**\n * Get all class method names. This will return names of all methods defined on\n * the instance + its prototype. If `traversePrototypeChain` is true, the prototype\n * chain will be traversed until Object.prototype is reached, and any additional\n * methods found will be included.\n * @param instance Instance to get method names from\n * @param traversePrototypeChain Whether to traverse the prototype chain or not\n */\nexport function getAllMethodNames(instance, traversePrototypeChain) {\n var methodNames = new Set();\n var current = instance;\n\n // Get method names for instance + prototype. Optionally traverse prototype\n // chain until Object.prototype is reached.\n var level = 0;\n while (current != null && current !== Object.prototype && (level <= 1 || traversePrototypeChain)) {\n // eslint-disable-next-line no-restricted-syntax\n for (var name of Object.getOwnPropertyNames(current)) {\n if (name !== 'constructor' && typeof current[name] === 'function') {\n methodNames.add(name);\n }\n }\n current = Object.getPrototypeOf(current);\n level += 1;\n }\n return [...methodNames.keys()];\n}\n//# sourceMappingURL=ClassUtils.js.map","/**\n * A CustomEvent extension which combines the browser CustomEvent and event-target-shim's Event types for type safety\n * CustomEvent does not have a generic type and augmenting the dom types seemed like not the best idea\n */\nexport class EventShimCustomEvent extends CustomEvent {\n // The fields declared are so TS plays nicely w/ event-target-shim and the browser CustomEvent\n // They don't actually do anything other than tell TS to not complain that they aren't set in the constructor\n // If declare is removed, then the properties are initialized to undefined which breaks this class\n // This will be the default for tsc and babel at some point\n // https://github.com/babel/babel/issues/12128#issuecomment-702119272\n\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor(typeArg, eventInitDict) {\n super(typeArg, eventInitDict);\n }\n}\n\n/**\n * Converts an event map into one using EventShimCustomEvent's so the event type only needs to be specified once\n * Takes an event map such as EventSourceEventMap from https://github.com/mysticatea/event-target-shim/blob/HEAD/docs/reference.md#example-3\n * This lets us specify the EventMap as just { onEvent: Event } rather than { onEvent: Event<'onEvent'> }\n */\n//# sourceMappingURL=EventTargetShimUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass TimeoutError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isTimeout\", true);\n }\n}\nexport default TimeoutError;\n//# sourceMappingURL=TimeoutError.js.map","import CanceledPromiseError from \"./CanceledPromiseError.js\";\nimport TimeoutError from \"./TimeoutError.js\";\nexport class PromiseUtils {\n /**\n * Creates a promise that can be canceled by calling the `cancel` function\n * Pass an optional `cleanupFunc` to perform actions on the resolved item after promise is cancelled.\n * @param promise The item to resolve\n * @param cleanup Function to cleanup the resolved item after cancelation. Called after both this promise is cancelled and the wrapped item was resolved (order does not matter).\n */\n static makeCancelable(promise, cleanup) {\n var hasCanceled = false;\n var resolved;\n var rejectFn;\n var wrappedPromise = new Promise((resolve, reject) => {\n rejectFn = reject;\n Promise.resolve(promise).then(val => {\n if (hasCanceled) {\n if (cleanup) {\n cleanup(val);\n }\n } else {\n resolved = val;\n resolve(val);\n }\n }).catch(error => reject(error));\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrappedPromise.cancel = () => {\n hasCanceled = true;\n rejectFn(new CanceledPromiseError());\n if (resolved != null && cleanup) {\n cleanup(resolved);\n }\n };\n return wrappedPromise;\n }\n static isCanceled(error) {\n return error instanceof CanceledPromiseError;\n }\n static isTimedOut(error) {\n return error instanceof TimeoutError;\n }\n\n /**\n * Wrap a callback call in a Promise + setTimeout.\n * @param timeoutMs\n * @param callback\n */\n static withTimeout(timeoutMs, callback) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n try {\n resolve(callback());\n } catch (err) {\n reject(err);\n }\n }, timeoutMs);\n });\n }\n}\n//# sourceMappingURL=PromiseUtils.js.map","class TextUtils {\n /**\n * Joins a list of strings with a comma, keeping the oxford comma and adding \"and\" as appropriate.\n * Eg.\n * One\n * One and Two\n * One, Two, and Three\n * @param items The items to join in a list\n * @param conjunction Conjunction to use between the last two items\n */\n static join(items) {\n var conjunction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'and';\n if (items == null || items.length === 0) {\n return '';\n }\n if (items.length === 1) {\n return items[0];\n }\n if (items.length === 2) {\n return \"\".concat(items[0], \" \").concat(conjunction, \" \").concat(items[1]);\n }\n var itemText = items.slice(0, items.length - 1).join(', ');\n var lastItem = items[items.length - 1];\n return \"\".concat(itemText, \", \").concat(conjunction, \" \").concat(lastItem);\n }\n\n /**\n * Converts text to lower case, handling null if necessary and returning an empty string\n * @param text The text to convert to lower case\n * @param isNullAllowed True if a null string should return an empty string from this function. If false an error is thrown if null is passed in.\n */\n static toLower(text) {\n var isNullAllowed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (text == null) {\n if (isNullAllowed) {\n return '';\n }\n throw new Error('Null string passed in to TextUtils.toLower');\n }\n return text.toLowerCase();\n }\n\n /**\n *\n * @param a The string to sort\n * @param b Second string to sort\n * @param isAscending Whether to sort ascending or descending\n */\n static sort(a, b) {\n var isAscending = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (a < b) {\n return isAscending ? -1 : 1;\n }\n if (a > b) {\n return isAscending ? 1 : -1;\n }\n return 0;\n }\n}\nexport default TextUtils;\n//# sourceMappingURL=TextUtils.js.map","import { useContext } from 'react';\n\n/**\n * Fetch a given context or throw an error if it is null or undefined.\n * @param context Context to use.\n * @param message Message to throw if context is null or undefined.\n * @returns Context, or throws\n */\nexport function useContextOrThrow(context) {\n var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'No value available in context. Was code wrapped in a provider?';\n var value = useContext(context);\n if (value == null) {\n throw new Error(message);\n }\n return value;\n}\nexport default useContextOrThrow;\n//# sourceMappingURL=useContextOrThrow.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport function isPromise(value) {\n return value.then !== undefined;\n}\nclass ContextActionUtils {\n static disableAllActions() {\n ContextActionUtils.actionsDisabled = true;\n }\n static enableAllActions() {\n ContextActionUtils.actionsDisabled = false;\n }\n static isContextActionEvent(e) {\n return Array.isArray(e.contextActions);\n }\n\n /**\n * Compare two action items. Useful in Array.sort\n * @param a First context action to compare\n * @param b Second context action to compare\n */\n static compareActions(a, b) {\n if (a.group !== b.group) {\n var _a$group, _b$group;\n return ((_a$group = a.group) !== null && _a$group !== void 0 ? _a$group : 0) > ((_b$group = b.group) !== null && _b$group !== void 0 ? _b$group : 0) ? 1 : -1;\n }\n if (a.order !== b.order) {\n var _a$order, _b$order;\n return ((_a$order = a.order) !== null && _a$order !== void 0 ? _a$order : 0) > ((_b$order = b.order) !== null && _b$order !== void 0 ? _b$order : 0) ? 1 : -1;\n }\n if (a.title !== b.title) {\n var _a$title, _b$title;\n return ((_a$title = a.title) !== null && _a$title !== void 0 ? _a$title : '') > ((_b$title = b.title) !== null && _b$title !== void 0 ? _b$title : '') ? 1 : -1;\n }\n if (a !== b) {\n return a > b ? 1 : -1;\n }\n return 0;\n }\n\n /**\n *\n * @param actions The array of actions to sort\n */\n static sortActions(actions) {\n if (actions == null || !Array.isArray(actions)) {\n return [];\n }\n var sortedActions = actions.slice();\n sortedActions.sort(ContextActionUtils.compareActions);\n return sortedActions;\n }\n static isMacPlatform() {\n var {\n platform\n } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Retrieve the preferred modifier key based on the current platform\n */\n static getModifierKey() {\n if (ContextActionUtils.isMacPlatform()) {\n return 'metaKey';\n }\n return 'ctrlKey';\n }\n\n /**\n * Returns true if the modifier key for the current platform is down for the event (Ctrl for windows/linux, Command (meta) for mac)\n * @param event The event to get the meta key status from\n */\n static isModifierKeyDown(event) {\n var modifierKey = ContextActionUtils.getModifierKey();\n return event[modifierKey];\n }\n\n /**\n * Returns the menu items for the provided context actions, or empty array if none found.\n * @param actionsParam The actions to get menu items for\n * @param includePromises Whether or not to include promises in the returned menu items\n */\n\n // If ignoring promises, then the return type is narrowed\n\n static getMenuItems(actionsParam) {\n var includePromises = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var menuItems = [];\n var actions = actionsParam;\n if (!Array.isArray(actions)) {\n actions = [actions];\n }\n for (var i = 0; i < actions.length; i += 1) {\n var action = actions[i];\n var newMenuItems = void 0;\n if (typeof action === 'function') {\n newMenuItems = action();\n } else {\n newMenuItems = action;\n }\n if (newMenuItems != null) {\n if (newMenuItems instanceof Promise) {\n if (includePromises) {\n menuItems.push(newMenuItems);\n }\n } else if (Array.isArray(newMenuItems)) {\n menuItems = menuItems.concat(newMenuItems);\n } else {\n menuItems.push(newMenuItems);\n }\n }\n }\n menuItems = menuItems.filter(action => action.title !== undefined || action.then != null || action.menuElement);\n return menuItems;\n }\n\n /**\n * Returns the index of the next menu item in a list that doesn't have a disabled=true prop\n * @param startIndex the starting position for the iteration\n * @param delta the direction of travel, -1 or 1\n * @param menuItems an array of menuItems\n */\n static getNextMenuItem(startIndex, delta, menuItems) {\n var firstIndex = startIndex;\n if (firstIndex < 0 && delta < 0) {\n // if menu index is -1 and delta -1 manually set start point\n firstIndex = menuItems.length;\n }\n // find the next non disabled menu option, iterating the list only once\n for (var i = 1; i < menuItems.length + 1; i += 1) {\n var menuIndex = (firstIndex + delta * i + menuItems.length) % menuItems.length;\n var item = menuItems[menuIndex];\n if (!(item instanceof Promise) && item.disabled !== true) {\n return menuIndex;\n }\n }\n return startIndex;\n }\n}\n_defineProperty(ContextActionUtils, \"actionsDisabled\", false);\nexport default ContextActionUtils;\n//# sourceMappingURL=ContextActionUtils.js.map","import React from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar ContextMenuItem = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _menuItem$shortcutTex, _menuItem$shortcut;\n function handleMenuItemClick(e) {\n var {\n menuItem,\n onMenuItemClick\n } = props;\n onMenuItemClick(menuItem, e);\n }\n function handleMenuItemMouseMove(e) {\n var {\n menuItem,\n onMenuItemMouseMove\n } = props;\n onMenuItemMouseMove(menuItem, e);\n }\n function handleMenuItemContextMenu(e) {\n var {\n menuItem,\n onMenuItemContextMenu\n } = props;\n onMenuItemContextMenu(menuItem, e);\n }\n function renderCustomMenuElement(element, iconElement, displayShortcut) {\n // Don't pass forwardedProps if menuElement is a native DOM node\n if (typeof element.type === 'string') {\n return element;\n }\n var {\n closeMenu,\n menuItem,\n isKeyboardSelected,\n isMouseSelected,\n 'data-testid': dataTestId\n } = props;\n var forwardedProps = {\n menuItem,\n closeMenu,\n isKeyboardSelected,\n isMouseSelected,\n iconElement,\n displayShortcut,\n 'data-testid': dataTestId\n };\n return /*#__PURE__*/React.cloneElement(element, {\n forwardedProps\n });\n }\n var {\n children,\n menuItem,\n isKeyboardSelected = false,\n isMouseSelected = false,\n 'data-testid': dataTestId\n } = props;\n var displayShortcut = (_menuItem$shortcutTex = menuItem.shortcutText) !== null && _menuItem$shortcutTex !== void 0 ? _menuItem$shortcutTex : (_menuItem$shortcut = menuItem.shortcut) === null || _menuItem$shortcut === void 0 ? void 0 : _menuItem$shortcut.getDisplayText();\n var icon = null;\n if (menuItem.icon) {\n var menuItemIcon = menuItem.icon;\n if ( /*#__PURE__*/React.isValidElement(menuItemIcon)) {\n icon = menuItemIcon;\n } else {\n var style;\n if (menuItem.iconColor != null && (menuItem.disabled === undefined || !menuItem.disabled)) {\n style = {\n color: menuItem.iconColor\n };\n }\n icon = /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: menuItemIcon,\n style: style\n });\n }\n }\n var subMenuIndicator = null;\n var isSubMenuActive = Boolean(children);\n if (menuItem.actions) {\n subMenuIndicator = /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronRight\n });\n }\n var content = null;\n if (menuItem.menuElement) {\n content = /*#__PURE__*/_jsx(\"div\", {\n className: \"custom-menu-item\",\n onMouseMove: handleMenuItemMouseMove,\n children: renderCustomMenuElement(menuItem.menuElement, icon, displayShortcut)\n });\n } else {\n var _menuItem$description;\n var menuItemDisabled = menuItem.disabled;\n var iconHasOutline = menuItem.iconOutline;\n content = /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: classNames('btn-context-menu', {\n disabled: menuItemDisabled\n }, {\n active: (isSubMenuActive || isMouseSelected) && (menuItemDisabled === undefined || !menuItemDisabled)\n }, {\n 'keyboard-active': isKeyboardSelected && (menuItemDisabled === undefined || !menuItemDisabled)\n }),\n onClick: handleMenuItemClick,\n onMouseMove: handleMenuItemMouseMove,\n onContextMenu: handleMenuItemContextMenu,\n title: (_menuItem$description = menuItem.description) !== null && _menuItem$description !== void 0 ? _menuItem$description : '',\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"btn-context-menu-wrapper\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: classNames('icon', {\n outline: iconHasOutline\n }),\n children: icon\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"title\",\n children: menuItem.title\n }), displayShortcut !== undefined && /*#__PURE__*/_jsx(\"span\", {\n className: \"shortcut\",\n children: displayShortcut\n }), subMenuIndicator && /*#__PURE__*/_jsx(\"span\", {\n className: classNames('submenu-indicator', {\n disabled: menuItemDisabled\n }),\n children: subMenuIndicator\n })]\n })\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"context-menu-item\",\n ref: ref,\n \"data-testid\": dataTestId,\n children: [children, content]\n });\n});\nContextMenuItem.displayName = 'ContextMenuItem';\nContextMenuItem.defaultProps = {\n children: null,\n isKeyboardSelected: false,\n isMouseSelected: false,\n 'data-testid': undefined\n};\nexport default ContextMenuItem;\n//# sourceMappingURL=ContextMenuItem.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport ContextActionUtils from \"./ContextActionUtils.js\";\nimport ContextMenuItem from \"./ContextMenuItem.js\";\nimport LoadingSpinner from \"../LoadingSpinner.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ContextMenu');\n/** Do not use this class directly. Use ContextMenuRoot and ContextActions instead. */\nclass ContextMenu extends PureComponent {\n static handleContextMenu(e) {\n if (e.metaKey) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"oldFocus\", void 0);\n _defineProperty(this, \"activeSubMenuRef\", void 0);\n _defineProperty(this, \"subMenuTimer\", void 0);\n _defineProperty(this, \"rAF\", void 0);\n _defineProperty(this, \"initialPosition\", void 0);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseSubMenu = this.handleCloseSubMenu.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleMenuItemContextMenu = this.handleMenuItemContextMenu.bind(this);\n this.handleMenuItemMouseMove = this.handleMenuItemMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleWindowResize = this.handleWindowResize.bind(this);\n this.container = /*#__PURE__*/React.createRef();\n this.oldFocus = document.activeElement;\n this.activeSubMenuRef = /*#__PURE__*/React.createRef();\n this.subMenuTimer = 0;\n this.rAF = 0;\n this.initialPosition = {\n top: props.top,\n left: props.left\n };\n this.state = {\n menuItems: [],\n pendingItems: [],\n activeSubMenu: null,\n hasOverflow: false,\n subMenuTop: null,\n subMenuLeft: null,\n subMenuParentWidth: 0,\n subMenuParentHeight: 0,\n keyboardIndex: -1,\n mouseIndex: -1\n };\n }\n componentDidMount() {\n this.initMenu();\n this.verifyPosition();\n window.addEventListener('resize', this.handleWindowResize);\n\n // rAF is needed to wait for a submenus popper to be created before\n // attempting to set focus, however on a quick mount/unmount when\n // mousing past an item, the submenu could be unmounted before the\n // async rAF finishes, so it is cancelled in willUnmount()\n this.rAF = window.requestAnimationFrame(() => {\n var _this$container$curre;\n (_this$container$curre = this.container.current) === null || _this$container$curre === void 0 ? void 0 : _this$container$curre.focus();\n var {\n onMenuOpened\n } = this.props;\n onMenuOpened(this);\n });\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n actions\n } = this.props;\n var {\n activeSubMenu\n } = this.state;\n if (activeSubMenu !== prevState.activeSubMenu) {\n if (activeSubMenu == null) {\n var _this$container$curre2;\n // close sub menu, refocus parent menu\n (_this$container$curre2 = this.container.current) === null || _this$container$curre2 === void 0 ? void 0 : _this$container$curre2.focus();\n } else {\n // open sub menu, set its initial position\n this.setActiveSubMenuPosition();\n }\n }\n if (prevProps.actions !== actions) {\n this.initMenu();\n if (this.container.current == null || !this.container.current.contains(document.activeElement)) {\n var _this$container$curre3;\n (_this$container$curre3 = this.container.current) === null || _this$container$curre3 === void 0 ? void 0 : _this$container$curre3.focus();\n }\n }\n this.verifyPosition();\n }\n componentWillUnmount() {\n this.cancelPromises();\n window.removeEventListener('resize', this.handleWindowResize);\n cancelAnimationFrame(this.rAF);\n }\n getKeyboardIndex() {\n var {\n options\n } = this.props;\n if (options.separateKeyboardMouse !== undefined && options.separateKeyboardMouse) {\n var {\n keyboardIndex\n } = this.state;\n return keyboardIndex;\n }\n return this.getMouseIndex();\n }\n setKeyboardIndex(index) {\n var {\n options\n } = this.props;\n if (options.separateKeyboardMouse !== undefined && options.separateKeyboardMouse) {\n this.setState({\n keyboardIndex: index\n });\n } else {\n this.setMouseIndex(index);\n }\n }\n getMouseIndex() {\n var {\n mouseIndex\n } = this.state;\n return mouseIndex;\n }\n setMouseIndex(index) {\n this.setState({\n mouseIndex: index\n });\n }\n initMenu() {\n // cancel any pending close and promises\n this.cancelPromises();\n cancelAnimationFrame(this.rAF);\n var {\n options\n } = this.props;\n var keyboardIndex = options.initialKeyboardIndex;\n if (keyboardIndex === undefined) {\n keyboardIndex = -1;\n }\n var {\n actions\n } = this.props;\n var menuItems = ContextActionUtils.getMenuItems(actions);\n var nonPromiseItems = [];\n for (var i = menuItems.length - 1; i >= 0; i -= 1) {\n var menuItem = menuItems[i];\n if (menuItem instanceof Promise) {\n this.initMenuPromise(menuItem);\n } else {\n nonPromiseItems.push(menuItem);\n }\n }\n this.setState({\n mouseIndex: -1,\n keyboardIndex,\n activeSubMenu: null,\n menuItems: ContextActionUtils.sortActions(nonPromiseItems)\n });\n }\n initMenuPromise(promise) {\n // make all promises cancellable\n var cancellablePromise = PromiseUtils.makeCancelable(promise);\n this.setState(state => ({\n pendingItems: state.pendingItems.concat(cancellablePromise)\n }));\n cancellablePromise.then(resolvedMenuItems => {\n this.setState(state => {\n var index = state.pendingItems.indexOf(cancellablePromise);\n if (index >= 0) {\n var pendingItems = state.pendingItems.slice();\n pendingItems.splice(index, 1);\n return {\n menuItems: ContextActionUtils.sortActions(state.menuItems.concat(resolvedMenuItems)),\n pendingItems\n };\n }\n // This item is stale, don't update the menu\n return null;\n });\n }, error => {\n if (PromiseUtils.isCanceled(error)) {\n return; // Canceled promise is ignored\n }\n\n // remove failed item from pending list\n this.setState(state => {\n var index = state.pendingItems.indexOf(cancellablePromise);\n if (index >= 0) {\n var pendingItems = state.pendingItems.slice();\n pendingItems.splice(index, 1);\n return {\n pendingItems\n };\n }\n return null;\n });\n\n // Log the error\n log.error(error);\n });\n }\n cancelPromises() {\n var {\n pendingItems\n } = this.state;\n pendingItems.map(item => item.cancel());\n }\n\n /**\n * Sets the unverfied start position of a submenu. Submenu then self-verfies\n * its own position and potentially reports back a new position.\n */\n setActiveSubMenuPosition() {\n if (this.activeSubMenuRef.current === null) return;\n var parentRect = this.activeSubMenuRef.current.getBoundingClientRect();\n\n // intentionally rect.right, we want the sub menu to start at the right edge of the current menu\n this.setState({\n subMenuTop: parentRect.top,\n subMenuLeft: parentRect.right,\n subMenuParentHeight: parentRect.height,\n subMenuParentWidth: parentRect.width\n });\n }\n\n /**\n * Verifies the position of this menu in relation to the parent to make sure it's on screen.\n * Will update the top left state (updatePosition) if necessary (causing a re-render)\n * By default it tries to top-align with parent, at the right side of the parent.\n * Because we aren't a native context menu and can't escape window bounds, we also do\n * somethings to better fit on screen, such as the \"nudge\" offset position, and further\n * allow overflow scrolling for large menus in a small window.\n */\n verifyPosition() {\n var _this$container$curre4, _this$container$curre5, _this$container$curre6, _this$container$curre7;\n var {\n options,\n updatePosition,\n subMenuParentWidth,\n subMenuParentHeight,\n top: oldTop,\n left: oldLeft\n } = this.props;\n if (!this.container.current || options.doNotVerifyPosition != null && options.doNotVerifyPosition) {\n return;\n }\n\n // initial position is used rather than current position,\n // as the number of menu items can change (actions can bubble)\n // and menu should always be positioned relative to spawn point\n var {\n top,\n left\n } = this.initialPosition;\n var {\n width,\n height\n } = (_this$container$curre4 = (_this$container$curre5 = this.container.current) === null || _this$container$curre5 === void 0 ? void 0 : _this$container$curre5.getBoundingClientRect()) !== null && _this$container$curre4 !== void 0 ? _this$container$curre4 : {\n width: 0,\n height: 0\n };\n var hasOverflow = ((_this$container$curre6 = (_this$container$curre7 = this.container.current) === null || _this$container$curre7 === void 0 ? void 0 : _this$container$curre7.scrollHeight) !== null && _this$container$curre6 !== void 0 ? _this$container$curre6 : 0) > window.innerHeight;\n if (height === 0 || width === 0) {\n // We don't have a height or width yet, don't bother doing anything\n return;\n }\n\n // does it fit below?\n if (top + height > window.innerHeight) {\n // can it be flipped to above? include offset if submenu (defaults to 0 if not submenu)\n if (top - height - subMenuParentHeight > 0) {\n // flip like a native menu would\n top -= height - subMenuParentHeight;\n } else {\n // still doesnt fit? okay, position at bottom edge\n top = window.innerHeight - height;\n }\n }\n if (left + width > window.innerWidth) {\n // less picky about left right positioning, just keep it going off to right\n left = left - width - subMenuParentWidth;\n }\n if (oldLeft !== left || oldTop !== top) {\n // parent owns positioning as single source of truth, ask to update props\n this.setState({\n hasOverflow\n });\n updatePosition(top, left);\n }\n }\n\n // since window resize doesn't trigger blur, listen and close the menu\n handleWindowResize() {\n if (!this.container.current) {\n return;\n }\n this.closeMenu(true);\n }\n handleBlur(e) {\n if (!this.container.current) {\n log.warn('Container is null!');\n return;\n }\n if (!this.container.current.contains(e.relatedTarget)) {\n var element = e.relatedTarget;\n var isContextMenuChild = false;\n while (element && !isContextMenuChild) {\n isContextMenuChild = element.hasAttribute('data-dh-context-menu');\n element = element.parentElement;\n }\n if (!isContextMenuChild) {\n // close all submenus on blur\n this.closeMenu(true);\n }\n }\n }\n\n /** Returns whether the specified key should remove the menu. Depends on the side the parent is on. */\n isEscapeKey(key) {\n var {\n left\n } = this.props;\n return key === 'Escape' || left < 0 && key === 'ArrowRight' || key === 'ArrowLeft';\n }\n handleKeyDown(e) {\n var {\n menuItems\n } = this.state;\n var oldFocus = this.getKeyboardIndex();\n var newFocus = oldFocus;\n var openSubMenu = false;\n if (e.key === 'Enter' || e.key === ' ') {\n if (oldFocus >= 0 && oldFocus < menuItems.length) {\n this.handleMenuItemClick(menuItems[oldFocus], e);\n }\n return;\n }\n if (e.key === 'ArrowRight') {\n if (oldFocus >= 0 && oldFocus <= menuItems.length) {\n openSubMenu = true;\n } else {\n newFocus = 0;\n }\n } else if (this.isEscapeKey(e.key)) {\n newFocus = null;\n } else if (e.key === 'ArrowUp' || e.shiftKey && e.key === 'Tab') {\n newFocus = ContextActionUtils.getNextMenuItem(newFocus, -1, menuItems);\n } else if (e.key === 'ArrowDown' || e.key === 'Tab') {\n newFocus = ContextActionUtils.getNextMenuItem(newFocus, 1, menuItems);\n }\n if (openSubMenu) {\n this.openSubMenu(oldFocus);\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n if (oldFocus !== newFocus) {\n if (newFocus !== null) {\n this.setKeyboardIndex(newFocus);\n } else {\n this.closeMenu();\n if (this.oldFocus instanceof HTMLElement) {\n this.oldFocus.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n }\n }\n openSubMenu(index) {\n var {\n menuItems,\n activeSubMenu\n } = this.state;\n var newSubMenu = menuItems[index].actions ? index : null;\n if (activeSubMenu === newSubMenu) return;\n this.setState({\n activeSubMenu: newSubMenu,\n subMenuTop: null,\n subMenuLeft: null\n });\n }\n closeMenu() {\n var closeAll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var {\n closeMenu,\n onMenuClosed\n } = this.props;\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n closeMenu(closeAll);\n onMenuClosed(this);\n });\n }\n closeSubMenu() {\n this.setState({\n activeSubMenu: null\n });\n }\n handleCloseSubMenu(closeAllMenus) {\n if (closeAllMenus) {\n this.closeMenu(true);\n } else {\n this.closeSubMenu();\n }\n }\n handleMenuItemClick(menuItem, e) {\n e.preventDefault();\n e.stopPropagation();\n var {\n menuItems\n } = this.state;\n if (menuItem != null && (menuItem.disabled === undefined || !menuItem.disabled)) {\n if (menuItem.actions != null) {\n this.openSubMenu(menuItems.indexOf(menuItem));\n } else if (menuItem.action != null) {\n menuItem.action(e.nativeEvent);\n this.closeMenu(true);\n }\n }\n }\n handleMenuItemContextMenu(menuItem, e) {\n if (e.metaKey) {\n return;\n }\n this.handleMenuItemClick(menuItem, e);\n }\n handleMenuItemMouseMove(menuItem) {\n var {\n menuItems\n } = this.state;\n var focusIndex = menuItems.indexOf(menuItem);\n this.setMouseIndex(focusIndex);\n if (focusIndex >= 0 && focusIndex < menuItems.length && (menuItem.disabled === undefined || !menuItem.disabled)) {\n this.openSubMenu(focusIndex);\n }\n }\n handleMouseLeave() {\n this.setMouseIndex(-1);\n }\n render() {\n var menuItemElements = [];\n var {\n top,\n left\n } = this.props;\n var {\n activeSubMenu,\n hasOverflow,\n keyboardIndex,\n menuItems,\n mouseIndex,\n pendingItems,\n subMenuTop,\n subMenuLeft,\n subMenuParentWidth,\n subMenuParentHeight\n } = this.state;\n for (var i = 0; i < menuItems.length; i += 1) {\n var menuItem = menuItems[i];\n if (i > 0 && menuItem.group !== menuItems[i - 1].group) {\n menuItemElements.push( /*#__PURE__*/_jsx(\"hr\", {}, \"\".concat(i, \".separator\")));\n }\n var menuItemElement = /*#__PURE__*/_jsx(ContextMenuItem, {\n ref: activeSubMenu === i ? this.activeSubMenuRef : null,\n isKeyboardSelected: keyboardIndex === i,\n isMouseSelected: mouseIndex === i,\n menuItem: menuItem,\n closeMenu: this.handleCloseSubMenu,\n onMenuItemClick: this.handleMenuItemClick,\n onMenuItemMouseMove: this.handleMenuItemMouseMove,\n onMenuItemContextMenu: this.handleMenuItemContextMenu\n }, i);\n menuItemElements.push(menuItemElement);\n }\n var pendingElement = null;\n if (pendingItems.length > 0) {\n pendingElement = /*#__PURE__*/_jsx(\"div\", {\n className: \"loading\",\n children: /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n })\n });\n }\n var {\n menuStyle,\n 'data-testid': dataTestId\n } = this.props;\n\n // don't show submenu until it has an position initialized\n var showSubmenu = activeSubMenu !== null && subMenuTop !== null && subMenuLeft !== null;\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: classNames({\n 'has-overflow': hasOverflow\n }, 'context-menu-container'),\n style: _objectSpread({\n top,\n left\n }, menuStyle),\n ref: this.container,\n \"data-dh-context-menu\": true,\n onBlur: this.handleBlur,\n onKeyDown: this.handleKeyDown,\n onMouseLeave: this.handleMouseLeave,\n onContextMenu: ContextMenu.handleContextMenu,\n role: \"menuitem\",\n tabIndex: 0,\n \"data-testid\": dataTestId,\n children: [menuItemElements, pendingElement]\n }), showSubmenu && activeSubMenu !== null && subMenuTop !== null && subMenuLeft !== null && /*#__PURE__*/_jsx(ContextMenu, {\n actions: menuItems[activeSubMenu].actions || [],\n closeMenu: this.handleCloseSubMenu,\n top: subMenuTop,\n left: subMenuLeft,\n updatePosition: (verifiedTop, verifiedLeft) => {\n this.setState({\n subMenuTop: verifiedTop,\n subMenuLeft: verifiedLeft\n });\n },\n subMenuParentWidth: subMenuParentWidth,\n subMenuParentHeight: subMenuParentHeight\n }, \"sub-\".concat(activeSubMenu))]\n });\n }\n}\n_defineProperty(ContextMenu, \"defaultProps\", {\n subMenuParentWidth: 0,\n subMenuParentHeight: 0,\n closeMenu() {\n // no-op\n },\n onMenuOpened() {\n // no-op\n },\n onMenuClosed() {\n // no-op\n },\n options: {},\n menuStyle: {},\n 'data-testid': undefined\n});\nexport default ContextMenu;\n//# sourceMappingURL=ContextMenu.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport ContextMenu from \"./ContextMenu.js\";\nimport ContextActionUtils from \"./ContextActionUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Put at your root container, any contextmenu events that are unhandled in the root container will be handled by this\n */\nclass ContextMenuRoot extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"openMenu\", void 0);\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.container = /*#__PURE__*/React.createRef();\n this.openMenu = /*#__PURE__*/React.createRef();\n this.state = {\n actions: null,\n left: 0,\n top: 0\n };\n }\n componentDidMount() {\n var _this$container$curre;\n if ((_this$container$curre = this.container.current) !== null && _this$container$curre !== void 0 && _this$container$curre.parentElement) {\n this.container.current.parentElement.addEventListener('contextmenu', this.handleContextMenu);\n }\n }\n componentWillUnmount() {\n var _this$container$curre2;\n if ((_this$container$curre2 = this.container.current) !== null && _this$container$curre2 !== void 0 && _this$container$curre2.parentElement) {\n this.container.current.parentElement.removeEventListener('contextmenu', this.handleContextMenu);\n }\n }\n handleContextMenu(e) {\n if (!this.container.current) {\n return;\n }\n var parentRect = this.container.current.getBoundingClientRect();\n var top = e.clientY - parentRect.top;\n var left = e.clientX - parentRect.left;\n var {\n actions\n } = this.state;\n\n // Context menu is open and user clicked on the context-root blocking layer\n // Mac and Linux appear to trigger contextmenu events on mousedown vs. mouseup on Windows\n // Mouseup on Windows triggers blur before contextmenu which effectively does what this path does\n if (actions != null && e.target === this.container.current) {\n // re-emit right clicks that hit the context-root blocking layer\n // while we already have a custom context menu open\n e.preventDefault();\n\n // Set actions to null removes the menu\n // That allows a new menu to be opened on a different element so initial position is set properly\n // Otherwise the instance of this menu may be reused\n // A new contextmenu event is triggered on the element at the location the user clicked on the blocking layer\n this.setState({\n actions: null\n }, () => {\n var element = document.elementFromPoint(left, top); // x y\n\n var mouseEvent = new MouseEvent('contextmenu', {\n clientX: e.clientX,\n clientY: e.clientY,\n bubbles: true,\n cancelable: true\n });\n element === null || element === void 0 ? void 0 : element.dispatchEvent(mouseEvent);\n });\n return;\n }\n if (!ContextActionUtils.isContextActionEvent(e)) {\n // Open native menu if no custom context actions\n return;\n }\n if (e.metaKey || e.ctrlKey) {\n // debug escape hatch to native menu\n return;\n }\n var contextActions = ContextActionUtils.getMenuItems(e.contextActions);\n if (contextActions.length === 0) {\n // No actions after filtering. Use native menu\n return;\n }\n\n // new clicks, set actions\n e.preventDefault();\n this.setState({\n actions: contextActions,\n top,\n left\n });\n }\n handleMenuClose(menu) {\n if (menu === this.openMenu.current) {\n this.setState({\n actions: null\n });\n }\n }\n render() {\n var menu = null;\n var {\n 'data-testid': dataTestId\n } = this.props;\n var {\n actions,\n top,\n left\n } = this.state;\n if (actions) {\n menu = /*#__PURE__*/_jsx(ContextMenu, {\n ref: this.openMenu,\n actions: actions,\n onMenuClosed: this.handleMenuClose,\n top: top,\n left: left,\n updatePosition: (verifiedTop, verifiedLeft) => {\n this.setState({\n top: verifiedTop,\n left: verifiedLeft\n });\n },\n \"data-testid\": dataTestId\n });\n }\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames('context-menu-root', {\n active: actions\n }),\n ref: this.container,\n children: menu\n });\n }\n}\nexport default ContextMenuRoot;\n//# sourceMappingURL=ContextMenuRoot.js.map","import { TimeoutError } from '@deephaven/utils';\n\n/** Default timeout for fetching a variable definition */\nexport var FETCH_TIMEOUT = 10000;\n\n/**\n * Fetch the definition for a variable given a connection. Subscribes to field updates and triggers when the variable is found.\n * @param connection Connection to get the variable from\n * @param name Name of the definition to fetch\n * @param timeout Timeout for the fetch\n * @returns Promise the resolves to the variable definition if found, or rejects if there's an error or the timeout has exceeded\n */\nexport function fetchVariableDefinition(connection, name) {\n var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : FETCH_TIMEOUT;\n return new Promise((resolve, reject) => {\n var removeListener;\n var timeoutId = setTimeout(() => {\n var _removeListener;\n (_removeListener = removeListener) === null || _removeListener === void 0 ? void 0 : _removeListener();\n reject(new TimeoutError(\"Timeout looking for variable \".concat(name)));\n }, timeout);\n\n /**\n * Checks if the variable we're looking for is in the changes, and resolves the promise if it does\n * @param changes Variables changes that have occurred\n */\n function handleFieldUpdates(changes) {\n var _removeListener2;\n var definition = changes.created.find(def => def.title === name);\n clearTimeout(timeoutId);\n (_removeListener2 = removeListener) === null || _removeListener2 === void 0 ? void 0 : _removeListener2();\n if (definition != null) {\n resolve(definition);\n } else {\n reject(new Error(\"Variable \".concat(name, \" not found\")));\n }\n }\n removeListener = connection.subscribeToFieldUpdates(handleFieldUpdates);\n });\n}\n//# sourceMappingURL=ConnectionUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n/**\n * Default column data formatter. Just interpolates the value as a string and returns.\n * Extend this class and register with TableUtils to make use of it.\n */\n\nexport class TableColumnFormatter {\n /**\n * Validates format object\n * @param dh JSAPI instance\n * @param format Format object\n * @returns true for valid object\n */\n static isValid(dh, format) {\n return true;\n }\n\n /**\n * Check if the given formats match\n * @param formatA format object to check\n * @param formatB format object to check\n * @returns True if the formats match\n */\n static isSameFormat(formatA, formatB) {\n throw new Error('isSameFormat not implemented');\n }\n\n /**\n * Create and return a Format object\n * @param label The label of the format object\n * @param formatString Format string to use for the format\n * @param type The type of column to use for this format\n * @returns A format object\n */\n static makeFormat(label, formatString, type) {\n return {\n label,\n formatString,\n type\n };\n }\n\n /**\n * @param value The value to format\n * @param format Optional format object with value transformation options\n * @returns String the formatted text string of the value passed in.\n */\n format(value, format) {\n return '';\n }\n}\n_defineProperty(TableColumnFormatter, \"TYPE_GLOBAL\", 'type-global');\n_defineProperty(TableColumnFormatter, \"TYPE_CONTEXT_PRESET\", 'type-context-preset');\n_defineProperty(TableColumnFormatter, \"TYPE_CONTEXT_CUSTOM\", 'type-context-custom');\nexport default TableColumnFormatter;\n//# sourceMappingURL=TableColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\n/** Column formatter for booleans */\nclass BooleanColumnFormatter extends TableColumnFormatter {\n format(value) {\n switch (value) {\n case 1:\n case true:\n return 'true';\n case 0:\n case false:\n return 'false';\n default:\n return '';\n }\n }\n}\nexport default BooleanColumnFormatter;\n//# sourceMappingURL=BooleanColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\n/** Column formatter for chars */\nclass CharColumnFormatter extends TableColumnFormatter {\n format(value) {\n return String.fromCharCode(value);\n }\n}\nexport default CharColumnFormatter;\n//# sourceMappingURL=CharColumnFormatter.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport Log from '@deephaven/log';\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\nvar log = Log.module('DateTimeColumnFormatter');\nexport class DateTimeColumnFormatter extends TableColumnFormatter {\n /**\n * Validates format object\n * @param dh JSAPI instance\n * @param format Format object\n * @returns true for valid object\n */\n static isValid(dh, format) {\n try {\n dh.i18n.DateTimeFormat.format(format.formatString, new Date());\n return true;\n } catch (e) {\n return false;\n }\n }\n static makeFormat(label, formatString) {\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : TableColumnFormatter.TYPE_CONTEXT_PRESET;\n return {\n label,\n formatString,\n type\n };\n }\n\n /**\n * Check if the given formats match\n * @param formatA format object to check\n * @param formatB format object to check\n * @returns True if the formats match\n */\n static isSameFormat(formatA, formatB) {\n return formatA === formatB || formatA !== null && formatB !== null && formatA.type === formatB.type && formatA.formatString === formatB.formatString;\n }\n static makeGlobalFormatStringMap(showTimeZone, showTSeparator) {\n var separator = showTSeparator ? \"'T'\" : ' ';\n var tz = showTimeZone ? ' z' : '';\n return new Map([['yyyy-MM-dd HH:mm:ss', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss\").concat(tz)], ['yyyy-MM-dd HH:mm:ss.SSS', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss.SSS\").concat(tz)], ['yyyy-MM-dd HH:mm:ss.SSSSSSSSS', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss.SSSSSSSSS\").concat(tz)]]);\n }\n static getGlobalFormats(showTimeZone, showTSeparator) {\n var formatStringMap = DateTimeColumnFormatter.makeGlobalFormatStringMap(showTimeZone, showTSeparator);\n return [...formatStringMap.keys()];\n }\n static makeFormatStringMap(showTimeZone, showTSeparator) {\n var separator = showTSeparator !== undefined && showTSeparator ? \"'T'\" : ' ';\n var tz = showTimeZone !== undefined && showTimeZone ? ' z' : '';\n return new Map([['yyyy-MM-dd', \"yyyy-MM-dd\".concat(tz)], ['MM-dd-yyyy', \"MM-dd-yyyy\".concat(tz)], ['HH:mm:ss', \"HH:mm:ss\".concat(tz)], ['HH:mm:ss.SSS', \"HH:mm:ss.SSS\".concat(tz)], ['HH:mm:ss.SSSSSSSSS', \"HH:mm:ss.SSSSSSSSS\".concat(tz)], ['yyyy-MM-dd HH:mm:ss', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss\").concat(tz)], ['yyyy-MM-dd HH:mm:ss.SSS', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss.SSS\").concat(tz)], ['yyyy-MM-dd HH:mm:ss.SSSSSSSSS', \"yyyy-MM-dd\".concat(separator, \"HH:mm:ss.SSSSSSSSS\").concat(tz)]]);\n }\n static getFormats(showTimeZone, showTSeparator) {\n var formatStringMap = DateTimeColumnFormatter.makeFormatStringMap(showTimeZone, showTSeparator);\n return [...formatStringMap.keys()];\n }\n constructor(dh) {\n var {\n timeZone: timeZoneParam = '',\n showTimeZone = true,\n showTSeparator = false,\n defaultDateTimeFormatString = DateTimeColumnFormatter.DEFAULT_DATETIME_FORMAT_STRING\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"dhTimeZone\", void 0);\n _defineProperty(this, \"defaultDateTimeFormatString\", void 0);\n _defineProperty(this, \"showTimeZone\", void 0);\n _defineProperty(this, \"showTSeparator\", void 0);\n _defineProperty(this, \"formatStringMap\", void 0);\n var timeZone = timeZoneParam || DateTimeColumnFormatter.DEFAULT_TIME_ZONE_ID;\n try {\n this.dhTimeZone = dh.i18n.TimeZone.getTimeZone(timeZone);\n } catch (e) {\n log.error('Unsupported time zone id', timeZone);\n this.dhTimeZone = dh.i18n.TimeZone.getTimeZone(DateTimeColumnFormatter.DEFAULT_TIME_ZONE_ID);\n }\n this.dh = dh;\n this.defaultDateTimeFormatString = defaultDateTimeFormatString;\n this.showTimeZone = showTimeZone;\n this.showTSeparator = showTSeparator;\n this.formatStringMap = DateTimeColumnFormatter.makeFormatStringMap(showTimeZone, showTSeparator);\n }\n getEffectiveFormatString(baseFormatString) {\n var _this$formatStringMap;\n return (_this$formatStringMap = this.formatStringMap.get(baseFormatString)) !== null && _this$formatStringMap !== void 0 ? _this$formatStringMap : baseFormatString;\n }\n format(value) {\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var baseFormatString = format.formatString != null && format.formatString !== '' ? format.formatString : this.defaultDateTimeFormatString;\n var formatString = this.getEffectiveFormatString(baseFormatString);\n try {\n return this.dh.i18n.DateTimeFormat.format(formatString, value, this.dhTimeZone);\n } catch (e) {\n log.error('Invalid format arguments');\n }\n return '';\n }\n}\n_defineProperty(DateTimeColumnFormatter, \"DEFAULT_DATETIME_FORMAT_STRING\", 'yyyy-MM-dd HH:mm:ss.SSS');\n_defineProperty(DateTimeColumnFormatter, \"DEFAULT_TIME_ZONE_ID\", 'America/New_York');\nexport default DateTimeColumnFormatter;\n//# sourceMappingURL=DateTimeColumnFormatter.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport Log from '@deephaven/log';\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\nvar log = Log.module('DecimalColumnFormatter');\nexport class DecimalColumnFormatter extends TableColumnFormatter {\n /**\n * Validates format object\n * @param dh JSAPI instance\n * @param format Format object\n * @returns true for valid object\n */\n static isValid(dh, format) {\n try {\n dh.i18n.NumberFormat.format(format.formatString, 0);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Create a DecimalColumnFormat object with the parameters specified\n * @param label Label for the format\n * @param formatString Format string for the format\n * @param multiplier Optional multiplier for the formatter\n * @param type Type of format created\n * @returns DecimalColumnFormat object\n */\n static makeFormat(label, formatString) {\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : TableColumnFormatter.TYPE_CONTEXT_PRESET;\n var multiplier = arguments.length > 3 ? arguments[3] : undefined;\n return {\n label,\n type,\n formatString,\n multiplier\n };\n }\n\n /**\n * Convenient function to create a DecimalFormatObject with Preset type set\n * @param label Label for this format object\n * @param formatString Format string to use\n * @param multiplier Multiplier to use\n * @returns DecimalColumnFormat object\n */\n static makePresetFormat(label) {\n var formatString = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var multiplier = arguments.length > 2 ? arguments[2] : undefined;\n return DecimalColumnFormatter.makeFormat(label, formatString, TableColumnFormatter.TYPE_CONTEXT_PRESET, multiplier);\n }\n\n /**\n * Convenient function to create a DecimalFormatObject with a default 'Custom Format' label and Custom type\n * @param formatString Format string to use\n * @param multiplier Multiplier to use\n * @returns DecimalColumnFormat object\n */\n static makeCustomFormat() {\n var formatString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var multiplier = arguments.length > 1 ? arguments[1] : undefined;\n return DecimalColumnFormatter.makeFormat('Custom Format', formatString, TableColumnFormatter.TYPE_CONTEXT_CUSTOM, multiplier);\n }\n /**\n * Check if the given formats match\n * @param formatA format object to check\n * @param formatB format object to check\n * @returns True if the formats match\n */\n static isSameFormat(formatA, formatB) {\n return formatA === formatB || formatA != null && formatB != null && formatA.type === formatB.type && formatA.formatString === formatB.formatString && formatA.multiplier === formatB.multiplier;\n }\n constructor(dh) {\n var {\n defaultFormatString = DecimalColumnFormatter.DEFAULT_FORMAT_STRING\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n _defineProperty(this, \"defaultFormatString\", void 0);\n _defineProperty(this, \"dh\", void 0);\n this.dh = dh;\n this.defaultFormatString = defaultFormatString;\n }\n\n /**\n * Format a value with the provided format object\n * @param valueParam Value to format\n * @param format Format object\n * @returns Formatted string\n */\n format(valueParam) {\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var formatString = format.formatString != null && format.formatString !== '' ? format.formatString : this.defaultFormatString;\n var value = format.multiplier != null && format.multiplier !== 0 ? valueParam * format.multiplier : valueParam;\n try {\n return this.dh.i18n.NumberFormat.format(formatString, value);\n } catch (e) {\n log.error('Invalid format arguments');\n }\n return '';\n }\n}\n_defineProperty(DecimalColumnFormatter, \"DEFAULT_FORMAT_STRING\", '###,##0.0000');\n_defineProperty(DecimalColumnFormatter, \"FORMAT_PERCENT\", DecimalColumnFormatter.makePresetFormat('Percent', '##0.00%'));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_BASIS_POINTS\", DecimalColumnFormatter.makePresetFormat('Basis Points', '###,##0 bp', 10000));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_MILLIONS\", DecimalColumnFormatter.makePresetFormat('Millions', '###,##0.000 mm', 0.000001));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_SCIENTIFIC_NOTATION\", DecimalColumnFormatter.makePresetFormat('Scientific Notation', '0.0000E0'));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_ROUND\", DecimalColumnFormatter.makePresetFormat('Round', '###,##0'));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_ROUND_TWO_DECIMALS\", DecimalColumnFormatter.makePresetFormat('0.00', '###,##0.00'));\n_defineProperty(DecimalColumnFormatter, \"FORMAT_ROUND_FOUR_DECIMALS\", DecimalColumnFormatter.makePresetFormat('0.0000', '###,##0.0000'));\nexport default DecimalColumnFormatter;\n//# sourceMappingURL=DecimalColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\nclass DefaultColumnFormatter extends TableColumnFormatter {\n format(value) {\n return \"\".concat(value);\n }\n}\nexport default DefaultColumnFormatter;\n//# sourceMappingURL=DefaultColumnFormatter.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport Log from '@deephaven/log';\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\nvar log = Log.module('IntegerColumnFormatter');\n/** Column formatter for integers/whole numbers */\nexport class IntegerColumnFormatter extends TableColumnFormatter {\n /**\n * Validates format object\n * @param dh JSAPI instance\n * @param format Format object\n * @returns true for valid object\n */\n static isValid(dh, format) {\n try {\n dh.i18n.NumberFormat.format(format.formatString, 0);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Create an IntegerColumnFormat object with the parameters specified\n * @param label Label for the format\n * @param formatString Format string for the format\n * @param multiplier Optional multiplier for the formatter\n * @param type Type of format created\n * @returns IntegerColumnFormat object\n */\n static makeFormat(label, formatString) {\n var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : TableColumnFormatter.TYPE_CONTEXT_PRESET;\n var multiplier = arguments.length > 3 ? arguments[3] : undefined;\n return {\n label,\n type,\n formatString,\n multiplier\n };\n }\n\n /**\n * Convenient function to create a IntegerFormatObject with Preset type set\n * @param label Label for this format object\n * @param formatString Format string to use\n * @param multiplier Multiplier to use\n * @returns IntegerColumnFormat object\n */\n static makePresetFormat(label) {\n var formatString = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var multiplier = arguments.length > 2 ? arguments[2] : undefined;\n return IntegerColumnFormatter.makeFormat(label, formatString, TableColumnFormatter.TYPE_CONTEXT_PRESET, multiplier);\n }\n\n /**\n * Convenient function to create a IntegerFormatObject with a default 'Custom Format' label and Custom type\n * @param formatString Format string to use\n * @param multiplier Multiplier to use\n * @returns IntegerColumnFormat object\n */\n static makeCustomFormat() {\n var formatString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var multiplier = arguments.length > 1 ? arguments[1] : undefined;\n return IntegerColumnFormatter.makeFormat('Custom Format', formatString, TableColumnFormatter.TYPE_CONTEXT_CUSTOM, multiplier);\n }\n\n /**\n * Check if the given formats match\n * @param formatA format object to check\n * @param formatB format object to check\n * @returns True if the formats match\n */\n static isSameFormat(formatA, formatB) {\n return formatA === formatB || formatA != null && formatB != null && formatA.type === formatB.type && formatA.formatString === formatB.formatString && formatA.multiplier === formatB.multiplier;\n }\n constructor(dh) {\n var {\n defaultFormatString = IntegerColumnFormatter.DEFAULT_FORMAT_STRING\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"defaultFormatString\", void 0);\n this.dh = dh;\n this.defaultFormatString = defaultFormatString;\n }\n\n /**\n * Format a value with the provided format object\n * @param valueParam Value to format\n * @param format Format object\n * @returns Formatted string\n */\n format(valueParam) {\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var formatString = format.formatString != null && format.formatString !== '' ? format.formatString : this.defaultFormatString;\n var value = format.multiplier != null && format.multiplier !== 0 ? valueParam * format.multiplier : valueParam;\n try {\n return this.dh.i18n.NumberFormat.format(formatString, value);\n } catch (e) {\n log.error('Invalid format arguments');\n }\n return '';\n }\n}\n_defineProperty(IntegerColumnFormatter, \"DEFAULT_FORMAT_STRING\", '###,##0');\n_defineProperty(IntegerColumnFormatter, \"FORMAT_MILLIONS\", IntegerColumnFormatter.makePresetFormat('Millions', '###,##0.000 mm', 0.000001));\n_defineProperty(IntegerColumnFormatter, \"FORMAT_SCIENTIFIC_NOTATION\", IntegerColumnFormatter.makePresetFormat('Scientific Notation', '0.0000E0'));\nexport default IntegerColumnFormatter;\n//# sourceMappingURL=IntegerColumnFormatter.js.map","/* eslint class-methods-use-this: \"off\" */\nimport TableColumnFormatter from \"./TableColumnFormatter.js\";\n/** Column formatter for strings */\nexport class StringColumnFormatter extends TableColumnFormatter {\n format(value) {\n return value;\n }\n}\nexport default StringColumnFormatter;\n//# sourceMappingURL=StringColumnFormatter.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport class DateUtils {\n /**\n *\n * @param timeZone The time zone to parse this time in. E.g. America/New_York\n * @param year The year for the date\n * @param month The month, starting at 0\n * @param day The day, starting at 1\n * @param hour The hours\n * @param minute The minutes\n * @param second The seconds\n * @param ns The nanoseconds\n */\n static makeDateWrapper(dh, timeZone, year) {\n var month = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var day = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n var hour = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n var minute = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var second = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 0;\n var ns = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0;\n if (!timeZone) {\n throw new Error('No timezone provided');\n }\n var yearString = \"\".concat(year).padStart(4, '0');\n var monthString = \"\".concat(month + 1).padStart(2, '0');\n var dayString = \"\".concat(day).padStart(2, '0');\n var hourString = \"\".concat(hour).padStart(2, '0');\n var minuteString = \"\".concat(minute).padStart(2, '0');\n var secondString = \"\".concat(second).padStart(2, '0');\n var nanoString = \"\".concat(ns).padStart(9, '0');\n var dateString = \"\".concat(yearString, \"-\").concat(monthString, \"-\").concat(dayString, \" \").concat(hourString, \":\").concat(minuteString, \":\").concat(secondString, \".\").concat(nanoString);\n return dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, dateString, dh.i18n.TimeZone.getTimeZone(timeZone));\n }\n\n /**\n * Takes the string the user entered and returns the next nanos value\n * @param nanoString The nano string to get the next one of\n * @returns The value of the next nanos\n */\n static getNextNanos(nanoString) {\n var sigNanos = parseInt(nanoString, 10);\n // Get the zeroes needed for padding before adding one so we handle overflow properly.\n var zeros = '0'.repeat(9 - nanoString.length);\n var nextNanoString = \"\".concat(sigNanos + 1).concat(zeros);\n return parseInt(nextNanoString, 10);\n }\n\n /**\n * @param components The string components that were parsed from the original string\n * @param values The values that were parsed from the components\n * @param timeZone The time zone to parse the date in. E.g. America/New_York\n * @returns Returns the DateWrapper for the next date, or null if a full date was passed in\n */\n static getNextDate(dh, components, values, timeZone) {\n var {\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n nanos\n } = values;\n if (components.nanos != null) {\n if (components.nanos.length === 9) {\n // They want an exact match\n return null;\n }\n nanos = DateUtils.getNextNanos(components.nanos);\n if (nanos > 999999999) {\n // There's an overflow, add it to the seconds manually\n seconds += 1;\n nanos = 0;\n }\n } else if (components.seconds != null) {\n seconds += 1;\n } else if (components.minutes != null) {\n minutes += 1;\n } else if (components.hours != null) {\n hours += 1;\n } else if (components.date != null) {\n date += 1;\n } else if (components.month != null) {\n month += 1;\n } else {\n year += 1;\n }\n\n // Use the JS date to handle overflow rather than doing our own logic\n // Because handling leap years and stuff is a pain\n // Still need to add nanos after, and the overflow from that is already added to seconds above\n var jsDate = new Date(year, month, date, hours, minutes, seconds);\n return DateUtils.makeDateWrapper(dh, timeZone, jsDate.getFullYear(), jsDate.getMonth(), jsDate.getDate(), jsDate.getHours(), jsDate.getMinutes(), jsDate.getSeconds(), nanos);\n }\n\n /**\n * Get the JS month value for the provided string.\n * Matches digits or a month name (eg. '1', '01', 'jan', 'january' should all work)\n * @param monthString The string to parse to a JS month value\n * @returns number The JS month value, which starts at 0 for january, or NaN if nothing could be parsed\n */\n static parseMonth(monthString) {\n var month = parseInt(monthString, 10);\n if (!Number.isNaN(month)) {\n if (month >= 1 && month <= 12) {\n return month - 1;\n }\n return NaN;\n }\n var cleanMonthString = monthString.trim().toLowerCase();\n if (cleanMonthString.length >= 3) {\n for (var i = 0; i < DateUtils.months.length; i += 1) {\n if (DateUtils.months[i].startsWith(cleanMonthString)) {\n return i;\n }\n }\n }\n return NaN;\n }\n\n /**\n * Parse a date object out of the provided string segments.\n * Also using `parseMonth` to get month names like Aug/August rather than\n * simply doing `parseInt`.\n * @param yearString The year part of the string\n * @param monthString The month part of the string\n * @param dayString The day part of the string\n * @param hourString The hour part of the string\n * @param minuteString The minute part of the string\n * @param secondString The second part of the string\n * @param nanoString The milli part of the string\n */\n static parseDateValues(yearString, monthString, dayString, hourString, minuteString, secondString, nanoString) {\n var year = parseInt(yearString, 10);\n var month = monthString != null ? this.parseMonth(monthString) : 0;\n var date = dayString != null ? parseInt(dayString, 10) : 1;\n var hours = hourString != null ? parseInt(hourString, 10) : 0;\n var minutes = minuteString != null ? parseInt(minuteString, 10) : 0;\n var seconds = secondString != null ? parseInt(secondString, 10) : 0;\n var nanos = nanoString != null ? parseInt(nanoString.padEnd(9, '0'), 10) : 0;\n if (Number.isNaN(year) || Number.isNaN(month) || Number.isNaN(date) || Number.isNaN(hours) || Number.isNaN(minutes) || Number.isNaN(seconds) || Number.isNaN(nanos)) {\n return null;\n }\n return {\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n nanos\n };\n }\n\n /**\n * Parse out a date time string into it's string components.\n * Anything that is not captured in the string will be undefined.\n *\n * @param dateTimeString The date time string to parse\n * @returns Containing the date time components\n */\n static parseDateTimeString(dateTimeString) {\n var regex = /\\s*(\\d{4})([-./]([\\da-z]+))?([-./](\\d{1,2}))?([tT\\s](\\d{2})([:](\\d{2}))?([:](\\d{2}))?([.](\\d{1,9}))?)?(.*)/;\n var result = regex.exec(dateTimeString);\n if (result == null) {\n throw new Error(\"Unexpected date string: \".concat(dateTimeString));\n }\n var [, year,, month,, date,, hours,, minutes,, seconds,, nanos, overflow] = result;\n if (overflow != null && overflow.length > 0) {\n throw new Error(\"Unexpected characters after date string '\".concat(dateTimeString, \"': \").concat(overflow));\n }\n return {\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n nanos\n };\n }\n\n /**\n * Parses the date range provided from a string of text.\n * @param text The string to parse the date from. Can be a keyword like \"today\", or in the format \"2018-08-04\"\n * @param timeZone The time zone to parse this range in. E.g. America/New_York\n * @returns A tuple with the start and end value/null for that date range, or both null\n */\n static parseDateRange(dh, text, timeZone) {\n var cleanText = text.trim().toLowerCase();\n if (cleanText.length === 0) {\n throw new Error('Cannot parse date range from empty string');\n }\n if (cleanText === 'null') {\n return [null, null];\n }\n if (cleanText === 'today') {\n var now = new Date(Date.now());\n var _startDate = DateUtils.makeDateWrapper(dh, timeZone, now.getFullYear(), now.getMonth(), now.getDate());\n var tomorrow = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\n var _endDate = DateUtils.makeDateWrapper(dh, timeZone, tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate());\n return [_startDate, _endDate];\n }\n if (cleanText === 'yesterday') {\n var _now = new Date(Date.now());\n var yesterday = new Date(_now.getFullYear(), _now.getMonth(), _now.getDate() - 1);\n var _startDate2 = DateUtils.makeDateWrapper(dh, timeZone, yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate());\n var _endDate2 = DateUtils.makeDateWrapper(dh, timeZone, _now.getFullYear(), _now.getMonth(), _now.getDate());\n return [_startDate2, _endDate2];\n }\n if (cleanText === 'now') {\n var _now2 = new Date(Date.now());\n var date = dh.DateWrapper.ofJsDate(_now2);\n return [date, null];\n }\n var components = DateUtils.parseDateTimeString(cleanText);\n if (components.year == null && components.month == null && components.date == null) {\n throw new Error(\"Unable to extract year, month, or day \".concat(cleanText));\n }\n var values = DateUtils.parseDateValues(components.year, components.month, components.date, components.hours, components.minutes, components.seconds, components.nanos);\n if (values == null) {\n throw new Error(\"Unable to extract date values from \".concat(components));\n }\n var startDate = DateUtils.makeDateWrapper(dh, timeZone, values.year, values.month, values.date, values.hours, values.minutes, values.seconds, values.nanos);\n var endDate = DateUtils.getNextDate(dh, components, values, timeZone);\n return [startDate, endDate];\n }\n\n /**\n * Gets the Js Date object from the provided DateWrapper.\n * In unit test, DateWrapper is just a number provided in millis, so handles that case.\n * @param dateWrapper The DateWrapper object, or time in millis\n */\n static getJsDate(dateWrapper) {\n if (typeof dateWrapper === 'number') {\n return new Date(dateWrapper);\n }\n return dateWrapper.asDate();\n }\n}\n_defineProperty(DateUtils, \"FULL_DATE_FORMAT\", 'yyyy-MM-dd HH:mm:ss.SSSSSSSSS');\n_defineProperty(DateUtils, \"months\", ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']);\nexport default DateUtils;\n//# sourceMappingURL=DateUtils.js.map","/**\n * Create args for a filter derived from a combobox selection.\n * @param value\n */\nexport function createComboboxFilterArgs(value, allValue) {\n return value === allValue ? {\n operator: 'notEq',\n value: ''\n } // this is synonymous with \"no filter\"\n : {\n operator: 'eq',\n value\n };\n}\n\n/**\n * Create a filter condition factory for a `contains` filter that matches the\n * given search text.\n * @param tableUtils TableUtils instance to create filter from\n * @param columnNames Names of the columns to filter\n * @param searchText Text to search (will be trimmed of leading / trailing whitespace)\n */\nexport function createSearchTextFilter(tableUtils, columnNames, searchText) {\n /**\n * Creates a filter condition that matches based on search text.\n * @param maybeTable Table to filter\n */\n return function searchTextFilter(maybeTable) {\n var searchTextTrimmed = searchText.trim();\n if (searchTextTrimmed === '') {\n return null;\n }\n var factory = createFilterConditionFactory(columnNames, col => col.filter().containsIgnoreCase(tableUtils.makeFilterValue(col.type, searchTextTrimmed)), 'or');\n return factory(maybeTable);\n };\n}\n\n/**\n * Create a filter condition factory function.\n * @param columnNames Column names that filter conditions will target\n * @param createColumnCondition Function that can create a `FilterCondition` from\n * a given column. This will be run across all columns corresponding to the given\n * list of column names.\n * @param conditionOperator Operator that will be used to combine multiple\n * `FilterConditions` if multiple column names are given.\n */\nexport function createFilterConditionFactory(columnNames, createColumnCondition) {\n var conditionOperator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'or';\n return function filterConditionFactory(maybeTable) {\n var maybeColumns = maybeTable === null || maybeTable === void 0 ? void 0 : maybeTable.findColumns(typeof columnNames === 'string' ? [columnNames] : columnNames);\n if (maybeColumns == null || maybeColumns.length === 0) {\n return null;\n }\n var filterConditions = maybeColumns.map(createColumnCondition);\n return filterConditions.reduce((current, next) => current[conditionOperator](next));\n };\n}\n\n/**\n * Create a filter condition factory for a filter operator that matches the\n * given value.\n * @param tableUtils TableUtils instance to create filter from\n * @param columnNames Column names to compare value to\n * @param value Value to match\n * @param operator Operator to use for matching\n */\nexport function createValueFilter(tableUtils, columnNames, value, operator) {\n /**\n * Creates a filter condition that matches based on matching a given value.\n * @param maybeTable Table to filter\n */\n return createFilterConditionFactory(columnNames, col => col.filter()[operator](tableUtils.makeFilterValue(col.type, value)), 'or');\n}\n\n/**\n * Create a filter condition factory for a filter that matches a given Selection.\n * If column is not found or selection parameter is 'all', the factory will return\n * null to indicate the results will be unfiltered.\n * @param tableUtils TableUtils instance to create filter from\n * @param columnName The column name to filter\n * @param selection 'all' or an array of values to filter by\n * @param emptySelectionEqAll If true, empty selection means select\n * all. If false, it means select none.\n * @param invertSelection Invert the selection (eg. All items are selected,\n * then you deselect items)\n */\nexport function createSelectedValuesFilter(tableUtils, columnName, selection, emptySelectionEqAll, invertSelection) {\n /**\n * Creates a filter condition that matches rows for selected values. Returns\n * null to indicate no filtering.\n * @param maybeTable the table to filter\n */\n return function selectedValuesFilter(maybeTable) {\n var maybeColumn = maybeTable === null || maybeTable === void 0 ? void 0 : maybeTable.findColumn(columnName);\n var isAllSelected = selection === 'all' || emptySelectionEqAll && selection.size === 0;\n if (maybeColumn == null || isAllSelected) {\n return null;\n }\n return tableUtils.makeSelectValueFilter(maybeColumn, [...selection.keys()], invertSelection);\n };\n}\n\n/**\n * Creates a `notNullOrEmptyFilterCondition` function.\n * @param tableUtils TableUtils instance to use for making filters.\n */\nexport function createNotNullOrEmptyFilterCondition(tableUtils) {\n /**\n * Returns a filter condition that matches values in a given column that are\n * not null or empty string.\n */\n return function notNullOrEmptyFilterCondition(column) {\n return column.filter().isNull().not().and(column.filter().notEq(tableUtils.makeFilterValue(column.type, '')));\n };\n}\n\n/**\n * Creates a `showOnlyEmptyFilterCondition` function that can be toggled on or\n * off.\n * @param tableUtils TableUtils instance to use for making filters.\n * @param isOn Flag to indicate if the filter should be on or off.\n */\nexport function createShowOnlyEmptyFilterCondition(tableUtils, isOn) {\n /**\n * Returns a filter condition that matches values in a given column. If the\n * `isOn` param is true, this will filter to only null or empty string values.\n * If `isOn` is false, it will return a filter that matches all values.\n */\n return function showOnlyEmptyFilterCondition(column) {\n var filter = column.filter();\n var emptyStringValue = tableUtils.makeFilterValue(column.type, '');\n var eqEmptyStringCondition = filter.eq(emptyStringValue);\n if (isOn) {\n return filter.isNull().or(eqEmptyStringCondition);\n }\n\n // If filter is off, return a condition that will always be true\n return eqEmptyStringCondition.or(filter.notEq(emptyStringValue));\n };\n}\n//# sourceMappingURL=FilterUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport class Operator {}\n_defineProperty(Operator, \"not\", 'not');\n_defineProperty(Operator, \"and\", 'and');\n_defineProperty(Operator, \"or\", 'or');\nexport function assertOperatorValue(operator) {\n if (!(operator === 'not' || operator === 'and' || operator === 'or')) {\n throw new Error('operator is not a valid FilterOperatorValue');\n }\n}\n//# sourceMappingURL=Operator.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/** Different filter conditions user can select */\nexport class Type {}\n_defineProperty(Type, \"eq\", 'eq');\n_defineProperty(Type, \"eqIgnoreCase\", 'eqIgnoreCase');\n_defineProperty(Type, \"notEq\", 'notEq');\n_defineProperty(Type, \"notEqIgnoreCase\", 'notEqIgnoreCase');\n_defineProperty(Type, \"greaterThan\", 'greaterThan');\n_defineProperty(Type, \"greaterThanOrEqualTo\", 'greaterThanOrEqualTo');\n_defineProperty(Type, \"lessThan\", 'lessThan');\n_defineProperty(Type, \"lessThanOrEqualTo\", 'lessThanOrEqualTo');\n_defineProperty(Type, \"in\", 'in');\n_defineProperty(Type, \"inIgnoreCase\", 'inIgnoreCase');\n_defineProperty(Type, \"notIn\", 'notIn');\n_defineProperty(Type, \"notInIgnoreCase\", 'notInIgnoreCase');\n_defineProperty(Type, \"isTrue\", 'isTrue');\n_defineProperty(Type, \"isFalse\", 'isFalse');\n_defineProperty(Type, \"isNull\", 'isNull');\n_defineProperty(Type, \"invoke\", 'invoke');\n_defineProperty(Type, \"contains\", 'contains');\n_defineProperty(Type, \"notContains\", 'notContains');\n_defineProperty(Type, \"containsIgnoreCase\", 'containsIgnoreCase');\n_defineProperty(Type, \"startsWith\", 'startsWith');\n_defineProperty(Type, \"endsWith\", 'endsWith');\n_defineProperty(Type, \"containsAny\", 'containsAny');\n//# sourceMappingURL=Type.js.map","import clamp from 'lodash.clamp';\nimport Log from '@deephaven/log';\nvar log = Log.module('ViewportDataUtils');\n\n/**\n * Create a unique string key for a row based on its ordinal position in its\n * source table. This is calculated based on it's offset in the viewport\n * (row.offsetInSnapshot) + the offset of the snapshot.\n * @param row Row from a Table update event.\n * @param offset Offset of the current viewport.\n * @returns Unique string key for the ordinal position of the given row.\n */\nexport function createKeyFromOffsetRow(row, offset) {\n return String(row.offsetInSnapshot + offset);\n}\n\n/**\n * Creates a handler function for a `dh.Table.EVENT_UPDATED` event. Rows that\n * get passed to the handler will be bulk updated in the given `viewportData`\n * object based on their derived item keys.\n * @param viewportData State object for managing a list of KeyedItem data.\n * @param deserializeRow Converts a DH Row to an item object.\n * @returns Handler function for a `dh.Table.EVENT_UPDATED` event.\n */\nexport function createOnTableUpdatedHandler(_ref, deserializeRow) {\n var {\n bulkUpdate\n } = _ref;\n /**\n * Handler for a `dh.Table.EVENT_UPDATED` event.\n */\n return function onTableUpdated(event) {\n var {\n columns,\n offset,\n rows\n } = event.detail;\n log.debug('table updated', event.detail);\n var updateKeyMap = new Map();\n rows.forEach(row => {\n var item = deserializeRow(row, columns);\n var key = createKeyFromOffsetRow(row, offset);\n updateKeyMap.set(key, {\n key,\n item\n });\n });\n log.debug('update keys', updateKeyMap);\n bulkUpdate(updateKeyMap);\n };\n}\n\n/**\n * Maps a Row to a key / value object. Keys are mapped ver batim from column\n * names.\n * @param row Row to map to an item.\n * @param columns Columns to map.\n * @returns A key / value object for the row.\n */\nexport function defaultRowDeserializer(row, columns) {\n return columns.reduce((result, col) => {\n // eslint-disable-next-line no-param-reassign\n result[col.name] = row.get(col);\n return result;\n }, {});\n}\n\n/**\n * For windowing to work, the underlying list needs to maintain a KeyedItem for\n * each row in the backing table (even if these rows haven't been loaded yet).\n * This is needed internally by react-spectrum so it can calculate the content\n * area size. This generator can create a range of empty `KeyedItem` objects.\n * @param start The starting index to generate\n * @param end The ending index to generate\n */\nexport function* generateEmptyKeyedItems(start, end) {\n // eslint-disable-next-line no-plusplus\n for (var i = start; i <= end; ++i) {\n yield {\n key: String(i)\n };\n }\n}\n\n/**\n * Check a Table to see if it is closed before checking its size property. This\n * is important because calling Table.size on a closed table throws an error. If\n * the table is null or closed, return zero. Otherwise, return the current size.\n * @param table The table to check for its size.\n * @returns The size of the table or zero if the table is null or closed.\n */\nexport function getSize(table) {\n return table == null || isClosed(table) ? 0 : table.size;\n}\n\n/**\n * Check if a given table is closed. Tree tables don't have an `isClosed` prop,\n * so will always return false.\n * @param table The table to check if it is closed.\n */\nexport function isClosed(table) {\n if ('isClosed' in table) {\n return table.isClosed;\n }\n return false;\n}\n\n/**\n * Determine the first and last row index for a viewport + extra leading and\n * trailing padding. Values will be \"clamped\" to stay within the table size.\n * @param firstRow Starting row index for the viewport.\n * @param viewportSize Size of the viewport.\n * @param padding Extra rows to add to the viewport. Will be used for leading\n * and trailing rows.\n * @param tableSize Total table size.\n * @returns Tuple containing indices for the first and last row.\n */\nexport function padFirstAndLastRow(firstRow, viewportSize, padding, tableSize) {\n var lastRow = firstRow + viewportSize - 1;\n var [min, max] = [0, tableSize - 1];\n var first = clamp(firstRow - padding, min, max);\n var last = clamp(lastRow + padding, min, max);\n return [first, last];\n}\n//# sourceMappingURL=ViewportDataUtils.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { Type as FilterType, Operator as FilterOperator } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { bindAllMethods, PromiseUtils, removeNullAndUndefined, TextUtils, TimeoutError } from '@deephaven/utils';\nimport DateUtils from \"./DateUtils.js\";\nimport { createValueFilter } from \"./FilterUtils.js\";\nimport { getSize } from \"./ViewportDataUtils.js\";\nvar log = Log.module('TableUtils');\n/** Utility class to provide some functions for working with tables */\nexport class TableUtils {\n // Regex looking for a negative or positive integer or decimal number\n\n /**\n * Copy a given table and apply filters.\n * @param maybeTable Table to copy and apply filters to\n * @param filterFactories Filter condition factories to apply\n * @returns A derived, filtered table\n */\n static copyTableAndApplyFilters(maybeTable) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n if (maybeTable == null) {\n return null;\n }\n var derivedTable = yield maybeTable.copy();\n for (var _len = _arguments.length, filterFactories = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n filterFactories[_key - 1] = _arguments[_key];\n }\n derivedTable.applyFilter(removeNullAndUndefined(...filterFactories.map(f => f(derivedTable))));\n return derivedTable;\n })();\n }\n\n /**\n * Executes a callback on a given table and returns a Promise that will resolve\n * the next time a particular event type fires on the table.\n * @param exec Callback function to execute.\n * @param table Table that gets passed to the `exec` function and that is\n * subscribed to for a given `eventType`.\n * @param eventType The event type to listen for.\n * @param timeout If the event doesn't fire within the timeout, the returned\n * Promise will be rejected.\n * @returns a Promise to the original table that resolves on next `eventType`\n * event\n */\n\n static getSortIndex(sort, columnName) {\n for (var i = 0; i < sort.length; i += 1) {\n var _s$column;\n var s = sort[i];\n if (((_s$column = s.column) === null || _s$column === void 0 ? void 0 : _s$column.name) === columnName) {\n return i;\n }\n }\n return null;\n }\n\n /**\n * @param tableSort The sorts from the table to get the sort from\n * @param columnName The name of the column to get the sort for\n * @returns The sort for the column, or null if it's not sorted\n */\n static getSortForColumn(tableSort, columnName) {\n var sortIndex = TableUtils.getSortIndex(tableSort, columnName);\n if (sortIndex != null) {\n return tableSort[sortIndex];\n }\n return null;\n }\n static getFilterText(filter) {\n if (filter) {\n return filter.toString();\n }\n return null;\n }\n\n /** Return the valid filter types for the column */\n static getFilterTypes(columnType) {\n if (TableUtils.isBooleanType(columnType)) {\n return [FilterType.isTrue, FilterType.isFalse, FilterType.isNull];\n }\n if (TableUtils.isCharType(columnType) || TableUtils.isNumberType(columnType) || TableUtils.isDateType(columnType)) {\n return [FilterType.eq, FilterType.notEq, FilterType.greaterThan, FilterType.greaterThanOrEqualTo, FilterType.lessThan, FilterType.lessThanOrEqualTo];\n }\n if (TableUtils.isTextType(columnType)) {\n return [FilterType.eq, FilterType.eqIgnoreCase, FilterType.notEq, FilterType.notEqIgnoreCase, FilterType.contains, FilterType.notContains, FilterType.startsWith, FilterType.endsWith];\n }\n return [];\n }\n static getNextSort(columns, sorts, columnIndex) {\n if (columnIndex < 0 || columnIndex >= columns.length) {\n return null;\n }\n var sort = TableUtils.getSortForColumn(sorts, columns[columnIndex].name);\n if (sort === null) {\n return columns[columnIndex].sort().asc();\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return sort.desc();\n }\n return null;\n }\n static makeColumnSort(columns, columnIndex, direction, isAbs) {\n if (columnIndex < 0 || columnIndex >= columns.length) {\n return null;\n }\n if (direction === TableUtils.sortDirection.none) {\n return null;\n }\n var sort = columns[columnIndex].sort();\n switch (direction) {\n case TableUtils.sortDirection.ascending:\n sort = sort.asc();\n break;\n case TableUtils.sortDirection.descending:\n sort = sort.desc();\n break;\n default:\n break;\n }\n if (isAbs) {\n sort = sort.abs();\n }\n return sort;\n }\n\n /**\n * Toggles the sort for the specified column\n * @param sorts The current sorts from IrisGrid.state\n * @param columns The columns to apply the sort to\n * @param columnIndex The column index to apply the sort to\n * @param addToExisting Add this sort to the existing sort\n */\n static toggleSortForColumn(sorts, columns, columnIndex) {\n var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (columnIndex < 0 || columnIndex >= columns.length) {\n return [];\n }\n var newSort = TableUtils.getNextSort(columns, sorts, columnIndex);\n return TableUtils.setSortForColumn(sorts, columns[columnIndex].name, newSort, addToExisting);\n }\n static sortColumn(sorts, columns, modelColumn, direction, isAbs, addToExisting) {\n if (modelColumn < 0 || modelColumn >= columns.length) {\n return [];\n }\n var newSort = TableUtils.makeColumnSort(columns, modelColumn, direction, isAbs);\n return TableUtils.setSortForColumn(sorts, columns[modelColumn].name, newSort, addToExisting);\n }\n\n /**\n * Sets the sort for the given column *and* removes any reverses\n * @param tableSort The current sorts from IrisGrid.state\n * @param columnName The column name to apply the sort to\n * @param sort The sort object to add\n * @param addToExisting Add this sort to the existing sort\n * @returns Returns the modified array of sorts - removing reverses\n */\n static setSortForColumn(tableSort, columnName, sort) {\n var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var sortIndex = TableUtils.getSortIndex(tableSort, columnName);\n var sorts = [];\n if (addToExisting) {\n sorts = sorts.concat(tableSort.filter(_ref => {\n var {\n direction\n } = _ref;\n return direction !== TableUtils.sortDirection.reverse;\n }));\n if (sortIndex !== null) {\n sorts.splice(sortIndex, 1);\n }\n }\n if (sort !== null) {\n sorts.push(sort);\n }\n return sorts;\n }\n static getNormalizedType(columnType) {\n switch (columnType) {\n case 'boolean':\n case 'java.lang.Boolean':\n case TableUtils.dataType.BOOLEAN:\n return TableUtils.dataType.BOOLEAN;\n case 'char':\n case 'java.lang.Character':\n case TableUtils.dataType.CHAR:\n return TableUtils.dataType.CHAR;\n case 'java.lang.String':\n case TableUtils.dataType.STRING:\n return TableUtils.dataType.STRING;\n case 'io.deephaven.db.tables.utils.DBDateTime':\n case 'io.deephaven.time.DateTime':\n case 'com.illumon.iris.db.tables.utils.DBDateTime':\n case 'java.time.Instant':\n case 'java.time.ZonedDateTime':\n case TableUtils.dataType.DATETIME:\n return TableUtils.dataType.DATETIME;\n case 'double':\n case 'java.lang.Double':\n case 'float':\n case 'java.lang.Float':\n case 'java.math.BigDecimal':\n case TableUtils.dataType.DECIMAL:\n return TableUtils.dataType.DECIMAL;\n case 'int':\n case 'java.lang.Integer':\n case 'long':\n case 'java.lang.Long':\n case 'short':\n case 'java.lang.Short':\n case 'byte':\n case 'java.lang.Byte':\n case 'java.math.BigInteger':\n case TableUtils.dataType.INT:\n return TableUtils.dataType.INT;\n default:\n return TableUtils.dataType.UNKNOWN;\n }\n }\n static isLongType(columnType) {\n switch (columnType) {\n case 'long':\n case 'java.lang.Long':\n return true;\n default:\n return false;\n }\n }\n static isDateType(columnType) {\n switch (columnType) {\n case 'io.deephaven.db.tables.utils.DBDateTime':\n case 'io.deephaven.time.DateTime':\n case 'java.time.Instant':\n case 'java.time.ZonedDateTime':\n case 'com.illumon.iris.db.tables.utils.DBDateTime':\n return true;\n default:\n return false;\n }\n }\n static isNumberType(columnType) {\n return TableUtils.isIntegerType(columnType) || TableUtils.isDecimalType(columnType);\n }\n static isIntegerType(columnType) {\n switch (columnType) {\n case 'int':\n case 'java.lang.Integer':\n case 'java.math.BigInteger':\n case 'long':\n case 'java.lang.Long':\n case 'short':\n case 'java.lang.Short':\n case 'byte':\n case 'java.lang.Byte':\n return true;\n default:\n return false;\n }\n }\n static isDecimalType(columnType) {\n switch (columnType) {\n case 'double':\n case 'java.lang.Double':\n case 'java.math.BigDecimal':\n case 'float':\n case 'java.lang.Float':\n return true;\n default:\n return false;\n }\n }\n static isBigDecimalType(columnType) {\n switch (columnType) {\n case 'java.math.BigDecimal':\n return true;\n default:\n return false;\n }\n }\n static isBigIntegerType(columnType) {\n switch (columnType) {\n case 'java.math.BigInteger':\n return true;\n default:\n return false;\n }\n }\n static isBooleanType(columnType) {\n switch (columnType) {\n case 'boolean':\n case 'java.lang.Boolean':\n return true;\n default:\n return false;\n }\n }\n static isCharType(columnType) {\n switch (columnType) {\n case 'char':\n case 'java.lang.Character':\n return true;\n default:\n return false;\n }\n }\n static isStringType(columnType) {\n switch (columnType) {\n case 'java.lang.String':\n return true;\n default:\n return false;\n }\n }\n static isTextType(columnType) {\n return this.isStringType(columnType) || this.isCharType(columnType);\n }\n\n /**\n * Get base column type\n * @param columnType Column type\n * @returns Element type for array columns, original type for non-array columns\n */\n static getBaseType(columnType) {\n return columnType.split('[]')[0];\n }\n\n /**\n * Check if the column types are compatible\n * @param type1 Column type to check\n * @param type2 Column type to check\n * @returns True, if types are compatible\n */\n static isCompatibleType(type1, type2) {\n return TableUtils.getNormalizedType(type1) === TableUtils.getNormalizedType(type2);\n }\n\n /**\n * Adds quotes to a value if they're not already added\n * @param value Value to add quotes around\n */\n static quoteValue(value) {\n if (value.length >= 2 && (value.charAt(0) === '\"' && value.charAt(value.length - 1) === '\"' || value.charAt(0) === \"'\" && value.charAt(value.length - 1) === \"'\")) {\n return value;\n }\n return \"\\\"\".concat(value, \"\\\"\");\n }\n static isRangeOperation(operation) {\n switch (operation) {\n case '<':\n case '<=':\n case '=<':\n case '>':\n case '>=':\n case '=>':\n return true;\n default:\n return false;\n }\n }\n\n /**\n * @param filter The column filter to apply the range operation to\n * @param operation The range operation to run\n * @param value The value to use for the operation\n * @returns The condition with the specified operation\n */\n static makeRangeFilterWithOperation(filter, operation, value) {\n switch (operation) {\n case '=':\n return filter.eq(value);\n case '<':\n return filter.lessThan(value);\n case '<=':\n case '=<':\n return filter.lessThanOrEqualTo(value);\n case '>':\n return filter.greaterThan(value);\n case '>=':\n case '=>':\n return filter.greaterThanOrEqualTo(value);\n case '!=':\n case '!':\n return filter.notEq(value);\n default:\n return null;\n }\n }\n\n /**\n * Wraps a table promise in a cancelable promise that will close the table if the promise is cancelled.\n * Use in a component that loads a table, and call cancel when unmounting.\n * @param table The table promise to wrap\n */\n static makeCancelableTablePromise(table) {\n return PromiseUtils.makeCancelable(table, resolved => {\n resolved.close();\n });\n }\n\n /**\n * Make a cancelable promise for a one-shot table event with a timeout.\n * @param table Table to listen for events on\n * @param eventName Event to listen for\n * @param timeout Event timeout in milliseconds, defaults to 0\n * @param matcher Optional function to determine if the promise can be resolved or stays pending\n * @returns Resolves with the event data\n */\n static makeCancelableTableEventPromise(table, eventName) {\n var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var matcher = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var eventCleanup;\n var timeoutId;\n var isPending = true;\n var wrappedPromise = new Promise((resolve, reject) => {\n timeoutId = setTimeout(() => {\n eventCleanup();\n isPending = false;\n reject(new TimeoutError(\"Event \\\"\".concat(eventName, \"\\\" timed out.\")));\n }, timeout);\n eventCleanup = table.addEventListener(eventName, event => {\n if (matcher != null && !matcher(event)) {\n log.debug2('Event triggered, but matcher returned false.');\n return;\n }\n log.debug2('Event triggered, resolving.');\n eventCleanup();\n clearTimeout(timeoutId);\n isPending = false;\n resolve(event);\n });\n });\n wrappedPromise.cancel = () => {\n if (isPending) {\n log.debug2('Pending promise cleanup.');\n eventCleanup();\n clearTimeout(timeoutId);\n isPending = false;\n return;\n }\n log.debug2('Ignoring non-pending promise cancel.');\n };\n return wrappedPromise;\n }\n static removeCommas(value) {\n return value.replace(/[\\s|,]/g, '');\n }\n static makeBooleanValue(text) {\n var allowEmpty = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (text === '' && allowEmpty) {\n return null;\n }\n switch (text === null || text === void 0 ? void 0 : text.toLowerCase()) {\n case 'null':\n return null;\n case '0':\n case 'f':\n case 'fa':\n case 'fal':\n case 'fals':\n case 'false':\n case 'n':\n case 'no':\n return false;\n case '1':\n case 't':\n case 'tr':\n case 'tru':\n case 'true':\n case 'y':\n case 'ye':\n case 'yes':\n return true;\n default:\n throw new Error(\"Invalid boolean '\".concat(text, \"'\"));\n }\n }\n static makeNumberValue(text) {\n if (text === 'null' || text === '') {\n return null;\n }\n var cleanText = text.toLowerCase().trim();\n if (cleanText === '∞' || cleanText === 'infinity' || cleanText === 'inf') {\n return Number.POSITIVE_INFINITY;\n }\n if (cleanText === '-∞' || cleanText === '-infinity' || cleanText === '-inf') {\n return Number.NEGATIVE_INFINITY;\n }\n var numberText = TableUtils.removeCommas(cleanText);\n if (TableUtils.NUMBER_REGEX.test(numberText)) {\n return parseFloat(numberText);\n }\n throw new Error(\"Invalid number '\".concat(text, \"'\"));\n }\n static getFilterOperatorString(operation) {\n switch (operation) {\n case FilterType.eq:\n return '=';\n case FilterType.notEq:\n return '!=';\n case FilterType.greaterThan:\n return '>';\n case FilterType.greaterThanOrEqualTo:\n return '>=';\n case FilterType.lessThan:\n return '<';\n case FilterType.lessThanOrEqualTo:\n return '<=';\n case FilterType.contains:\n return '~';\n case FilterType.notContains:\n return '!~';\n default:\n throw new Error(\"Unexpected filter type \".concat(operation));\n }\n }\n static isPartitionedTable(table) {\n return table != null && table.getMergedTable !== undefined && table.getKeyTable !== undefined && table.getKeys !== undefined;\n }\n static isTreeTable(table) {\n return table != null && table.expand !== undefined && table.collapse !== undefined;\n }\n\n /**\n * Copies the provided array, sorts by column name case insensitive, and returns the sorted array.\n * @param columns The columns to sort\n * @param isAscending Whether to sort ascending\n */\n static sortColumns(columns) {\n var isAscending = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return [...columns].sort((a, b) => {\n var aName = a.name.toUpperCase();\n var bName = b.name.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n }\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n this.dh = dh;\n bindAllMethods(this);\n }\n\n /**\n * Create a table containing a distinct list of values for given column name and\n * applies the given sort direction.\n * @param table Source table to derive table from\n * @param columnName Column to dermine distinct values\n * @param sortDirection Direction to sort\n * @param filterConditionFactories Optional filters to apply. Note that these\n * will be applied before the `selectCall` in case we need to base the filtering\n * on columns other than the distinct value column\n */\n createDistinctSortedColumnTable(table, columnName, sortDirection) {\n var _arguments2 = arguments,\n _this = this;\n return _asyncToGenerator(function* () {\n if (table == null) {\n return null;\n }\n var sourceTable = table;\n\n // Applying filters before `selectDistinct` so that we still have access to\n // all columns. Also prevents a filter applied to the final table from\n // clearing this filter.\n for (var _len2 = _arguments2.length, filterConditionFactories = new Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {\n filterConditionFactories[_key2 - 3] = _arguments2[_key2];\n }\n if (filterConditionFactories.length > 0) {\n sourceTable = yield table.copy();\n yield sourceTable.applyFilter(removeNullAndUndefined(...filterConditionFactories.map(f => f(sourceTable))));\n }\n var column = sourceTable.findColumn(columnName);\n var distinctTable = yield sourceTable.selectDistinct([column]);\n\n // If we copied the table, dispose the copy. Original is managed outside\n // of this function\n if (sourceTable !== table) {\n sourceTable.close();\n }\n var distinctAscColSort = distinctTable.findColumn(columnName).sort()[sortDirection]();\n return _this.applySort(distinctTable, [distinctAscColSort]);\n })();\n }\n\n /**\n * Check if any columns contain a given value.\n * @param table Table to search for values\n * @param columnNames Column names to search\n * @param value Value to search for\n * @param isCaseSensitive Whether the value check is case sensitive\n */\n doesColumnValueExist(table, columnNames, value, isCaseSensitive) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (table == null) {\n return null;\n }\n var filterConditionFactory = createValueFilter(_this2, columnNames, value, isCaseSensitive ? 'eq' : 'eqIgnoreCase');\n var tableCopy = yield table.copy();\n yield _this2.applyFilter(tableCopy, removeNullAndUndefined(filterConditionFactory(tableCopy)));\n var size = getSize(tableCopy);\n tableCopy.close();\n return size > 0;\n })();\n }\n\n /**\n * Create filter with the provided column and text. Handles multiple filters joined with && or ||\n * @param column The column to set the filter on\n * @param text The text string to create the filter from\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns Returns the created filter, null if text could not be parsed\n */\n makeQuickFilter(column, text, timeZone) {\n var orComponents = text.split('||');\n var orFilter = null;\n for (var i = 0; i < orComponents.length; i += 1) {\n var orComponent = orComponents[i];\n var andComponents = orComponent.split('&&');\n var andFilter = null;\n for (var j = 0; j < andComponents.length; j += 1) {\n var andComponent = andComponents[j].trim();\n if (andComponent.length > 0) {\n var filter = this.makeQuickFilterFromComponent(column, andComponent, timeZone);\n if (filter) {\n if (andFilter) {\n andFilter = andFilter.and(filter);\n } else {\n andFilter = filter;\n }\n } else {\n throw new Error(\"Unable to parse quick filter from text \".concat(text));\n }\n }\n }\n if (orFilter && andFilter) {\n orFilter = orFilter.or(andFilter);\n } else {\n orFilter = andFilter;\n }\n }\n return orFilter;\n }\n\n /**\n * Create filter with the provided column and text of one component (no multiple conditions)\n * @param column The column to set the filter on\n * @param text The text string to create the filter from\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns Returns the created filter, null if text could not be parsed\n */\n makeQuickFilterFromComponent(column, text, timeZone) {\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type)) {\n return this.makeQuickNumberFilter(column, text);\n }\n if (TableUtils.isBooleanType(type)) {\n return this.makeQuickBooleanFilter(column, text);\n }\n if (timeZone != null && TableUtils.isDateType(type)) {\n return this.makeQuickDateFilter(column, text, timeZone);\n }\n if (TableUtils.isCharType(type)) {\n return this.makeQuickCharFilter(column, text);\n }\n return this.makeQuickTextFilter(column, text);\n }\n makeQuickNumberFilter(column, text) {\n var columnFilter = column.filter();\n var {\n dh\n } = this;\n var filter = null;\n var regex = /\\s*(>=|<=|=>|=<|>|<|!=|=|!)?(\\s*-\\s*)?(\\s*\\d*(?:,\\d{3})*(?:\\.\\d*)?\\s*)?(null|nan|infinity|inf|\\u221E)?(.*)/i;\n var result = regex.exec(text);\n var operation = null;\n var negativeSign = null;\n var value = null;\n var abnormalValue = null; // includes nan, null and infinity(positive & negative)\n var overflow = null;\n if (result !== null && result.length > 3) {\n [, operation, negativeSign, value, abnormalValue, overflow] = result;\n }\n if (overflow != null && overflow.trim().length > 0) {\n // Some bad characters after the number, bail out!\n return null;\n }\n if (operation == null) {\n operation = '=';\n }\n if (abnormalValue != null) {\n if (!(operation === '=' || operation === '!' || operation === '!=')) {\n // only equal and not equal operations are supported for abnormal value filter\n return null;\n }\n abnormalValue = abnormalValue.trim().toLowerCase();\n switch (abnormalValue) {\n case 'null':\n filter = columnFilter.isNull();\n break;\n case 'nan':\n filter = dh.FilterCondition.invoke('isNaN', columnFilter);\n break;\n case 'infinity':\n case 'inf':\n case '\\u221E':\n if (negativeSign != null) {\n filter = dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.lessThan(dh.FilterValue.ofNumber(0)));\n } else {\n filter = dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.greaterThan(dh.FilterValue.ofNumber(0)));\n }\n break;\n default:\n break;\n }\n if (filter !== null && (operation === '!' || operation === '!=')) {\n filter = filter.not();\n }\n return filter;\n }\n if (value == null) {\n return null;\n }\n value = TableUtils.removeCommas(value);\n if (TableUtils.isLongType(column.type)) {\n try {\n value = dh.FilterValue.ofNumber(dh.LongWrapper.ofString(\"\".concat(negativeSign != null ? '-' : '').concat(value)));\n } catch (error) {\n log.warn('Unable to create long filter', error);\n return null;\n }\n } else {\n value = parseFloat(value);\n if (value == null || Number.isNaN(value)) {\n return null;\n }\n value = dh.FilterValue.ofNumber(negativeSign != null ? 0 - value : value);\n }\n filter = column.filter();\n return TableUtils.makeRangeFilterWithOperation(filter, operation, value);\n }\n\n /**\n * Given a text string from a table, escape quick filter operators in string with \\\n * ex. =test returns \\=test, null returns \\null\n * @param string quickfilter string to escape\n * @returns escaped string\n */\n static escapeQuickTextFilter(quickFilterText) {\n var _operation, _value2;\n if (quickFilterText == null) return null;\n var regex = /^(!~|!=|~|=|!)?(.*)/;\n // starts with zero or more \\ followed by and ending with null\n var nullRegex = /^\\\\*null$/;\n var result = regex.exec(quickFilterText);\n var operation = null;\n var value = null;\n if (result !== null && result.length > 2) {\n [, operation, value] = result;\n }\n if (operation != null) {\n var _value;\n return \"\\\\\".concat(operation).concat((_value = value) !== null && _value !== void 0 ? _value : '');\n }\n if (value != null && nullRegex.test(value.toLowerCase())) {\n // adds an extra escape character to matching value\n return \"\\\\\".concat(value);\n }\n if (value != null && value.startsWith('*')) {\n return \"\\\\\".concat(value);\n }\n if (value != null && value.endsWith('*') && !value.endsWith('\\\\*')) {\n value = value.substring(0, value.length - 1);\n return \"\".concat(value, \"\\\\*\");\n }\n return \"\".concat((_operation = operation) !== null && _operation !== void 0 ? _operation : '').concat((_value2 = value) !== null && _value2 !== void 0 ? _value2 : \"\");\n }\n\n /**\n * Given an escaped quick filter, unescape the operators for giving it to the js api\n * ex. \\=test returns =test, \\null returns null\n * @param string quickfilter string to escape\n * @returns escaped string\n */\n static unescapeQuickTextFilter(quickFilterText) {\n var _operation2, _value3;\n var regex = /^(\\\\!~|\\\\!=|\\\\~|\\\\=|\\\\!)?(.*)/;\n // starts with zero or more \\ followed by and ending with null\n var nullRegex = /^\\\\*null$/;\n var result = regex.exec(quickFilterText);\n var operation = null;\n var value = null;\n if (result !== null && result.length > 2) {\n [, operation, value] = result;\n }\n if (operation != null) {\n operation = operation.replace('\\\\', '');\n }\n if (value != null && nullRegex.test(value.toLowerCase())) {\n // removes the first occurance of the backslash\n value = value.replace('\\\\', '');\n }\n if (operation == null && value != null && value.startsWith('\\\\*')) {\n value = value.substring(1);\n }\n if (operation == null && value != null && value.endsWith('\\\\*')) {\n value = value.substring(0, value.length - 2);\n return \"\".concat(value, \"*\");\n }\n return \"\".concat((_operation2 = operation) !== null && _operation2 !== void 0 ? _operation2 : '').concat((_value3 = value) !== null && _value3 !== void 0 ? _value3 : \"\");\n }\n makeQuickTextFilter(column, text) {\n var {\n dh\n } = this;\n var cleanText = \"\".concat(text).trim();\n var regex = /^(!~|!=|~|=|!)?(.*)/;\n var result = regex.exec(cleanText);\n var operation = null;\n var value = null;\n if (result !== null && result.length > 2) {\n [, operation, value] = result;\n if (value != null) {\n value = value.trim();\n }\n }\n if (value == null) {\n return null;\n }\n\n // allow empty strings, but only for explicit equal and not equal\n if (value.length === 0 && !(operation === '=' || operation === '!=')) {\n return null;\n }\n\n // no operation is treated as an implicit equals\n if (operation == null) {\n operation = '=';\n }\n var filter = column.filter();\n if (value.toLowerCase() === 'null') {\n // Null is a special case!\n switch (operation) {\n case '=':\n return filter.isNull();\n case '!=':\n case '!':\n return filter.isNull().not();\n default:\n // For all other operations, treat null as a string value\n }\n }\n\n var prefix = null;\n var suffix = null;\n if (value.startsWith('*')) {\n prefix = '*';\n value = value.substring(1);\n } else if (value.endsWith('*') && !value.endsWith('\\\\*')) {\n suffix = '*';\n value = value.substring(0, value.length - 1);\n }\n\n // unescape any escaped operators to allow search for literal operators\n value = TableUtils.unescapeQuickTextFilter(value);\n switch (operation) {\n case '~':\n {\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))));\n }\n case '!~':\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))).not());\n case '!=':\n if (prefix === '*') {\n // Does not end with\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E$\"))).not());\n }\n if (suffix === '*') {\n // Does not start with\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i)^\\\\Q\".concat(value, \"\\\\E.*\"))).not());\n }\n return filter.notEqIgnoreCase(dh.FilterValue.ofString(value.toLowerCase()));\n case '=':\n if (prefix === '*') {\n // Ends with\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E$\"))));\n }\n if (suffix === '*') {\n // Starts with\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i)^\\\\Q\".concat(value, \"\\\\E.*\"))));\n }\n return filter.eqIgnoreCase(dh.FilterValue.ofString(value.toLowerCase()));\n default:\n break;\n }\n return null;\n }\n\n // eslint-disable-next-line class-methods-use-this\n makeQuickBooleanFilter(column, text) {\n var regex = /^(!=|=|!)?(.*)/;\n var result = regex.exec(\"\".concat(text).trim());\n if (result === null) {\n return null;\n }\n var [, operation, value] = result;\n var notEqual = operation === '!' || operation === '!=';\n var cleanValue = value.trim().toLowerCase();\n var filter = column.filter();\n try {\n var boolValue = TableUtils.makeBooleanValue(cleanValue);\n if (boolValue != null && boolValue) {\n filter = filter.isTrue();\n } else if (boolValue === null) {\n filter = filter.isNull();\n } else {\n filter = filter.isFalse();\n }\n return notEqual ? filter.not() : filter;\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Builds a date filter parsed from the text string which may or may not include an operator.\n * @param column The column to build the filter from, with or without a leading operator.\n * @param text The date string text to parse.\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n */\n makeQuickDateFilter(column, text, timeZone) {\n var cleanText = text.trim();\n var regex = /\\s*(>=|<=|=>|=<|>|<|!=|!|=)?(.*)/;\n var result = regex.exec(cleanText);\n if (result == null || result.length <= 2) {\n throw new Error(\"Unable to parse date filter: \".concat(text));\n }\n var operation = null;\n var dateText = null;\n [, operation, dateText] = result;\n var filterOperation = FilterType.eq;\n switch (operation) {\n case '<':\n filterOperation = FilterType.lessThan;\n break;\n case '<=':\n case '=<':\n filterOperation = FilterType.lessThanOrEqualTo;\n break;\n case '>':\n filterOperation = FilterType.greaterThan;\n break;\n case '>=':\n case '=>':\n filterOperation = FilterType.greaterThanOrEqualTo;\n break;\n case '!=':\n case '!':\n filterOperation = FilterType.notEq;\n break;\n case '=':\n case '==':\n default:\n filterOperation = FilterType.eq;\n break;\n }\n return this.makeQuickDateFilterWithOperation(column, dateText, filterOperation, timeZone);\n }\n\n /**\n * Builds a date filter parsed from the text string with the provided filter.\n * @param column The column to build the filter from.\n * @param text The date string text to parse, without an operator.\n * @param operation The filter operation to use.\n * @param timeZone The time zone to make this filter with. E.g. America/New_York\n */\n makeQuickDateFilterWithOperation(column, text, operation, timeZone) {\n var {\n dh\n } = this;\n var [startDate, endDate] = DateUtils.parseDateRange(dh, text, timeZone);\n var startValue = startDate != null ? dh.FilterValue.ofNumber(startDate) : null;\n var endValue = endDate != null ? dh.FilterValue.ofNumber(endDate) : null;\n var filter = column.filter();\n if (startValue == null) {\n return operation === FilterType.notEq ? filter.isNull().not() : filter.isNull();\n }\n switch (operation) {\n case FilterType.eq:\n {\n if (endValue != null) {\n var startFilter = filter.greaterThanOrEqualTo(startValue);\n var endFilter = filter.lessThan(endValue);\n return startFilter.and(endFilter);\n }\n return filter.eq(startValue);\n }\n case FilterType.lessThan:\n {\n return filter.lessThan(startValue);\n }\n case FilterType.lessThanOrEqualTo:\n {\n if (endValue != null) {\n return filter.lessThan(endValue);\n }\n return filter.lessThanOrEqualTo(startValue);\n }\n case FilterType.greaterThan:\n {\n if (endValue != null) {\n return filter.greaterThanOrEqualTo(endValue);\n }\n return filter.greaterThan(startValue);\n }\n case FilterType.greaterThanOrEqualTo:\n return filter.greaterThanOrEqualTo(startValue);\n case FilterType.notEq:\n {\n if (endValue != null) {\n var _startFilter = filter.lessThan(startValue);\n var _endFilter = filter.greaterThanOrEqualTo(endValue);\n return _startFilter.or(_endFilter);\n }\n return filter.notEq(startValue);\n }\n default:\n throw new Error(\"Invalid operator: \".concat(operation));\n }\n }\n makeQuickCharFilter(column, text) {\n var {\n dh\n } = this;\n var cleanText = \"\".concat(text).trim();\n var regex = /^(>=|<=|=>|=<|>|<|!=|=|!)?(null|\".\"|'.'|.)?(.*)/;\n var result = regex.exec(cleanText);\n var operation = null;\n var value = null;\n var overflow = null;\n if (result !== null && result.length > 3) {\n [, operation, value, overflow] = result;\n }\n if (overflow != null && overflow.trim().length > 0) {\n // Some bad characters after the number, bail out!\n return null;\n }\n if (value == null || value.length === 0) {\n return null;\n }\n if (operation == null) {\n operation = '=';\n }\n var filter = column.filter();\n if (value.toLowerCase() === 'null') {\n // Null is a special case!\n switch (operation) {\n case '=':\n return filter.isNull();\n case '!=':\n case '!':\n return filter.isNull().not();\n default:\n return null;\n }\n }\n\n // We need to put quotes around range operations or else the API fails\n var filterValue = dh.FilterValue.ofString(TableUtils.isRangeOperation(operation) ? TableUtils.quoteValue(value) : value);\n return TableUtils.makeRangeFilterWithOperation(filter, operation, filterValue);\n }\n makeAdvancedFilter(column, options, timeZone) {\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues\n } = options;\n var filter = null;\n for (var i = 0; i < filterItems.length; i += 1) {\n var filterItem = filterItems[i];\n var {\n selectedType,\n value\n } = filterItem;\n if (selectedType != null && selectedType.length > 0 && value != null && value.length > 0) {\n try {\n var newFilter = this.makeAdvancedValueFilter(column, selectedType, value, timeZone);\n if (newFilter != null) {\n if (i === 0) {\n filter = newFilter;\n } else if (filter !== null && i - 1 < filterOperators.length) {\n var filterOperator = filterOperators[i - 1];\n if (filterOperator === FilterOperator.and) {\n filter = filter.and(newFilter);\n } else if (filterOperator === FilterOperator.or) {\n filter = filter.or(newFilter);\n } else {\n log.error('Unexpected filter operator', filterOperator, newFilter);\n filter = null;\n break;\n }\n }\n } else {\n log.debug2('Empty filter ignored for', selectedType, value);\n }\n } catch (err) {\n log.error('Unable to create filter', err);\n filter = null;\n break;\n }\n }\n }\n var selectValueFilter = this.makeSelectValueFilter(column, selectedValues, invertSelection);\n if (selectValueFilter != null) {\n if (filter != null) {\n filter = filter.and(selectValueFilter);\n } else {\n filter = selectValueFilter;\n }\n }\n return filter;\n }\n makeAdvancedValueFilter(column, operation, value, timeZone) {\n var {\n dh\n } = this;\n if (TableUtils.isDateType(column.type)) {\n return this.makeQuickDateFilterWithOperation(column, value, operation, timeZone);\n }\n if (TableUtils.isNumberType(column.type) || TableUtils.isCharType(column.type)) {\n return this.makeQuickFilter(column, \"\".concat(TableUtils.getFilterOperatorString(operation)).concat(value));\n }\n var filterValue = this.makeFilterValue(column.type, value);\n var filter = column.filter();\n switch (operation) {\n case FilterType.eq:\n return filter.eq(filterValue);\n case FilterType.eqIgnoreCase:\n return filter.eqIgnoreCase(filterValue);\n case FilterType.notEq:\n return filter.notEq(filterValue);\n case FilterType.notEqIgnoreCase:\n return filter.notEqIgnoreCase(filterValue);\n case FilterType.greaterThan:\n return filter.greaterThan(filterValue);\n case FilterType.greaterThanOrEqualTo:\n return filter.greaterThanOrEqualTo(filterValue);\n case FilterType.lessThan:\n return filter.lessThan(filterValue);\n case FilterType.lessThanOrEqualTo:\n return filter.lessThanOrEqualTo(filterValue);\n case FilterType.isTrue:\n return filter.isTrue();\n case FilterType.isFalse:\n return filter.isFalse();\n case FilterType.isNull:\n return filter.isNull();\n case FilterType.contains:\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))));\n case FilterType.notContains:\n return filter.isNull().or(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E.*\"))).not());\n case FilterType.startsWith:\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i)^\\\\Q\".concat(value, \"\\\\E.*\"))));\n case FilterType.endsWith:\n return filter.isNull().not().and(filter.invoke('matches', dh.FilterValue.ofString(\"(?s)(?i).*\\\\Q\".concat(value, \"\\\\E$\"))));\n case FilterType.in:\n case FilterType.inIgnoreCase:\n case FilterType.notIn:\n case FilterType.notInIgnoreCase:\n case FilterType.invoke:\n default:\n throw new Error(\"Unexpected filter operation: \".concat(operation));\n }\n }\n\n /**\n * Apply a filter to a table that won't match anything.\n * @table The table to apply the filter to\n * @columnName The name of the column to apploy the filter to\n * @param timeout Timeout before cancelling the promise that waits for the next\n * dh.Table.EVENT_FILTERCHANGED event\n * @returns a Promise to the Table that resolves after the next\n * dh.Table.EVENT_FILTERCHANGED event\n */\n applyNeverFilter(table, columnName) {\n var _arguments3 = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments3.length > 2 && _arguments3[2] !== undefined ? _arguments3[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n if (table == null) {\n return null;\n }\n var column = table.findColumn(columnName);\n var filters = [_this3.makeNeverFilter(column)];\n yield _this3.applyFilter(table, filters, timeout);\n return table;\n })();\n }\n\n /**\n * Apply custom columns to a given table. Return a Promise that resolves with\n * the table once the dh.Table.EVENT_CUSTOMCOLUMNSCHANGED event has fired.\n * @param table The table to apply custom columns to.\n * @param columns The list of column expressions or definitions to apply.\n * @returns A Promise that will be resolved with the given table after the\n * columns are applied.\n */\n applyCustomColumns(table, columns) {\n var _arguments4 = arguments,\n _this4 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments4.length > 2 && _arguments4[2] !== undefined ? _arguments4[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n var {\n dh\n } = _this4;\n return TableUtils.executeAndWaitForEvent(t => t === null || t === void 0 ? void 0 : t.applyCustomColumns(columns), table, dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, timeout);\n })();\n }\n\n /**\n * Apply filters to a given table.\n * @param table Table to apply filters to\n * @param filters Filters to apply\n * @param timeout Timeout before cancelling the promise that waits for the next\n * dh.Table.EVENT_FILTERCHANGED event\n * @returns a Promise to the Table that resolves after the next\n * dh.Table.EVENT_FILTERCHANGED event\n */\n applyFilter(table, filters) {\n var _arguments5 = arguments,\n _this5 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments5.length > 2 && _arguments5[2] !== undefined ? _arguments5[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n var {\n dh\n } = _this5;\n return TableUtils.executeAndWaitForEvent(t => t === null || t === void 0 ? void 0 : t.applyFilter(filters), table, dh.Table.EVENT_FILTERCHANGED, timeout);\n })();\n }\n\n /**\n * Apply sorts to a given Table.\n * @param table The table to apply sorts to\n * @param sorts The sorts to apply\n * @param timeout Timeout before cancelling the promise that waits for the next\n * dh.Table.EVENT_SORTCHANGED event\n * @returns a Promise to the Table that resolves after the next\n * dh.Table.EVENT_SORTCHANGED event\n */\n applySort(table, sorts) {\n var _arguments6 = arguments,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var timeout = _arguments6.length > 2 && _arguments6[2] !== undefined ? _arguments6[2] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n var {\n dh\n } = _this6;\n return TableUtils.executeAndWaitForEvent(t => t === null || t === void 0 ? void 0 : t.applySort(sorts), table, dh.Table.EVENT_SORTCHANGED, timeout);\n })();\n }\n\n /**\n * Create a filter condition that results in zero results for a given column\n * @param column\n */\n makeNeverFilter(column) {\n var {\n dh\n } = this;\n var value = null;\n if (TableUtils.isTextType(column.type)) {\n // Use 'a' so that it can work for String or Character types\n value = dh.FilterValue.ofString('a');\n } else if (TableUtils.isBooleanType(column.type)) {\n value = dh.FilterValue.ofBoolean(true);\n } else if (TableUtils.isDateType(column.type)) {\n value = dh.FilterValue.ofNumber(dh.DateWrapper.ofJsDate(new Date()));\n } else {\n value = dh.FilterValue.ofNumber(0);\n }\n var eqFilter = column.filter().eq(value);\n var notEqFilter = column.filter().notEq(value);\n return eqFilter.and(notEqFilter);\n }\n\n /**\n * @param columnType The column type to make the filter value from.\n * @param value The value to make the filter value from.\n * @returns The FilterValue item for this column/value combination\n */\n makeFilterValue(columnType, value) {\n var {\n dh\n } = this;\n var type = TableUtils.getBaseType(columnType);\n if (TableUtils.isTextType(type)) {\n return dh.FilterValue.ofString(value);\n }\n if (TableUtils.isLongType(type)) {\n return dh.FilterValue.ofNumber(dh.LongWrapper.ofString(TableUtils.removeCommas(value)));\n }\n return dh.FilterValue.ofNumber(TableUtils.removeCommas(value));\n }\n\n /**\n * Takes a value and converts it to an `dh.FilterValue`\n *\n * @param columnType The column type to make the filter value from.\n * @param value The value to actually set\n * @returns The FilterValue item for this column/value combination\n */\n makeFilterRawValue(columnType, rawValue) {\n var {\n dh\n } = this;\n if (TableUtils.isCharType(columnType)) {\n return dh.FilterValue.ofString(typeof rawValue === 'number' ? String.fromCharCode(rawValue) : rawValue);\n }\n if (TableUtils.isTextType(columnType)) {\n return dh.FilterValue.ofString(rawValue);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return dh.FilterValue.ofBoolean(rawValue);\n }\n return dh.FilterValue.ofNumber(rawValue);\n }\n\n /**\n * Converts a string value to a value appropriate for the column\n * @param columnType The column type to make the value for\n * @param text The string value to make a type for\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n makeValue(columnType, text, timeZone) {\n var {\n dh\n } = this;\n if (text === 'null') {\n return null;\n }\n if (TableUtils.isTextType(columnType)) {\n return text;\n }\n if (TableUtils.isLongType(columnType)) {\n return dh.LongWrapper.ofString(TableUtils.removeCommas(text));\n }\n if (TableUtils.isBooleanType(columnType)) {\n return TableUtils.makeBooleanValue(text, true);\n }\n if (TableUtils.isDateType(columnType)) {\n var [date] = DateUtils.parseDateRange(dh, text, timeZone);\n return date;\n }\n if (TableUtils.isNumberType(columnType)) {\n return TableUtils.makeNumberValue(text);\n }\n log.error('Unexpected column type', columnType);\n return null;\n }\n\n /**\n * Create a filter using the selected items\n * Has a flag for invertSelection as we start from a \"Select All\" state and a user just deselects items.\n * Since there may be millions of distinct items, it's easier to build an inverse filter.\n * @param column The column to set the filter on\n * @param selectedValues The values that are selected\n * @param invertSelection Invert the selection (eg. All items are selected, then you deselect items)\n * @returns Returns a `in` or `notIn` FilterCondition as necessary, or null if no filtering should be applied (everything selected)\n */\n makeSelectValueFilter(column, selectedValues, invertSelection) {\n var {\n dh\n } = this;\n if (selectedValues.length === 0) {\n if (invertSelection) {\n // No filter means select everything\n return null;\n }\n\n // KLUDGE: Return a conflicting filter to show no results.\n // Could recognize this situation at a higher or lower level and pause updates on the\n // table, but this situation should be rare and that wouldn't be much gains for some added complexity\n return this.makeNeverFilter(column);\n }\n var values = [];\n var isNullSelected = false;\n for (var i = 0; i < selectedValues.length; i += 1) {\n var value = selectedValues[i];\n if (value == null) {\n isNullSelected = true;\n } else if (TableUtils.isTextType(column.type)) {\n values.push(dh.FilterValue.ofString(typeof value === 'number' ? String.fromCharCode(value) : value));\n } else if (TableUtils.isBooleanType(column.type)) {\n values.push(dh.FilterValue.ofBoolean(Boolean(value)));\n } else {\n values.push(dh.FilterValue.ofNumber(value));\n }\n }\n if (isNullSelected) {\n if (values.length > 0) {\n if (invertSelection) {\n return column.filter().isNull().not().and(column.filter().notIn(values));\n }\n return column.filter().isNull().or(column.filter().in(values));\n }\n if (invertSelection) {\n return column.filter().isNull().not();\n }\n return column.filter().isNull();\n }\n if (invertSelection) {\n return column.filter().notIn(values);\n }\n return column.filter().in(values);\n }\n}\n_defineProperty(TableUtils, \"dataType\", {\n BOOLEAN: 'boolean',\n CHAR: 'char',\n DATETIME: 'datetime',\n DECIMAL: 'decimal',\n INT: 'int',\n STRING: 'string',\n UNKNOWN: 'unknown'\n});\n_defineProperty(TableUtils, \"sortDirection\", {\n ascending: 'ASC',\n descending: 'DESC',\n reverse: 'REVERSE',\n none: null\n});\n_defineProperty(TableUtils, \"APPLY_TABLE_CHANGE_TIMEOUT_MS\", 30000);\n_defineProperty(TableUtils, \"REVERSE_TYPE\", Object.freeze({\n NONE: 'none',\n PRE_SORT: 'pre-sort',\n POST_SORT: 'post-sort'\n}));\n_defineProperty(TableUtils, \"NUMBER_REGEX\", /^-?\\d+(\\.\\d+)?$/);\n_defineProperty(TableUtils, \"executeAndWaitForEvent\", /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* (exec, table, eventType) {\n var timeout = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS;\n if (table == null) {\n return null;\n }\n var eventPromise = TableUtils.makeCancelableTableEventPromise(table, eventType, timeout);\n exec(table);\n yield eventPromise;\n return table;\n });\n return function (_x, _x2, _x3) {\n return _ref2.apply(this, arguments);\n };\n}());\nexport default TableUtils;\n//# sourceMappingURL=TableUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport TableUtils from \"./TableUtils.js\";\nimport { BooleanColumnFormatter, CharColumnFormatter, DateTimeColumnFormatter, DecimalColumnFormatter, DefaultColumnFormatter, IntegerColumnFormatter, StringColumnFormatter } from \"./formatters/index.js\";\nexport class Formatter {\n /**\n * Converts FormattingRule[] to Map\n * @param columnFormattingRules Array or column formatting rules\n * @returns Map of columnName-to-format Maps indexed by normalized dataType\n */\n static makeColumnFormatMap(columnFormattingRules) {\n if (columnFormattingRules == null) {\n return new Map();\n }\n return columnFormattingRules.reduce((map, next) => {\n var dataType = TableUtils.getNormalizedType(next.columnType);\n if (dataType === null) {\n return map;\n }\n if (!map.has(dataType)) {\n map.set(dataType, new Map());\n }\n var formatMap = map.get(dataType);\n formatMap === null || formatMap === void 0 ? void 0 : formatMap.set(next.columnName, next.format);\n return map;\n }, new Map());\n }\n\n /**\n * Creates a column formatting rule\n * @param columnType Normalized data type\n * @param columnName Column name\n * @param format Format object\n */\n static makeColumnFormattingRule(columnType, columnName, format) {\n return {\n columnType,\n columnName,\n format\n };\n }\n\n /**\n * @param dh JSAPI instance\n * @param columnFormattingRules Optional array of column formatting rules\n * @param dateTimeOptions Optional object with DateTime configuration\n * @param decimalFormatOptions Optional object with Decimal configuration\n * @param integerFormatOptions Optional object with Integer configuration\n * @param truncateNumbersWithPound Determine if numbers should be truncated w/ repeating # instead of ellipsis at the end\n */\n constructor(dh) {\n var columnFormattingRules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var dateTimeOptions = arguments.length > 2 ? arguments[2] : undefined;\n var decimalFormatOptions = arguments.length > 3 ? arguments[3] : undefined;\n var integerFormatOptions = arguments.length > 4 ? arguments[4] : undefined;\n var truncateNumbersWithPound = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n var showEmptyStrings = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true;\n var showNullStrings = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : true;\n _defineProperty(this, \"defaultColumnFormatter\", void 0);\n _defineProperty(this, \"typeFormatterMap\", void 0);\n _defineProperty(this, \"columnFormatMap\", void 0);\n _defineProperty(this, \"truncateNumbersWithPound\", void 0);\n _defineProperty(this, \"showEmptyStrings\", void 0);\n _defineProperty(this, \"showNullStrings\", void 0);\n // Formatting order:\n // - columnFormatMap[type][name]\n // - typeFormatterMap[type]\n // - defaultColumnFormatter\n\n this.defaultColumnFormatter = new DefaultColumnFormatter();\n\n // Default formatters by data type\n this.typeFormatterMap = new Map([[TableUtils.dataType.BOOLEAN, new BooleanColumnFormatter()], [TableUtils.dataType.CHAR, new CharColumnFormatter()], [TableUtils.dataType.DATETIME, new DateTimeColumnFormatter(dh, dateTimeOptions)], [TableUtils.dataType.DECIMAL, new DecimalColumnFormatter(dh, decimalFormatOptions)], [TableUtils.dataType.INT, new IntegerColumnFormatter(dh, integerFormatOptions)], [TableUtils.dataType.STRING, new StringColumnFormatter()]]);\n\n // Formats indexed by data type and column name\n this.columnFormatMap = Formatter.makeColumnFormatMap(columnFormattingRules);\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.showEmptyStrings = showEmptyStrings;\n this.showNullStrings = showNullStrings;\n }\n /**\n * Gets columnFormatMap indexed by name for a given column type, creates new Map entry if necessary\n * @param columnType column type\n * @param createIfNecessary create new entry if true\n * @returns Map of format strings indexed by column name or undefined if it doesn't exist\n */\n getColumnFormatMapForType(columnType) {\n var createIfNecessary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var dataType = TableUtils.getNormalizedType(columnType);\n if (dataType === null) {\n return undefined;\n }\n if (createIfNecessary && !this.columnFormatMap.has(dataType)) {\n this.columnFormatMap.set(dataType, new Map());\n }\n return this.columnFormatMap.get(dataType);\n }\n\n /**\n * Gets a column format object for a given column type and name\n * @param columnType column type\n * @param columnName column name\n * @returns format object or null for Default\n */\n getColumnFormat(columnType, columnName) {\n var _columnFormatMap$get;\n var columnFormatMap = this.getColumnFormatMapForType(columnType);\n return (_columnFormatMap$get = columnFormatMap === null || columnFormatMap === void 0 ? void 0 : columnFormatMap.get(columnName)) !== null && _columnFormatMap$get !== void 0 ? _columnFormatMap$get : null;\n }\n getColumnTypeFormatter(columnType) {\n var dataType = TableUtils.getNormalizedType(columnType);\n var columnTypeFormatter = this.defaultColumnFormatter;\n if (dataType) {\n var _this$typeFormatterMa;\n columnTypeFormatter = (_this$typeFormatterMa = this.typeFormatterMap.get(dataType)) !== null && _this$typeFormatterMa !== void 0 ? _this$typeFormatterMa : columnTypeFormatter;\n }\n return columnTypeFormatter;\n }\n\n /**\n * Gets formatted string for a given value, column type and name\n * @param value Value to format\n * @param columnType Column type used to determine the formatting settings\n * @param columnName Column name used to determine the formatting settings\n * @param formatOverride Format object passed to the formatter in place of the format defined in columnFormatMap\n */\n getFormattedString(value, columnType) {\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var formatOverride = arguments.length > 3 ? arguments[3] : undefined;\n if (value == null) {\n return '';\n }\n var formatter = this.getColumnTypeFormatter(columnType);\n var format = formatOverride || this.getColumnFormat(columnType, columnName);\n return formatter.format(value, format !== null && format !== void 0 ? format : undefined);\n }\n\n /**\n * Gets the timeZone name\n * @returns The time zone name E.g. America/New_York\n */\n get timeZone() {\n var _formatter$dhTimeZone;\n var formatter = this.typeFormatterMap.get(TableUtils.dataType.DATETIME);\n return formatter === null || formatter === void 0 ? void 0 : (_formatter$dhTimeZone = formatter.dhTimeZone) === null || _formatter$dhTimeZone === void 0 ? void 0 : _formatter$dhTimeZone.id;\n }\n}\nexport default Formatter;\n//# sourceMappingURL=Formatter.js.map","import { TableColumnFormatter } from \"./formatters/index.js\";\nexport function getColumnFormats(settings) {\n if (settings && settings.formatter) {\n var {\n formatter\n } = settings;\n return formatter;\n }\n return undefined;\n}\nexport function getDateTimeFormatterOptions(settings) {\n return {\n timeZone: settings === null || settings === void 0 ? void 0 : settings.timeZone,\n defaultDateTimeFormatString: settings === null || settings === void 0 ? void 0 : settings.defaultDateTimeFormat,\n showTimeZone: settings === null || settings === void 0 ? void 0 : settings.showTimeZone,\n showTSeparator: settings === null || settings === void 0 ? void 0 : settings.showTSeparator\n };\n}\n\n/**\n * Check if the formatter has a custom format defined for the column name and type\n * @param formatter Formatter to check\n * @param columnName Column name\n * @param columnType Column type\n * @returns True, if a custom format is defined\n */\nexport function isCustomColumnFormatDefined(formatter, columnName, columnType) {\n var columnFormat = formatter.getColumnFormat(columnType, columnName);\n return columnFormat != null && (columnFormat.type === TableColumnFormatter.TYPE_CONTEXT_PRESET || columnFormat.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM);\n}\nexport default {\n getColumnFormats,\n getDateTimeFormatterOptions,\n isCustomColumnFormatDefined\n};\n//# sourceMappingURL=FormatterUtils.js.map","import { createContext } from 'react';\nexport var UserOverrideContext = /*#__PURE__*/createContext({});\nexport var UserPermissionsOverrideContext = /*#__PURE__*/createContext({});\nexport var UserContext = /*#__PURE__*/createContext(null);\n//# sourceMappingURL=UserContexts.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { forwardRef, lazy, Suspense } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar IrisGrid = /*#__PURE__*/lazy(() => import('./IrisGrid.js'));\nvar LazyIrisGrid = /*#__PURE__*/forwardRef((\n// This creates the correct type to make defaultProps optional\nprops, ref) => /*#__PURE__*/_jsx(Suspense, {\n fallback: /*#__PURE__*/_jsx(LoadingOverlay, {}),\n children: /*#__PURE__*/_jsx(IrisGrid, _objectSpread({\n ref: ref\n }, props))\n}));\nLazyIrisGrid.displayName = 'LazyIrisGrid';\nexport default LazyIrisGrid;\n//# sourceMappingURL=LazyIrisGrid.js.map","var AdvancedSettingsType;\n(function (AdvancedSettingsType) {\n AdvancedSettingsType[\"FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS\"] = \"filter-control-change-clears-all-filters\";\n AdvancedSettingsType[\"LINK_CHANGE_CLEARS_ALL_FILTERS\"] = \"link-change-clears-all-filters\";\n})(AdvancedSettingsType || (AdvancedSettingsType = {}));\nexport default AdvancedSettingsType;\n//# sourceMappingURL=AdvancedSettingsType.js.map","import AdvancedSettingsType from \"./AdvancedSettingsType.js\";\nvar DEFAULTS = Object.freeze([[AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS, false], [AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS, false]]);\nexport default {\n DEFAULTS\n};\n//# sourceMappingURL=AdvancedSettings.js.map","var AggregationOperation;\n(function (AggregationOperation) {\n AggregationOperation[\"COUNT\"] = \"Count\";\n AggregationOperation[\"MIN\"] = \"Min\";\n AggregationOperation[\"MAX\"] = \"Max\";\n AggregationOperation[\"SUM\"] = \"Sum\";\n AggregationOperation[\"ABS_SUM\"] = \"AbsSum\";\n AggregationOperation[\"VAR\"] = \"Var\";\n AggregationOperation[\"AVG\"] = \"Avg\";\n AggregationOperation[\"STD\"] = \"Std\";\n AggregationOperation[\"FIRST\"] = \"First\";\n AggregationOperation[\"LAST\"] = \"Last\";\n AggregationOperation[\"SKIP\"] = \"Skip\";\n AggregationOperation[\"COUNT_DISTINCT\"] = \"CountDistinct\";\n AggregationOperation[\"DISTINCT\"] = \"Distinct\";\n AggregationOperation[\"UNIQUE\"] = \"Unique\";\n})(AggregationOperation || (AggregationOperation = {}));\nexport default AggregationOperation;\n//# sourceMappingURL=AggregationOperation.js.map","import { TableUtils } from '@deephaven/jsapi-utils';\nimport AggregationOperation from \"./AggregationOperation.js\";\nexport var SELECTABLE_OPTIONS = [AggregationOperation.SUM, AggregationOperation.ABS_SUM, AggregationOperation.MIN, AggregationOperation.MAX, AggregationOperation.VAR, AggregationOperation.AVG, AggregationOperation.STD, AggregationOperation.FIRST, AggregationOperation.LAST, AggregationOperation.COUNT_DISTINCT, AggregationOperation.DISTINCT, AggregationOperation.COUNT, AggregationOperation.UNIQUE];\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport var isRollupOperation = type => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport var isValidOperation = (operationType, columnType) => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return true;\n case AggregationOperation.MIN:\n case AggregationOperation.MAX:\n return TableUtils.isNumberType(columnType) || TableUtils.isDateType(columnType) || TableUtils.isTextType(columnType);\n case AggregationOperation.SUM:\n case AggregationOperation.ABS_SUM:\n case AggregationOperation.VAR:\n case AggregationOperation.AVG:\n case AggregationOperation.STD:\n return TableUtils.isNumberType(columnType);\n case AggregationOperation.SKIP:\n return false;\n // No default case - if AggregationOperation is added, we'll get a compile time error\n }\n};\n\nexport var filterValidColumns = (columns, operationType) => columns.filter(c => c.isProxy !== true && isValidOperation(operationType, c.type));\nexport var getOperationColumnNames = (columns, operationType, selected, invert) => filterValidColumns(columns, operationType).map(_ref => {\n var {\n name\n } = _ref;\n return name;\n}).filter(name => selected.includes(name) ? !invert : invert);\nexport default {\n isRollupOperation,\n filterValidColumns,\n getOperationColumnNames\n};\n//# sourceMappingURL=AggregationUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport class AssertionError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isAssertionFailed\", true);\n }\n}\nexport default AssertionError;\n//# sourceMappingURL=AssertionError.js.map","import { AssertionError } from \"./errors/index.js\";\nexport function isEditableGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.isEditable) !== undefined;\n}\nexport function assertIsEditableGridModel(model) {\n if (!isEditableGridModel(model)) {\n throw new AssertionError(\"Expected 'model' to be editable, but received \".concat(model));\n }\n}\n\n/**\n * Edit operation when applying multiple edits\n */\n\n/**\n * Model for an editable grid\n */\n//# sourceMappingURL=EditableGridModel.js.map","export function isExpandableGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.hasExpandableRows) !== undefined;\n}\n\n/**\n * Expandable grid model. Allows for a grid with rows that can expand (e.g. A Tree Table)\n */\n//# sourceMappingURL=ExpandableGridModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n// Also exported via GridRange.SELECTION_DIRECTION\nexport var SELECTION_DIRECTION;\n(function (SELECTION_DIRECTION) {\n SELECTION_DIRECTION[\"DOWN\"] = \"DOWN\";\n SELECTION_DIRECTION[\"UP\"] = \"UP\";\n SELECTION_DIRECTION[\"LEFT\"] = \"LEFT\";\n SELECTION_DIRECTION[\"RIGHT\"] = \"RIGHT\";\n})(SELECTION_DIRECTION || (SELECTION_DIRECTION = {}));\nexport class GridRange {\n /**\n * Returns a normalized array of indexes ensuring left <= right and top <= bottom\n * @param startColumn Start column index\n * @param startRow Start row index\n * @param endColumn End column index\n * @param endRow End row index\n * @returns Array containing normalized indexes [left, top, right, bottom]\n */\n static normalize(startColumn, startRow, endColumn, endRow) {\n var left = startColumn;\n var top = startRow;\n var right = endColumn;\n var bottom = endRow;\n if (left != null && right != null && right < left) {\n left = right;\n right = startColumn;\n }\n if (top != null && bottom != null && bottom < top) {\n top = bottom;\n bottom = startRow;\n }\n return [left, top, right, bottom];\n }\n\n /**\n * Makes a GridRange ensuring startColumn <= endColumn, startRow <= endRow\n * @param startColumn Start column index\n * @param startRow Start row index\n * @param endColumn End column index\n * @param endRow End row index\n * @returns Normalized GridRange\n */\n static makeNormalized(startColumn, startRow, endColumn, endRow) {\n return new GridRange(...GridRange.normalize(startColumn, startRow, endColumn, endRow));\n }\n\n /**\n * Creates a GridRange representing a single cell\n * @param column Column index\n * @param row Row index\n * @returns GridRange representing the cell\n */\n static makeCell(column, row) {\n return new GridRange(column, row, column, row);\n }\n\n /**\n * Creates a GridRange representing an infinite length column\n * @param column Column index\n * @returns GridRange representing the column\n */\n static makeColumn(column) {\n return new GridRange(column, null, column, null);\n }\n\n /**\n * Creates a GridRange representing an infinite length row\n * @param row Row index\n * @returns GridRange representing the row\n */\n static makeRow(row) {\n return new GridRange(null, row, null, row);\n }\n\n /**\n * Returns the minimum value between 2 range indexes or null if at least 1 is null\n * @param index1 First grid range index\n * @param index2 Second grid range index\n * @returns Minimum index or null if either index is null\n */\n static minOrNull(index1, index2) {\n if (index1 == null || index2 == null) {\n return null;\n }\n return Math.min(index1, index2);\n }\n\n /**\n * Returns the maximum value between 2 range indexes or null if at least 1 is null\n * @param index1 First grid range index\n * @param index2 Second grid range index\n * @returns Maximum index or null if either index is null\n */\n static maxOrNull(index1, index2) {\n if (index1 == null || index2 == null) {\n return null;\n }\n return Math.max(index1, index2);\n }\n\n /**\n * Consolidate the passed in ranges to the minimum set, merging overlapping ranges.\n * @param ranges The ranges to consolidate\n * @returns Consolidated ranges\n */\n static consolidate(ranges) {\n var result = ranges.slice();\n var wasModified = true;\n while (wasModified) {\n wasModified = false;\n for (var i = 0; i < result.length && !wasModified; i += 1) {\n var range = result[i];\n for (var j = result.length - 1; j > i; j -= 1) {\n var other = result[j];\n\n // If one contains the other, we can just keep the bigger one\n if (range.contains(other)) {\n result.splice(j, 1);\n } else if (other.contains(range)) {\n wasModified = true;\n result[i] = other;\n result.splice(j, 1);\n break;\n } else if (range.startRow === other.startRow && range.endRow === other.endRow) {\n if (range.touches(other)) {\n // If the start/end rows match, and columns touch, consolidate\n var {\n startRow,\n endRow\n } = range;\n var startColumn = GridRange.minOrNull(range.startColumn, other.startColumn);\n var endColumn = GridRange.maxOrNull(range.endColumn, other.endColumn);\n wasModified = true;\n result[i] = new GridRange(startColumn, startRow, endColumn, endRow);\n result.splice(j, 1);\n break;\n }\n } else if (range.startColumn === other.startColumn && range.endColumn === other.endColumn) {\n if (range.touches(other)) {\n // If the start/end rows match, and columns touch, consolidate\n var {\n startColumn: _startColumn,\n endColumn: _endColumn\n } = range;\n var _startRow = GridRange.minOrNull(range.startRow, other.startRow);\n var _endRow = GridRange.maxOrNull(range.endRow, other.endRow);\n wasModified = true;\n result[i] = new GridRange(_startColumn, _startRow, _endColumn, _endRow);\n result.splice(j, 1);\n break;\n }\n }\n }\n }\n }\n return result;\n }\n\n /**\n * Checks if the 1-D ranges between 2 index pairs overlap or are continuous.\n * For example ranges [0, 1] and [2, 3] are continuous and will return true.\n * [0, 1] and [1, 3] overlap and return true.\n * [0, 1] and [3, 4] do not overlap and have a gap so this will return false.\n * @param start1 Start of 1st range\n * @param end1 End of 1st range\n * @param start2 Start of 2nd range\n * @param end2 End of 2nd range\n * @returns True if the ranges overlap or touch, else false\n */\n static isAxisRangeTouching(start1, end1, start2, end2) {\n if (start1 == null) {\n if (end1 == null) {\n return true;\n }\n if (start2 == null) {\n return true;\n }\n return start2 <= end1 + 1;\n }\n if (end1 == null) {\n if (end2 == null) {\n return true;\n }\n return end2 >= start1 - 1;\n }\n if (start2 == null) {\n if (end2 == null) {\n return true;\n }\n return start1 <= end2 + 1;\n }\n if (end2 == null) {\n return end1 >= start2 - 1;\n }\n if (start2 >= start1 - 1) {\n return start2 <= end1 + 1;\n }\n return end2 >= start1 - 1;\n }\n\n /**\n * Checks if 2 arrays of ranges are the same ranges\n * @param ranges1 First array of ranges\n * @param ranges2 Second array of ranges\n * @returns True if the arrays contain the same ranges in the same order\n */\n static rangeArraysEqual(ranges1, ranges2) {\n if (ranges1 === ranges2) {\n return true;\n }\n if (ranges1 == null || ranges2 == null || ranges1.length !== ranges2.length) {\n return false;\n }\n for (var i = 0; i < ranges1.length; i += 1) {\n if (!ranges1[i].equals(ranges2[i])) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Get the intersection (overlapping area) of two ranges\n * @param range One range to check for the intersection\n * @param otherRange The other range to check for the intersection\n * @returns Intersection of the two ranges. If they do not intersect, returns `null`.\n */\n static intersection(range, otherRange) {\n var _startColumn2, _endColumn2, _startRow2, _endRow2, _endColumn3, _endRow3;\n if (range.equals(otherRange)) {\n return range;\n }\n var {\n startColumn,\n startRow,\n endColumn,\n endRow\n } = range;\n startColumn = startColumn != null && otherRange.startColumn != null ? Math.max(startColumn, otherRange.startColumn) : (_startColumn2 = startColumn) !== null && _startColumn2 !== void 0 ? _startColumn2 : otherRange.startColumn;\n endColumn = endColumn != null && otherRange.endColumn != null ? Math.min(endColumn, otherRange.endColumn) : (_endColumn2 = endColumn) !== null && _endColumn2 !== void 0 ? _endColumn2 : otherRange.endColumn;\n startRow = startRow != null && otherRange.startRow != null ? Math.max(startRow, otherRange.startRow) : (_startRow2 = startRow) !== null && _startRow2 !== void 0 ? _startRow2 : otherRange.startRow;\n endRow = endRow != null && otherRange.endRow != null ? Math.min(endRow, otherRange.endRow) : (_endRow2 = endRow) !== null && _endRow2 !== void 0 ? _endRow2 : otherRange.endRow;\n if (startColumn != null && startColumn > ((_endColumn3 = endColumn) !== null && _endColumn3 !== void 0 ? _endColumn3 : -1) || startRow != null && startRow > ((_endRow3 = endRow) !== null && _endRow3 !== void 0 ? _endRow3 : -1)) {\n return null;\n }\n return new GridRange(startColumn, startRow, endColumn, endRow);\n }\n\n /**\n * Subtracts 1 range from another\n * @param range The range to be subtracted from\n * @param subtractRange The range to subtract from within this range\n * @returns The ranges needed to represent the remaining\n */\n static subtractFromRange(range, subtractRange) {\n var result = [];\n\n // Make it a little easier by finding only the part the subtraction range intersects\n var subtract = GridRange.intersection(range, subtractRange);\n if (subtract == null) {\n return [range];\n }\n\n // Go through each of the quadrants for deselection, there can be up to 4\n // Top quadrant (above the subtracted area)\n if (subtract.startRow != null && (range.startRow == null || range.startRow < subtract.startRow)) {\n result.push(new GridRange(range.startColumn, range.startRow, range.endColumn, subtract.startRow - 1));\n }\n\n // middle left\n if (subtract.startColumn != null && (range.startColumn == null || range.startColumn < subtract.startColumn)) {\n result.push(new GridRange(range.startColumn, subtract.startRow, subtract.startColumn - 1, subtract.endRow));\n }\n\n // middle right\n if (subtract.endColumn != null && (range.endColumn == null || range.endColumn > subtract.endColumn)) {\n result.push(new GridRange(subtract.endColumn + 1, subtract.startRow, range.endColumn, subtract.endRow));\n }\n\n // Bottom quadrant\n if (subtract.endRow != null && (range.endRow == null || range.endRow > subtract.endRow)) {\n result.push(new GridRange(range.startColumn, subtract.endRow + 1, range.endColumn, range.endRow));\n }\n return result;\n }\n\n /**\n * Subtract a range from multiple ranges\n * @param ranges The ranges to be subtracted from\n * @param subtractRange The range to subtract from within these ranges\n * @returns The ranges needed to represent the remaining\n */\n static subtractFromRanges(ranges, subtractRange) {\n var result = [];\n for (var i = 0; i < ranges.length; i += 1) {\n result.push(...GridRange.subtractFromRange(ranges[i], subtractRange));\n }\n return result;\n }\n\n /**\n * Subtract multiple ranges from multiple ranges\n * @param ranges The ranges to be subtracted from\n * @param subtractRanges The ranges to subtract from within these ranges\n * @returns The ranges needed to represent the remaining\n */\n static subtractRangesFromRanges(ranges, subtractRanges) {\n var result = [...ranges];\n for (var i = 0; i < subtractRanges.length; i += 1) {\n result = GridRange.subtractFromRanges(result, subtractRanges[i]);\n }\n return result;\n }\n\n /**\n * Test if a given range is bounded (all values are non-null)\n * @param range The range to test\n * @returns True if this range is bounded, false otherwise\n */\n static isBounded(range) {\n return range.startRow != null && range.startColumn != null && range.endRow != null && range.endColumn != null;\n }\n\n /**\n * Converts any GridRange passed in that is a full row or column selection to be bound\n * to the `columnCount` and `rowCount` passed in\n *\n * @param range The range to get the bounded range of\n * @param columnCount The number of columns\n * @param rowCount The number of rows\n * @returns The passed in GridRange with any null values filled in\n */\n static boundedRange(range, columnCount, rowCount) {\n var _range$startColumn, _range$startRow, _range$endColumn, _range$endRow;\n if (GridRange.isBounded(range)) {\n return range;\n }\n return new GridRange((_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0, (_range$startRow = range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : 0, (_range$endColumn = range.endColumn) !== null && _range$endColumn !== void 0 ? _range$endColumn : columnCount - 1, (_range$endRow = range.endRow) !== null && _range$endRow !== void 0 ? _range$endRow : rowCount - 1);\n }\n\n /**\n * Converts the GridRanges passed in to be bound to the `columnCount` and `rowCount` passed in\n *\n * @param ranges The ranges to get the bounded ranges of\n * @param columnCount The number of columns\n * @param rowCount The number of rows\n * @returns The passed in GridRange with any null values filled in\n */\n static boundedRanges(ranges, columnCount, rowCount) {\n return ranges.map(r => GridRange.boundedRange(r, columnCount, rowCount));\n }\n\n /**\n * Offsets a GridRange by the specified amount in the x and y directions\n *\n * @param range The range to offset\n * @param columnOffset The number of columns to offset\n * @param rowOffset The number of rows to offset\n * @returns The new grid range offset from the original\n */\n static offset(range, columnOffset, rowOffset) {\n return new GridRange(range.startColumn != null ? range.startColumn + columnOffset : null, range.startRow != null ? range.startRow + rowOffset : null, range.endColumn != null ? range.endColumn + columnOffset : null, range.endRow != null ? range.endRow + rowOffset : null);\n }\n\n /**\n * Get the next cell given the selected ranges and the current cell\n * @param ranges The selected bounded ranges within the grid\n * @param column The cursor column, or null if none focused\n * @param row The cursor row, or null if none focused\n * @param direction The direction in which to select next\n * @returns The next cell to focus, or null if there should be no more focus\n */\n static nextCell(ranges) {\n var column = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var row = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var direction = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : GridRange.SELECTION_DIRECTION.DOWN;\n if (ranges.length === 0) {\n return null;\n }\n var rangeIndex = -1;\n if (column != null && row != null) {\n rangeIndex = ranges.findIndex(r => r.containsCell(column, row));\n if (rangeIndex >= 0) {\n var range = ranges[rangeIndex];\n var nextCell = range.nextCell(column, row, direction);\n if (nextCell != null) {\n return nextCell;\n }\n }\n }\n\n // Otherwise go to the start of the next range (could be same range if only one range)\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n case GridRange.SELECTION_DIRECTION.RIGHT:\n {\n var nextRangeIndex = rangeIndex < ranges.length - 1 ? rangeIndex + 1 : 0;\n var nextRange = ranges[nextRangeIndex];\n return nextRange.startCell(direction);\n }\n case GridRange.SELECTION_DIRECTION.LEFT:\n case GridRange.SELECTION_DIRECTION.UP:\n {\n var _nextRangeIndex = rangeIndex > 0 ? rangeIndex - 1 : ranges.length - 1;\n var _nextRange = ranges[_nextRangeIndex];\n return _nextRange.startCell(direction);\n }\n default:\n throw new Error(\"Invalid direction: \".concat(direction));\n }\n }\n\n /**\n * Count the number of cells in the provided grid ranges\n * @param ranges The ranges to count the rows of\n * @returns The number of cells in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static cellCount(ranges) {\n return ranges.reduce((cellCount, range) => {\n var _range$endRow2, _range$startRow2, _range$endColumn2, _range$startColumn2;\n return cellCount + (((_range$endRow2 = range.endRow) !== null && _range$endRow2 !== void 0 ? _range$endRow2 : NaN) - ((_range$startRow2 = range.startRow) !== null && _range$startRow2 !== void 0 ? _range$startRow2 : NaN) + 1) * (((_range$endColumn2 = range.endColumn) !== null && _range$endColumn2 !== void 0 ? _range$endColumn2 : NaN) - ((_range$startColumn2 = range.startColumn) !== null && _range$startColumn2 !== void 0 ? _range$startColumn2 : NaN) + 1);\n }, 0);\n }\n\n /**\n * Count the number of rows in the provided grid ranges\n * @param ranges The ranges to count the rows of\n * @returns The number of rows in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static rowCount(ranges) {\n return ranges.reduce((rowCount, range) => {\n var _range$endRow3, _range$startRow3;\n return rowCount + ((_range$endRow3 = range.endRow) !== null && _range$endRow3 !== void 0 ? _range$endRow3 : NaN) - ((_range$startRow3 = range.startRow) !== null && _range$startRow3 !== void 0 ? _range$startRow3 : NaN) + 1;\n }, 0);\n }\n\n /**\n * Count the number of columns in the provided grid ranges\n * @param ranges The ranges to count the columns of\n * @returns The number of columns in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static columnCount(ranges) {\n return ranges.reduce((columnCount, range) => {\n var _range$endColumn3, _range$startColumn3;\n return columnCount + ((_range$endColumn3 = range.endColumn) !== null && _range$endColumn3 !== void 0 ? _range$endColumn3 : NaN) - ((_range$startColumn3 = range.startColumn) !== null && _range$startColumn3 !== void 0 ? _range$startColumn3 : NaN) + 1;\n }, 0);\n }\n\n /**\n * Check if the provided ranges contain the provided cell\n * @param ranges The ranges to check\n * @param column The column index\n * @param row The row index\n * @returns True if the cell is within the provided ranges, false otherwise.\n */\n static containsCell(ranges, column, row) {\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n if (range.containsCell(column, row)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Iterate through each cell in the provided ranges\n * @param ranges The ranges to iterate through\n * @param {(column: number, row: number, index: number) => void} callback The callback to execute. `index` is the index within that range\n * @param {GridRange.SELECTION_DIRECTION} direction The direction to iterate in\n */\n static forEachCell(ranges, callback) {\n var direction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : GridRange.SELECTION_DIRECTION.RIGHT;\n for (var i = 0; i < ranges.length; i += 1) {\n ranges[i].forEach(callback, direction);\n }\n }\n constructor(startColumn, startRow, endColumn, endRow) {\n _defineProperty(this, \"startColumn\", void 0);\n _defineProperty(this, \"startRow\", void 0);\n _defineProperty(this, \"endColumn\", void 0);\n _defineProperty(this, \"endRow\", void 0);\n this.startColumn = startColumn;\n this.startRow = startRow;\n this.endColumn = endColumn;\n this.endRow = endRow;\n }\n\n /**\n * Checks if the provided range is equivalent to this range (same start and end column/row indexes)\n * @param other Grid range to check against\n * @returns True if the ranges cover the same area\n */\n equals(other) {\n return this.startColumn === other.startColumn && this.startRow === other.startRow && this.endColumn === other.endColumn && this.endRow === other.endRow;\n }\n\n /**\n * Checks if this GridRange contains another range\n * @param other The range to check\n * @returns True if this GridRange completely contains `other`\n * */\n contains(other) {\n return (this.startColumn == null || other.startColumn != null && this.startColumn <= other.startColumn) && (this.startRow == null || other.startRow != null && this.startRow <= other.startRow) && (this.endColumn == null || other.endColumn != null && this.endColumn >= other.endColumn) && (this.endRow == null || other.endRow != null && this.endRow >= other.endRow);\n }\n\n /**\n * Check if the provided cell is in this range\n * @param column The column to check\n * @param row The row to check\n * @returns True if this cell is within this range\n */\n containsCell(column, row) {\n if (column == null || row == null) {\n return false;\n }\n return (this.startColumn == null || this.startColumn <= column) && (this.endColumn == null || this.endColumn >= column) && (this.startRow == null || this.startRow <= row) && (this.endRow == null || this.endRow >= row);\n }\n\n /**\n * Check if the provided range touches (or overlaps) this GridRange\n * Effectively checks if the 2 ranges could be represented by 1 continuous range\n * @param other The range to check\n * @returns True if this GridRange touches `other`\n * */\n touches(other) {\n return GridRange.isAxisRangeTouching(this.startRow, this.endRow, other.startRow, other.endRow) && GridRange.isAxisRangeTouching(this.startColumn, this.endColumn, other.startColumn, other.endColumn);\n }\n\n /**\n * Subtracts a range from this range\n * @param other The range to deselect from within this range\n * @returns The ranges needed to represent the remaining\n */\n subtract(other) {\n return GridRange.subtractFromRange(this, other);\n }\n\n /**\n * Get the first cell in this range. Throws if this range is unbounded.\n *\n * @param direction The direction to get the starting cell in. Defaults to DOWN\n * @returns The first cell in this range in the direction specified\n */\n startCell() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : GridRange.SELECTION_DIRECTION.DOWN;\n if (!GridRange.isBounded(this)) {\n throw new Error('Cannot get the startCell of an unbounded range');\n }\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n case GridRange.SELECTION_DIRECTION.RIGHT:\n return {\n column: this.startColumn,\n row: this.startRow\n };\n case GridRange.SELECTION_DIRECTION.LEFT:\n case GridRange.SELECTION_DIRECTION.UP:\n {\n return {\n column: this.endColumn,\n row: this.endRow\n };\n }\n default:\n throw new Error(\"Invalid direction: \".concat(direction));\n }\n }\n\n /**\n * Get the next cell in the direction specified. Throws if this range is unbounded.\n * If already at the bounds of the range in that direction, wrap to the next column or row\n * If at the end of the entire range, return null\n * If outside of the range, returns the next cell closest within this range.\n *\n * @param column The cursor column\n * @param row The cursor row\n * @param direction The direction to go in\n * @returns The next cell in the direction specified, or `null` if at the end of the range\n */\n nextCell(column, row, direction) {\n if (!GridRange.isBounded(this)) {\n throw new Error('Bounded range required');\n }\n if (column == null || row == null) {\n throw new Error('Require a non-null cursor');\n }\n var {\n startColumn,\n endColumn,\n startRow,\n endRow\n } = this;\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n if (row < endRow) {\n return {\n column,\n row: Math.max(row + 1, startRow)\n };\n }\n if (column < endColumn) {\n return {\n column: Math.max(column + 1, startColumn),\n row: startRow\n };\n }\n break;\n case GridRange.SELECTION_DIRECTION.UP:\n if (row > startRow) {\n return {\n column,\n row: Math.min(row - 1, endRow)\n };\n }\n if (column > startColumn) {\n return {\n column: Math.min(column - 1, endColumn),\n row: endRow\n };\n }\n break;\n case GridRange.SELECTION_DIRECTION.RIGHT:\n if (column < endColumn) {\n return {\n column: Math.max(column + 1, startColumn),\n row\n };\n }\n if (row < endRow) {\n return {\n column: startColumn,\n row: Math.max(row + 1, startRow)\n };\n }\n break;\n case GridRange.SELECTION_DIRECTION.LEFT:\n if (column > startColumn) {\n return {\n column: Math.min(column - 1, endColumn),\n row\n };\n }\n if (row > startRow) {\n return {\n column: endColumn,\n row: Math.min(row - 1, endRow)\n };\n }\n break;\n default:\n throw new Error(\"Invalid direction: \".concat(direction));\n }\n return null;\n }\n\n /**\n * Iterate through each cell in the range\n * @param callback Callback to execute. `index` is the index within this range\n * @param direction The direction to iterate in\n */\n forEach(callback) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : GridRange.SELECTION_DIRECTION.RIGHT;\n var i = 0;\n var {\n column: c,\n row: r\n } = this.startCell(direction);\n while (c != null && r != null) {\n var _this$nextCell;\n callback(c, r, i);\n i += 1;\n ({\n column: c,\n row: r\n } = (_this$nextCell = this.nextCell(c, r, direction)) !== null && _this$nextCell !== void 0 ? _this$nextCell : {});\n }\n }\n}\n_defineProperty(GridRange, \"SELECTION_DIRECTION\", SELECTION_DIRECTION);\nexport default GridRange;\n//# sourceMappingURL=GridRange.js.map","export function isAxisRange(range) {\n return Array.isArray(range) && range.length === 2 && (range[0] === null || typeof range[0] === 'number') && (range[1] === null || typeof range[1] === 'number');\n}\nexport function assertAxisRange(range) {\n if (!isAxisRange(range)) {\n throw new Error(\"Expected axis range. Received: \".concat(range));\n }\n}\nexport function isBoundedAxisRange(range) {\n return isAxisRange(range) && range[0] != null && range[1] != null;\n}\nexport function assertBoundedAxisRange(range) {\n if (!isBoundedAxisRange(range)) {\n throw new Error(\"Expected bounded axis range. Received: \".concat(range));\n }\n}\n//# sourceMappingURL=GridAxisRange.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport clamp from 'lodash.clamp';\nimport { find as linkifyFind } from 'linkifyjs';\nimport { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';\nimport GridRange from \"./GridRange.js\";\nimport { isBoundedAxisRange } from \"./GridAxisRange.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nexport function isLinkToken(token) {\n return (token === null || token === void 0 ? void 0 : token.href) !== undefined;\n}\nexport class GridUtils {\n // use same constant as chrome source for windows\n // https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n\n /**\n * Get the GridPoint for the coordinates provided\n * @param x The grid x coordinate\n * @param y The grid y coordinate\n * @param metrics The grid metrics\n * @returns The GridPoint including the column/row information\n */\n static getGridPointFromXY(x, y, metrics) {\n var column = GridUtils.getColumnAtX(x, metrics);\n var row = GridUtils.getRowAtY(y, metrics);\n var columnHeaderDepth = GridUtils.getColumnHeaderDepthAtY(y, metrics);\n return {\n x,\n y,\n row,\n column,\n columnHeaderDepth\n };\n }\n static getCellInfoFromXY(x, y, metrics) {\n var {\n row,\n column\n } = GridUtils.getGridPointFromXY(x, y, metrics);\n var {\n allColumnWidths,\n allRowHeights,\n allColumnXs,\n allRowYs,\n modelColumns,\n modelRows\n } = metrics;\n var modelRow = row !== null ? modelRows.get(row) : null;\n var modelColumn = column !== null ? modelColumns.get(column) : null;\n var left = column !== null ? allColumnXs.get(column) : null;\n var top = row !== null ? allRowYs.get(row) : null;\n var columnWidth = column !== null ? allColumnWidths.get(column) : null;\n var rowHeight = row !== null ? allRowHeights.get(row) : null;\n return {\n row,\n column,\n modelRow: modelRow !== null && modelRow !== void 0 ? modelRow : null,\n modelColumn: modelColumn !== null && modelColumn !== void 0 ? modelColumn : null,\n left: left !== null && left !== void 0 ? left : null,\n top: top !== null && top !== void 0 ? top : null,\n columnWidth: columnWidth !== null && columnWidth !== void 0 ? columnWidth : null,\n rowHeight: rowHeight !== null && rowHeight !== void 0 ? rowHeight : null\n };\n }\n static getColumnHeaderDepthAtY(y, metrics) {\n var row = GridUtils.getRowAtY(y, metrics);\n var {\n columnHeaderHeight,\n columnHeaderMaxDepth\n } = metrics;\n if (row === null && y <= columnHeaderHeight * columnHeaderMaxDepth) {\n return clamp(columnHeaderMaxDepth - Math.ceil(y / columnHeaderHeight), 0, columnHeaderMaxDepth - 1);\n }\n return undefined;\n }\n\n /**\n * Iterate through each floating item at the start and call a callback, returning the first result\n * @param start The count of floating items at the start\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingStart(start, total, callback) {\n for (var i = 0; i < start && i < total; i += 1) {\n var result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n return undefined;\n }\n\n /**\n * Iterate through floating items at the end. Iterates in increasing order.\n * @param end The count of floating items at the end\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingEnd(end, total, callback) {\n for (var i = 0; i < end && total - (end - i) >= 0; i += 1) {\n var result = callback(total - (end - i));\n if (result !== undefined) {\n return result;\n }\n }\n return undefined;\n }\n\n /**\n * Iterate through all floating items in increasing order, starting with the top items.\n * @param start Count of start floating rows, e.g. floatingTopRowCount\n * @param end Count of end floating rows, e.g. floatingBottomRowCount\n * @param total Total number of items\n * @param callback Callback called for each value, stopping the iterating and returning the value if one is returned\n */\n static iterateFloating(start, end, total, callback) {\n var result = GridUtils.iterateFloatingStart(start, total, callback);\n if (result !== undefined) {\n return result;\n }\n return GridUtils.iterateFloatingEnd(end, total, callback);\n }\n\n /**\n * Iterate through all items in one dimension on the grid - first floating, then visible.\n * Call the callback for each item, break if a result is returned and return that result.\n * @param visibleStart Index of the start of the visible viewport\n * @param visibleEnd Index of the end of the visible viewport\n * @param floatingStartCount Number of items floating at the start\n * @param floatingEndCount Number of items floating at the end\n * @param totalCount Total number of items\n * @param callback Callback to call for each item\n * @returns The first result from the callback called, or undefined\n */\n static iterateAllItems(visibleStart, visibleEnd, floatingStartCount, floatingEndCount, totalCount, callback) {\n var visibleStartIndex = Math.max(visibleStart, floatingStartCount);\n var visibleEndIndex = Math.min(visibleEnd, totalCount - floatingEndCount - 1);\n var result = GridUtils.iterateFloating(floatingStartCount, floatingEndCount, totalCount, callback);\n if (result !== undefined) {\n return result;\n }\n for (var i = visibleStartIndex; i <= visibleEndIndex; i += 1) {\n result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n return undefined;\n }\n\n /**\n * Check if the coordinate is within the item specified in this dimension\n * @param itemIndex Index of the item to check\n * @param itemCoordinatess Coordinate of all items in this dimension\n * @param itemSizes Size of all items in this dimension\n * @param coordinate The coordinate to check\n * @returns True if the coordinate is within the item specified, false otherwise\n */\n static isInItem(itemIndex, itemCoordinates, itemSizes, coordinate) {\n var _itemCoordinates$get, _itemSizes$get;\n var itemX = (_itemCoordinates$get = itemCoordinates.get(itemIndex)) !== null && _itemCoordinates$get !== void 0 ? _itemCoordinates$get : 0;\n var itemSize = (_itemSizes$get = itemSizes.get(itemIndex)) !== null && _itemSizes$get !== void 0 ? _itemSizes$get : 0;\n return itemX <= coordinate && coordinate <= itemX + itemSize;\n }\n\n /**\n * Get the Index of the item at the provided offset\n * @param offset Coordinate of the offset to get the item of\n * @param itemCount The total count of items\n * @param floatingStart Count of floating items at the start\n * @param floatingEnd Count of floating items at the end\n * @param items Index of all items\n * @param itemCoordinates The coordinate of each item\n * @param itemSizes The size of each item\n * @returns The item index, or null if no item matches\n */\n static getItemAtOffset(offset, itemCount, floatingStart, floatingEnd, items, itemCoordinates, itemSizes) {\n var ignoreFloating = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;\n var floatingItem = ignoreFloating ? undefined : GridUtils.iterateFloating(floatingStart, floatingEnd, itemCount, item => {\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n return undefined;\n });\n if (!ignoreFloating && floatingItem !== undefined) {\n return floatingItem;\n }\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n }\n return null;\n }\n\n /**\n * Get the index of the column at the specified x coordinate\n * @param x Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the column at that coordinate, or null if no column matches\n */\n static getColumnAtX(x, metrics) {\n var ignoreFloating = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n gridX\n } = metrics;\n if (x < gridX) {\n return null;\n }\n return this.getItemAtOffset(x - gridX, columnCount, floatingLeftColumnCount, floatingRightColumnCount, visibleColumns, allColumnXs, allColumnWidths, ignoreFloating);\n }\n\n /**\n * Get the index of the row at the specified y coordinate\n * @param y Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the row at that coordinate, or null if no row matches\n */\n static getRowAtY(y, metrics) {\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n visibleRows,\n allRowYs,\n allRowHeights,\n gridY\n } = metrics;\n if (y < gridY) {\n return null;\n }\n return this.getItemAtOffset(y - gridY, rowCount, floatingTopRowCount, floatingBottomRowCount, visibleRows, allRowYs, allRowHeights);\n }\n\n /**\n * Iterate backward through the visible items until a shown item is hit\n * @param startIndex The index to start from\n * @param modelIndexes The mapping of model indexes\n * @param visibleItems The visible items\n * @param userSizes The user set sizes\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownItem(startIndex, modelIndexes, visibleItems, userSizes) {\n var visibleItemIndex = visibleItems.findIndex(value => value === startIndex) || 0;\n visibleItemIndex -= 1;\n while (visibleItemIndex != null && visibleItemIndex >= 0) {\n var item = visibleItems[visibleItemIndex];\n var modelIndex = modelIndexes.get(item);\n if (modelIndex != null && userSizes.get(modelIndex) !== 0) {\n return item;\n }\n visibleItemIndex -= 1;\n }\n return null;\n }\n\n /**\n * Iterate backward through the visible columns until a shown column is hit\n * @param columnIndex The column index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownColumn(startIndex, metrics) {\n var {\n modelColumns,\n visibleColumns,\n userColumnWidths\n } = metrics;\n return GridUtils.getNextShownItem(startIndex, modelColumns, visibleColumns, userColumnWidths);\n }\n\n /**\n * Iterate backward through the visible rows until a shown row is hit\n * @param rowIndex The row index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownRow(startIndex, metrics) {\n var {\n modelRows,\n visibleRows,\n userRowHeights\n } = metrics;\n return GridUtils.getNextShownItem(startIndex, modelRows, visibleRows, userRowHeights);\n }\n\n /**\n * Gets the column index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x Mouse x coordinate\n * @param y Mouse y coordinate\n * @param metrics The grid metrics\n * @param theme The grid theme with potential user overrides\n * @returns Index of the column separator at the coordinates provided, or null if none match\n */\n static getColumnSeparatorIndex(x, y, metrics, theme) {\n var {\n rowHeaderWidth,\n columnHeaderHeight,\n floatingColumns,\n floatingLeftWidth,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n columnHeaderMaxDepth\n } = metrics;\n var {\n allowColumnResize,\n headerSeparatorHandleSize\n } = theme;\n if (columnHeaderMaxDepth * columnHeaderHeight < y || !allowColumnResize || headerSeparatorHandleSize <= 0) {\n return null;\n }\n var gridX = x - rowHeaderWidth;\n var halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate through the floating columns first since they're on top\n var isPreviousColumnHidden = false;\n for (var i = floatingColumns.length - 1; i >= 0; i -= 1) {\n var _allColumnXs$get, _allColumnWidths$get;\n var column = floatingColumns[i];\n var columnX = (_allColumnXs$get = allColumnXs.get(column)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : 0;\n var columnWidth = (_allColumnWidths$get = allColumnWidths.get(column)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0;\n var isColumnHidden = columnWidth === 0;\n if (!isPreviousColumnHidden || !isColumnHidden) {\n var midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n var minX = midX - halfSeparatorSize;\n var maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n // Iterate backward so that you can reveal hidden columns properly\n isPreviousColumnHidden = false;\n for (var _i = visibleColumns.length - 1; _i >= 0; _i -= 1) {\n var _allColumnXs$get2, _allColumnWidths$get2;\n var _column = visibleColumns[_i];\n var _columnX = (_allColumnXs$get2 = allColumnXs.get(_column)) !== null && _allColumnXs$get2 !== void 0 ? _allColumnXs$get2 : 0;\n var _columnWidth = (_allColumnWidths$get2 = allColumnWidths.get(_column)) !== null && _allColumnWidths$get2 !== void 0 ? _allColumnWidths$get2 : 0;\n var _isColumnHidden = _columnWidth === 0;\n\n // If this column is under the floating columns \"layer\". Terminate early.\n if (_columnX < floatingLeftWidth - _columnWidth) {\n return null;\n }\n if (!isPreviousColumnHidden || !_isColumnHidden) {\n var _midX = _columnX + _columnWidth;\n if (_isColumnHidden) {\n _midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n _midX -= halfSeparatorSize;\n }\n var _minX = _midX - halfSeparatorSize;\n var _maxX = _midX + halfSeparatorSize;\n if (_minX <= gridX && gridX <= _maxX) {\n return _column;\n }\n isPreviousColumnHidden = _isColumnHidden;\n }\n }\n return null;\n }\n\n /**\n * Check if the item specified is hidden\n * @param itemIndex Index of the item to check\n * @param visibleSizes Sizes of all visible items\n * @returns True if the item is hidden, false otherwise\n */\n static isItemHidden(itemIndex, visibleSizes) {\n return visibleSizes.get(itemIndex) === 0;\n }\n\n /**\n * Check if the column specified is hidden\n * @param columnIndex Index of the column to check\n * @param metrics Grid metrics\n * @returns True if the column is hidden, false otherwise\n */\n static isColumnHidden(columnIndex, metrics) {\n var {\n allColumnWidths\n } = metrics;\n return GridUtils.isItemHidden(columnIndex, allColumnWidths);\n }\n\n /**\n * Check if the provided row is a floating row\n * @param row The row index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating row, false otherwise\n */\n static isFloatingRow(row, metrics) {\n if (row == null) {\n return false;\n }\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount\n } = metrics;\n return row < floatingTopRowCount || row >= rowCount - floatingBottomRowCount;\n }\n\n /**\n * Check if the provided column is a floating column\n * @param column The column index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating column, false otherwise\n */\n static isFloatingColumn(column, metrics) {\n if (column == null) {\n return false;\n }\n var {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount\n } = metrics;\n return column < floatingLeftColumnCount || column >= columnCount - floatingRightColumnCount;\n }\n\n /**\n * Get all the items that are hidden under the same Index\n * E.g. If columns are 1, 2, 3, 4, 5, and column 2, 3, 4 are hidden, and we check for item 4, the return will be [2, 3, 4]\n * @param itemIndex Index of the item to start at\n * @param visibleSizes Visible size map\n * @param visibleItems Visible items\n * @returns Array of items that are hidden\n */\n static getHiddenItems(itemIndex, visibleSizes, visibleItems) {\n if (!GridUtils.isItemHidden(itemIndex, visibleSizes)) {\n return [];\n }\n var hiddenItems = [itemIndex];\n var visibleItemIndex = visibleItems.findIndex(value => value === itemIndex);\n for (var i = visibleItemIndex - 1; i >= 0; i -= 1) {\n var item = visibleItems[i];\n if (!GridUtils.isItemHidden(item, visibleSizes)) {\n break;\n }\n hiddenItems.push(item);\n }\n return hiddenItems;\n }\n\n /**\n * Get all the columns that are hidden under the same Index\n * @param columnIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenColumns(columnIndex, metrics) {\n var {\n visibleColumns,\n allColumnWidths\n } = metrics;\n return GridUtils.getHiddenItems(columnIndex, allColumnWidths, visibleColumns);\n }\n\n /**\n * Returns the row index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x X coordinate to check\n * @param y Y coordinate to check\n * @param metrics The grid metrics\n * @param theme The grid theme\n * @returns Index of the row separator at the coordinates provided, or null if none match\n */\n static getRowSeparatorIndex(x, y, metrics, theme) {\n var {\n rowHeaderWidth,\n columnHeaderHeight,\n visibleRows,\n allRowYs,\n allRowHeights\n } = metrics;\n var {\n allowRowResize,\n headerSeparatorHandleSize\n } = theme;\n if (rowHeaderWidth < x || !allowRowResize || headerSeparatorHandleSize <= 0) {\n return null;\n }\n var gridY = y - columnHeaderHeight;\n var halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate backward so you can reveal hidden rows properly\n var isPreviousRowHidden = false;\n for (var i = visibleRows.length - 1; i >= 0; i -= 1) {\n var _allRowYs$get, _allRowHeights$get;\n var row = visibleRows[i];\n var rowY = (_allRowYs$get = allRowYs.get(row)) !== null && _allRowYs$get !== void 0 ? _allRowYs$get : 0;\n var rowHeight = (_allRowHeights$get = allRowHeights.get(row)) !== null && _allRowHeights$get !== void 0 ? _allRowHeights$get : 0;\n var isRowHidden = rowHeight === 0;\n if (!isPreviousRowHidden || !isRowHidden) {\n var midY = rowY + rowHeight;\n if (isRowHidden) {\n midY += halfSeparatorSize;\n } else if (isPreviousRowHidden) {\n midY -= halfSeparatorSize;\n }\n var minY = midY - halfSeparatorSize;\n var maxY = midY + halfSeparatorSize;\n if (minY <= gridY && gridY <= maxY) {\n return row;\n }\n isPreviousRowHidden = isRowHidden;\n }\n }\n return null;\n }\n\n /**\n * Check if the row specified is hidden\n * @param rowIndex Index of the row to check\n * @param metrics Grid metrics\n * @returns True if the row is hidden, false otherwise\n */\n static isRowHidden(rowIndex, metrics) {\n var {\n allRowHeights\n } = metrics;\n return GridUtils.isItemHidden(rowIndex, allRowHeights);\n }\n\n /**\n * Get all the rows that are hidden under the same Index\n * @param rowIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenRows(rowIndex, metrics) {\n var {\n visibleRows,\n allRowHeights\n } = metrics;\n return GridUtils.getHiddenItems(rowIndex, allRowHeights, visibleRows);\n }\n\n /**\n * Set a new order for items in the grid\n * @param from The visible index to move from\n * @param to The visible index to move the item to\n * @param oldMovedItems The old reordered items\n * @returns The new reordered items\n */\n static moveItem(from, to, oldMovedItems) {\n if (from === to) {\n return [...oldMovedItems];\n }\n var movedItems = [...oldMovedItems];\n var lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. 1 -> 2, 2 -> 3 can just be 1 -> 3\n if (lastMovedItem != null && !isBoundedAxisRange(lastMovedItem.from) && lastMovedItem.to === from) {\n // Remove the move if it is now a no-op\n if (lastMovedItem.from === to) {\n movedItems.pop();\n } else {\n movedItems[movedItems.length - 1] = _objectSpread(_objectSpread({}, lastMovedItem), {}, {\n to\n });\n }\n } else {\n movedItems.push({\n from,\n to\n });\n }\n return movedItems;\n }\n\n /**\n * Move a visible range in the grid\n *\n * This will effectively slice the range out of the grid,\n * re-index the remaining columns,\n * then insert the range with the first element at the provided index\n *\n * @param from The visible axis range to move\n * @param to The visible index to move the start of the range to\n * @param oldMovedItems The old reordered items\n * @param isPreMoveTo If toParam is the index before the movement\n * If true, this will account for the shift when moving\n * a range before the drop positin\n * E.g. Move range [0, 2] 1 item down (after element 3)\n * The move is [0, 2] -> 1 if this is false. [0, 2] -> 3 if this is true\n * Both will result in [0, 2] -> 1\n * @returns The new reordered items\n */\n static moveRange(from, toParam, oldMovedItems) {\n var isPreMoveTo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (from[0] === from[1]) {\n return GridUtils.moveItem(from[0], toParam, oldMovedItems);\n }\n var to = toParam;\n if (isPreMoveTo && from[0] < toParam) {\n to -= from[1] - from[0];\n }\n if (from[0] === to) {\n return [...oldMovedItems];\n }\n var movedItems = [...oldMovedItems];\n var lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. [1, 2] -> 2, [2, 3] -> 3 can just be [1, 2] -> 3\n if (lastMovedItem != null && isBoundedAxisRange(lastMovedItem.from) && lastMovedItem.from[1] - lastMovedItem.from[0] === from[1] - from[0] && lastMovedItem.to === from[0]) {\n movedItems[movedItems.length - 1] = _objectSpread(_objectSpread({}, lastMovedItem), {}, {\n to\n });\n } else {\n movedItems.push({\n from,\n to\n });\n }\n var newLastMovedItem = movedItems[movedItems.length - 1];\n // Remove the move if it is now a no-op\n if (isBoundedAxisRange(newLastMovedItem.from) && newLastMovedItem.from[0] === newLastMovedItem.to) {\n movedItems.pop();\n }\n return movedItems;\n }\n static moveItemOrRange(from, to, oldMovedItems) {\n var isPreMoveTo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n return Array.isArray(from) ? GridUtils.moveRange(from, to, oldMovedItems, isPreMoveTo) : GridUtils.moveItem(from, to, oldMovedItems);\n }\n\n /**\n * Applies the items moves to the AxisRange\n * @param start The start index of the range\n * @param end The end index of the range\n * @param movedItems The move operations to apply\n * @param reverse If the moved items should be applied in reverse (this reverses the effects of the moves)\n * @returns A list of AxisRanges in the translated space. Possibly multiple non-continuous ranges\n */\n static applyItemMoves(start, end, movedItems) {\n var reverse = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var result = [[start, end]];\n var _loop = function _loop() {\n var {\n from: fromItemOrRange,\n to: toItem\n } = movedItems[i];\n var length = 1;\n var fromItem;\n if (isBoundedAxisRange(fromItemOrRange)) {\n length = fromItemOrRange[1] - fromItemOrRange[0] + 1; // Ranges are inclusive\n [fromItem] = fromItemOrRange;\n } else {\n fromItem = fromItemOrRange;\n }\n var fromStart = reverse ? toItem : fromItem;\n var fromEnd = fromStart + length - 1;\n var toStart = reverse ? fromItem : toItem;\n var moveDistance = toStart - fromStart;\n var nextResult = [];\n var _loop2 = function _loop2() {\n var _result$j$, _result$j$2;\n var currentStart = (_result$j$ = result[j][0]) !== null && _result$j$ !== void 0 ? _result$j$ : Number.NEGATIVE_INFINITY;\n var currentEnd = (_result$j$2 = result[j][1]) !== null && _result$j$2 !== void 0 ? _result$j$2 : Number.POSITIVE_INFINITY;\n var movedRange;\n var currentResult = [[currentStart, fromStart - 1], [fromStart, fromEnd], [fromEnd + 1, currentEnd]].map(_ref2 => {\n var [s, e] = _ref2;\n return [\n // Cap the ranges to within the current range bounds\n Math.max(s, currentStart), Math.min(e, currentEnd)];\n }).filter(_ref3 => {\n var [s, e] = _ref3;\n return s <= e;\n }) // Remove invalid ranges\n .map(range => {\n var [s, e] = range;\n if (fromStart <= s && fromEnd >= e) {\n // Current range in moved range\n movedRange = [s + moveDistance, e + moveDistance];\n return movedRange;\n }\n if (fromEnd < s) {\n // Current range is after moved range\n return [s - length, e - length];\n }\n return range;\n }).map(range => {\n var [s, e] = range;\n if (toStart > s && toStart <= e) {\n // Moved range splits this range\n return [[s, toStart - 1], [toStart + length, e + length]];\n }\n if (range === movedRange) {\n // Moved range has already been shifted\n return [range];\n }\n if (toStart <= s) {\n // Moved range shifts this range right\n return [[s + length, e + length]];\n }\n return [range];\n }).flat();\n nextResult.push(...currentResult);\n };\n for (var j = 0; j < result.length; j += 1) {\n _loop2();\n }\n\n // Return infinity values back to null\n result = nextResult.map(_ref => {\n var [s, e] = _ref;\n return [Number.isFinite(s) ? s : null, Number.isFinite(e) ? e : null];\n });\n };\n for (var i = reverse ? movedItems.length - 1 : 0; reverse ? i >= 0 : i < movedItems.length; reverse ? i -= 1 : i += 1) {\n _loop();\n }\n return result;\n }\n\n /**\n * Applies the items moves to the givengrid range\n * @param range The grid range to translate\n * @param movedColumns The moved columns\n * @param movedRows The moved rows\n * @param reverse If the moved items should be reversed (i.e. visible to model range)\n * @returns A list of grid ranges in the translated space. Possibly multiple non-continuous ranges\n */\n static translateRange(range, movedColumns, movedRows, reverse) {\n var columnRanges = GridUtils.applyItemMoves(range.startColumn, range.endColumn, movedColumns, reverse);\n var rowRanges = GridUtils.applyItemMoves(range.startRow, range.endRow, movedRows, reverse);\n var ranges = [];\n for (var i = 0; i < columnRanges.length; i += 1) {\n var c = columnRanges[i];\n for (var j = 0; j < rowRanges.length; j += 1) {\n var r = rowRanges[j];\n ranges.push(new GridRange(c[0], r[0], c[1], r[1]));\n }\n }\n return ranges;\n }\n\n /**\n * Retrieve the model index given the currently moved items\n * @param visibleIndex The visible index of the item to get the model index for\n * @param movedItems The moved items\n * @returns The model index of the item\n */\n static getModelIndex(visibleIndex, movedItems) {\n var modelIndex = GridUtils.applyItemMoves(visibleIndex, visibleIndex, movedItems, true)[0][0];\n return modelIndex;\n }\n\n /**\n * Retrieve the model indexes given the currently moved items\n * @param visibleIndexes The visible indexes of the item to get the model indexes for\n * @param movedItems The moved items\n * @returns The model indexes of the item\n */\n static getModelIndexes(visibleIndexes, movedItems) {\n return visibleIndexes.map(i => GridUtils.getModelIndex(i, movedItems));\n }\n\n /**\n * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getModelRangeIndexes(start, end, movedItems) {\n return GridUtils.applyItemMoves(start, end, movedItems, true);\n }\n\n /**\n * Translate the provided UI range into model range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRange(uiRange) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n return GridUtils.translateRange(uiRange, movedColumns, movedRows, true);\n }\n\n /**\n * Translate the provided UI range into model ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRanges The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRanges(uiRanges) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n var modelRanges = [];\n for (var i = 0; i < uiRanges.length; i += 1) {\n modelRanges.push(...GridUtils.getModelRange(uiRanges[i], movedColumns, movedRows));\n }\n return modelRanges;\n }\n\n /**\n * Translate the provided UI start/end indexes to the visible start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getVisibleRangeIndexes(start, end, movedItems) {\n return GridUtils.applyItemMoves(start, end, movedItems, false);\n }\n\n /**\n * Translate the provided UI range into visible range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRange(modelRange) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n return this.translateRange(modelRange, movedColumns, movedRows, false);\n }\n\n /**\n * Translate the provided model ranges into visible ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param modelRanges The model ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRanges(modelRanges) {\n var movedColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var movedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_ARRAY;\n var visibleRanges = [];\n for (var i = 0; i < modelRanges.length; i += 1) {\n visibleRanges.push(...GridUtils.getVisibleRange(modelRanges[i], movedColumns, movedRows));\n }\n return visibleRanges;\n }\n\n /**\n * Retrieve the visible index given the currently moved items\n * @param modelIndex The model index to get the visible index for\n * @param movedItems Moved items\n * @returns The visible index of the item\n */\n static getVisibleIndex(modelIndex, movedItems) {\n var visibleIndex = GridUtils.applyItemMoves(modelIndex, modelIndex, movedItems)[0][0];\n return visibleIndex;\n }\n\n /**\n * Retrieve the visible indexes given the currently moved items\n * @param modelIndexes The model indexes to get the visible indexes for\n * @param movedItems Moved items\n * @returns The visible indexes of the item\n */\n static getVisibleIndexes(modelIndexes, movedItems) {\n return modelIndexes.map(i => GridUtils.getVisibleIndex(i, movedItems));\n }\n\n /**\n * Check if the current platform is Mac\n * @returns True if this platform is a Mac, false otherwise\n */\n static isMacPlatform() {\n var {\n platform\n } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Get the modifier key for the current platform\n * @returns The modifier key for the current platform\n */\n static getModifierKey() {\n if (GridUtils.isMacPlatform()) {\n return 'metaKey';\n }\n return 'ctrlKey';\n }\n\n /**\n * Check if the modifier key is down for the given event\n * @param event The event to check\n * @returns True if the modifier key is down, false otherwise\n */\n static isModifierKeyDown(event) {\n var modifierKey = GridUtils.getModifierKey();\n return event[modifierKey];\n }\n\n /**\n * Check if the user has hidden the specified column\n * @param modelIndex The model index to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden the column\n */\n static checkColumnHidden(modelIndex, userColumnWidths) {\n return userColumnWidths.get(modelIndex) === 0;\n }\n\n /**\n * Check if all the columns specified are hidden\n * @param columns Columns to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden all of the columns\n */\n static checkAllColumnsHidden(columns, userColumnWidths) {\n if (userColumnWidths.size === 0) {\n return false;\n }\n return columns.every(column => userColumnWidths.get(column) === 0);\n }\n\n /**\n * Get the bounds the mouse needs to be dragged outside of from an initial selection before scrolling occurs.\n * Taking into account any floating rows that may be covering the viewport.\n * @param metrics Grid metrics\n * @param row The row they started dragging in\n * @param column The column they started the drag from\n * @returns Dimensions of the drag area in relation to the canvas they need to drag outside of to start scrolling\n */\n static getScrollDragBounds(metrics, row, column) {\n var {\n gridX,\n gridY,\n width,\n height,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingTopHeight,\n floatingBottomHeight,\n columnCount,\n rowCount\n } = metrics;\n var x1 = gridX;\n var y1 = gridY;\n var x2 = width;\n var y2 = height;\n if (column != null) {\n if (column > floatingLeftColumnCount) {\n x1 += floatingLeftWidth;\n }\n if (column < columnCount - floatingRightColumnCount) {\n x2 -= floatingRightWidth;\n }\n }\n if (row != null) {\n if (row > floatingTopRowCount) {\n y1 += floatingTopHeight;\n }\n if (row < rowCount - floatingBottomRowCount) {\n y2 -= floatingBottomHeight;\n }\n }\n return {\n x1,\n y1,\n x2,\n y2\n };\n }\n\n /**\n * Converts the delta coordinates from the provided wheel event to pixels\n * Different platforms have different ways of providing the delta so this normalizes it\n * @param wheelEvent The mouse wheel event to get the scrolling delta for\n * @param pageWidth The width of the page that is scrolling\n * @param pageHeight The height of the page that is scrolling\n * @param lineWidth The width of the line scrolling in line mode\n * @param lineHeight The height of the line scrolling in line mode\n * @returns The delta coordinates normalized to pixels\n */\n static getScrollDelta(wheelEvent) {\n var pageWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1024;\n var pageHeight = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 768;\n var lineWidth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 20;\n var lineHeight = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 20;\n var {\n deltaX,\n deltaY\n } = wheelEvent;\n\n // Flip scroll direction if shiftKey is held on windows/linux.\n // On mac, deltaX/Y values are switched at the event level when shiftKey=true.\n // Guard on strictly Y only changing, to ignore trackpad diagonal motion,\n // through that guard may not be necessary, but it is difficult to determine for\n // all platforms/browser/scroll method combos.\n if (!GridUtils.isMacPlatform() && wheelEvent.shiftKey && wheelEvent.deltaX === 0 && wheelEvent.deltaY !== 0) {\n deltaX = wheelEvent.deltaY;\n deltaY = wheelEvent.deltaX;\n }\n\n // Normalize other deltaMode values to pixel units\n // deltaMode 0, is already in pixel units\n if ((wheelEvent === null || wheelEvent === void 0 ? void 0 : wheelEvent.deltaMode) === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n deltaX *= pageWidth;\n deltaY *= pageHeight;\n } else if ((wheelEvent === null || wheelEvent === void 0 ? void 0 : wheelEvent.deltaMode) === WheelEvent.DOM_DELTA_LINE) {\n // Firefox reports deltaMode line\n // Normalize distance travelled between browsers\n // but remain ~platform/browser combo consistent\n if (GridUtils.isMacPlatform()) {\n // for mac treat lines as a standard row height\n // on mac, firefox travels less distance then chrome per tick\n deltaX = Math.round(deltaX * lineWidth);\n deltaY = Math.round(deltaY * lineHeight);\n } else {\n // for windows convert to pixels using the same method as chrome\n // chrome goes 100 per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n // make the behaviour the same between as it's close enough\n deltaX = Math.round(deltaX * this.PIXELS_PER_LINE);\n deltaY = Math.round(deltaY * this.PIXELS_PER_LINE);\n }\n }\n return {\n deltaX,\n deltaY\n };\n }\n static compareRanges(range1, range2) {\n if (range1[0] == null || range1[1] == null || range2[0] == null || range2[1] == null) {\n return 0;\n }\n return range1[0] !== range2[0] ? range1[0] - range2[0] : range1[1] - range2[1];\n }\n static mergeSortedRanges(ranges) {\n var mergedRanges = [];\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n var start = range[0];\n var end = range[1];\n if (i === 0) {\n mergedRanges.push([start, end]);\n } else if (start - 1 <= mergedRanges[mergedRanges.length - 1][1]) {\n mergedRanges[mergedRanges.length - 1][1] = Math.max(mergedRanges[mergedRanges.length - 1][1], end);\n } else {\n mergedRanges.push([start, end]);\n }\n }\n return mergedRanges;\n }\n\n /**\n * Translates coordinates that are relative to gridX/gridY to be translated by gridX and gridY\n * @param tokenBox The token box to translate\n * @param metrics The grid metrics\n * @returns The token box with translated coordinates\n */\n static translateTokenBox(tokenBox, metrics) {\n var {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom\n } = tokenBox;\n var {\n gridX,\n gridY,\n width: gridWidth,\n height: gridHeight,\n verticalBarWidth,\n horizontalBarHeight\n } = metrics;\n\n // Clamp the values within the grid\n var newLeft = clamp(gridX + left, gridX, gridWidth - verticalBarWidth);\n var newRight = clamp(gridX + right, gridX, gridWidth - verticalBarWidth);\n var newTop = clamp(gridY + top, gridY, gridHeight - horizontalBarHeight);\n var newBottom = clamp(gridY + bottom, gridY, gridHeight - horizontalBarHeight);\n return {\n x1: newLeft,\n y1: newTop,\n x2: newRight,\n y2: newBottom,\n token: tokenBox.token\n };\n }\n\n /**\n * Gets textWidth and X-Y position for a specific cell\n * The textWidth returned is the width that the text can occupy accounting for any other cell markings\n * The width accounts for tree table indents and cell padding, so it is the width the text may consume\n *\n * @param state GridRenderState to get the text metrics for\n * @param column Column of cell to get text metrics for\n * @param row Row of cell to get text metrics for\n * @returns Object with width, x, and y of the text\n */\n static getTextRenderMetrics(state, column, row) {\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n allRowHeights,\n modelRows,\n modelColumns\n } = metrics;\n var {\n cellHorizontalPadding,\n treeDepthIndent,\n treeHorizontalPadding\n } = theme;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var textAlign = model.textAlignForCell(modelColumn, modelRow);\n var x = getOrThrow(allColumnXs, column);\n var y = getOrThrow(allRowYs, row);\n var columnWidth = getOrThrow(allColumnWidths, column);\n var rowHeight = getOrThrow(allRowHeights, row);\n var isFirstColumn = column === firstColumn;\n var treeIndent = 0;\n if (isExpandableGridModel(model) && model.hasExpandableRows && isFirstColumn) {\n treeIndent = treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;\n }\n var textWidth = columnWidth - treeIndent;\n var textX = x + cellHorizontalPadding;\n var textY = y + rowHeight * 0.5;\n if (textAlign === 'right') {\n textX = x + textWidth - cellHorizontalPadding;\n } else if (textAlign === 'center') {\n textX = x + textWidth * 0.5;\n }\n textX += treeIndent;\n return {\n width: textWidth - cellHorizontalPadding * 2,\n x: textX,\n y: textY\n };\n }\n\n /**\n * Finds tokens in text (urls, emails) that start with https:// or http://\n * @param text The text to search in\n * @returns An array of tokens\n */\n static findTokensWithProtocolInText(text) {\n var tokens = linkifyFind(text);\n return tokens.filter(token => {\n if (token.type === 'url') {\n return /^https?:\\/\\//.test(token.value);\n }\n return true;\n });\n }\n}\n_defineProperty(GridUtils, \"PIXELS_PER_LINE\", 100 / 3);\nexport default GridUtils;\n//# sourceMappingURL=GridUtils.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * Extension of memoizee that clears the entire cache when it's full.\n * This avoids the situation where LRU cache starts thrashing when it fills up.\n * Could look at writing our own memoize with a smarter cache to avoid overhead of\n * LRU queue, but this should be sufficient for now.\n */\nimport memoizee from 'memoizee';\n\n/**\n * @param fn The function to memoize\n * @param options The options to set for memoization\n */\nexport var memoizeClear = (fn, options) => {\n var isClearingCache = false;\n var memoizedFn = memoizee(fn, _objectSpread(_objectSpread({}, options), {}, {\n dispose: () => {\n // Need to track when we're clearing because dispose gets called for all items removed\n if (!isClearingCache) {\n isClearingCache = true;\n memoizedFn.clear();\n isClearingCache = false;\n }\n }\n }));\n return memoizedFn;\n};\nexport default memoizeClear;\n//# sourceMappingURL=memoizeClear.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { EventTarget } from 'event-target-shim';\nimport memoizeClear from \"./memoizeClear.js\";\nimport GridUtils from \"./GridUtils.js\";\nvar LINK_TRUNCATION_LENGTH = 5000;\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n/**\n * Model for a Grid\n * All of these methods should return very quickly, as they will be called many times in the render cycle.\n * If data needs to be loaded asynchronously, return something immediately, then trigger an event for the table to refresh (Not yet implemented).\n */\nclass GridModel extends EventTarget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"getCachedTokensInText\", memoizeClear((text, visibleLength) => {\n // If no text is truncated, then directly search in text\n if (visibleLength >= text.length) {\n return GridUtils.findTokensWithProtocolInText(text);\n }\n\n // To check for links, we should check to the first space after the truncatedText length\n var indexOfProceedingWhitespace = text.slice(visibleLength - 1, LINK_TRUNCATION_LENGTH).search(/\\s/); // index or -1 if not found\n\n var lengthOfContent = visibleLength + indexOfProceedingWhitespace;\n // If it doesn't exist, set lengthOfContent to the minimum between length of the original text and 5000\n if (indexOfProceedingWhitespace === -1) {\n lengthOfContent = Math.min(LINK_TRUNCATION_LENGTH, text.length);\n }\n var contentToCheckForLinks = text.substring(0, lengthOfContent);\n return GridUtils.findTokensWithProtocolInText(contentToCheckForLinks);\n }));\n }\n /** Count of rows in the grid */\n /** Count of columns in the grid */\n /** Count of rows that are frozen (or 'floating') at the top */\n get floatingTopRowCount() {\n return 0;\n }\n\n /** Count of rows that are frozen at the bottom */\n get floatingBottomRowCount() {\n return 0;\n }\n\n /** Count of columns that are frozen (or 'floating') at the left */\n get floatingLeftColumnCount() {\n return 0;\n }\n\n /** Count of columns that are frozen (or 'floating') at the right */\n get floatingRightColumnCount() {\n return 0;\n }\n\n /**\n * How many columns header levels are in the grid\n * Used for column grouping where columns at depth 0 are the base columns\n *\n * A grid with 1-level grouping would have a columnHeaderDepth of 2\n * and column headers at depths 0 and 1\n */\n get columnHeaderMaxDepth() {\n return 1;\n }\n\n /**\n * Get the text for the specified cell\n * @param column Column to get the text for\n * @param row Row to get the text for\n * @returns Text for the specified cell\n */\n\n /**\n * Get the character to replace text when truncated for a specific cell.\n * Leave undefined to show text truncated with ellipsis\n * @param column Column to get the truncation character for\n * @param row Row to get the truncation character for\n * @returns Truncation character for the specified cell\n */\n truncationCharForCell(column, row) {\n return undefined;\n }\n\n /**\n * Get the text alignment for the specified cell\n * @param column Column to get the alignment for\n * @param row Row to get the alignment for\n * @returns Text alignment for the specified cell\n */\n textAlignForCell(column, row) {\n return 'left';\n }\n\n /**\n * Get the color for the text in the specified cell\n * @param column Column to get the color for\n * @param row Row to get the color for\n * @param theme Theme applied to the grid\n * @returns Color for the text in the cell\n */\n colorForCell(column, row, theme) {\n return theme.textColor;\n }\n\n /**\n * Get the background color for the cell\n * @param column Column to get the background color for\n * @param row Row to get the background color for\n * @param theme Theme applied to the grid\n * @returns Background color for the cell\n */\n backgroundColorForCell(column, row, theme) {\n return null;\n }\n\n /**\n * Text for the column header\n * @param column Column to get the header for\n * @param depth Depth to get the header text for. 0 is base columns\n * @returns Text to put in the column header\n */\n\n /** Color for column header\n * @param column Column to get the color for\n * @param depth Header depth to get the color for\n * @returns Color for the header at the depth or null\n */\n colorForColumnHeader(column) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return null;\n }\n\n /**\n * Text for the row header\n * @param row Row to get the header for\n * @returns Text to put in the row header\n */\n textForRowHeader(row) {\n return '';\n }\n\n /**\n * Text for the row footer\n * @param row Row to get the footer for\n * @returns Text to put in the row footer\n */\n textForRowFooter(row) {\n return '';\n }\n\n /**\n * @param column Column to check\n * @returns True if the column is movable\n */\n isColumnMovable(column) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return true;\n }\n\n /**\n * @param row Row to check\n * @returns True if the row is movable\n */\n isRowMovable(row) {\n return true;\n }\n getColumnHeaderGroup(modelIndex, depth) {\n return undefined;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n return undefined;\n }\n\n /**\n * Gets the tokens in the cell at column and row, based on the visible text\n * @param column The model column\n * @param row The model row\n * @param visibleLength The length of the visible text\n * @returns An array of Tokens in the cell\n */\n tokensForCell(column, row) {\n var visibleLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : LINK_TRUNCATION_LENGTH;\n var text = this.textForCell(column, row);\n return this.getCachedTokensInText(text, visibleLength);\n }\n renderTypeForCell(column, row) {\n return 'text';\n }\n}\nexport default GridModel;\n//# sourceMappingURL=GridModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable class-methods-use-this */\n\nimport { GridModel } from '@deephaven/grid';\nvar EMPTY_ARRAY = [];\n\n/**\n * Abstract class that extends the GridModel to have more functionality, like filtering and sorting.\n * For use from IrisGrid.\n * Provides some abstraction from the dh.Table and dh.TreeTable classes, so we can treat them somewhat the same.\n * Note that it still uses dh.Column, dh.FilterCondition, dh.Sort, etc., still. Theoretically should abstract\n * those out as well, so there's no dependency on IrisAPI at all, but it's a lot of work for no real gain at this time.\n */\nclass IrisGridModel extends GridModel {\n constructor(dh) {\n super();\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"listenerCount\", void 0);\n this.dh = dh;\n this.listenerCount = 0;\n }\n // Pulled directly from event-target-shim implementation signature\n // https://github.com/mysticatea/event-target-shim/blob/master/src/lib/event-target.ts#L99\n // Using Parameters<GridModel['addEventListener']> doesn't work\n addEventListener(type0, callback0, options0) {\n super.addEventListener(type0, callback0, options0);\n this.listenerCount += 1;\n if (this.listenerCount === 1) {\n this.startListening();\n }\n }\n removeEventListener(type0, callback0, options0) {\n super.removeEventListener(type0, callback0, options0);\n this.listenerCount -= 1;\n if (this.listenerCount === 0) {\n this.stopListening();\n }\n }\n\n /**\n * Function called when first listener is added.\n * Override for implementation specific behaviour.\n */\n startListening() {\n // no-op\n }\n\n /**\n * Function called when last listener is removed.\n * Override for implementation specific behaviour.\n */\n stopListening() {\n // no-op\n }\n\n /**\n * Gets the columns for this model\n * @returns All columns in the model\n */\n\n /**\n * Retrieve the grouped columns for this model\n * @returns The columns that are grouped\n */\n get groupedColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * Gets the columns for the model before any transformations (such as rollups) are applied.\n * @returns All original columns in the model.\n */\n get originalColumns() {\n return this.columns;\n }\n\n /**\n * Gets the column index for this model\n * @param name The model column name.\n * @returns The numeric index of the requested column.\n */\n\n /**\n * Retrieve the source cell for a given cell. Returns something different if the cell is a proxied cell\n * that retrieves data from another cell.\n * @param column Column to get the source for\n * @param row Row to get the source for\n * @returns Source cell where the data is coming from\n */\n sourceForCell(column, row) {\n return {\n column,\n row\n };\n }\n\n /**\n * Retrieve the range of columns to clear filters on for a given column.\n * @param column Column to get the range of filters to clear.\n * @returns Axis range of the column filters to clear, or `null` if this should not have a clear filter option.\n */\n getClearFilterRange(column) {\n if (this.isFilterable(column)) {\n return [column, column];\n }\n return null;\n }\n\n /** List of column movements defined by the model. Used as initial movements for IrisGrid */\n get initialMovedColumns() {\n return EMPTY_ARRAY;\n }\n\n /** List of row movements defined by the model. Used as initial movements for IrisGrid */\n get initialMovedRows() {\n return EMPTY_ARRAY;\n }\n\n /** List of column header groups defined by the model */\n get initialColumnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @param column The model column index\n * @param row The model row index\n * @returns The format stored for that cell\n */\n\n /**\n * @param column The model column index\n * @param row The model row index\n * @returns The value stored for that cell\n */\n\n /**\n * @returns The filters set on this model\n */\n\n /**\n * @param filter The filters to set\n */\n\n /**\n * @returns The formatter used when formatting data\n */\n\n /**\n * @param formatter The formatter to set\n */\n\n /**\n * @param value The value to format\n * @param columnType The column type to format\n * @param columnName The column name to format\n */\n\n /**\n * @returns The sorts used on this model\n */\n\n /**\n * @param sort The sorts to use on this model\n */\n\n /**\n /**\n * @returns The custom columns on this model\n */\n\n /**\n * @param customColumns The custom columns to use\n */\n\n /**\n * @returns The format columns on this model\n */\n\n /**\n * @param formatColumns The format columns to use\n */\n\n /**\n * @param columns The columns to treat as frozen\n */\n\n /**\n * @returns The config to use for rolling up this table\n */\n\n /**\n * @returns The config to use for the totals table of this model\n */\n\n /**\n * @returns The LayoutHints to use for the columns of this table model\n */\n get layoutHints() {\n return null;\n }\n\n /**\n * @returns Names of columns which should be locked to the front, but not floating\n */\n get frontColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @returns Names of columns which should be locked to the back, but not floating\n */\n get backColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @returns Names of columns which should be frozen to the front and floating\n */\n get frozenColumns() {\n return EMPTY_ARRAY;\n }\n\n /**\n * @param index The column index to check\n * @returns Whether the column is one of LayoutHints' frozen columns\n */\n isColumnFrozen(index) {\n return false;\n }\n\n /**\n * @param index The column index to check\n * @returns Whether the column is sortable\n */\n isColumnSortable(index) {\n return false;\n }\n\n /**\n * @deprecated Replaced with isPartitionRequired()\n * @returns True if this model requires a filter to be set\n */\n get isFilterRequired() {\n return false;\n }\n get isReversible() {\n return true;\n }\n\n /**\n * @returns Returns a raw table that is frozen and can be used for exporting data\n */\n\n /**\n * @returns True if this model supports the columnStatistics(column) function\n */\n get isColumnStatisticsAvailable() {\n return false;\n }\n\n /**\n * The description for this model.\n * @returns The description of the model\n */\n get description() {\n return '';\n }\n\n /**\n * @param column The column to get statistics for\n * @returns The column statistics\n */\n\n /**\n * @returns True if this model supports customColumns\n */\n get isCustomColumnsAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model supports customColumns\n */\n get isFormatColumnsAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model supports the export() function\n */\n get isExportAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model supports the valuesTable(column) function\n */\n get isValuesTableAvailable() {\n return false;\n }\n\n /**\n * @returns True if this model should allow the chart builder\n */\n get isChartBuilderAvailable() {\n return false;\n }\n\n /**\n * @returns True if the rollup rows functionality is available\n */\n get isRollupAvailable() {\n return false;\n }\n\n /**\n * @returns True if select distinct functionality is available\n */\n get isSelectDistinctAvailable() {\n return false;\n }\n\n /**\n * @returns True if the totals functionality is available\n */\n get isTotalsAvailable() {\n return false;\n }\n\n /**\n * The names of columns with select distinct enabled\n * @returns An array of column names\n */\n\n /**\n * Set the columns with select distinct enabled\n * @param names The array of column names to enable select distinct on\n */\n\n /**\n * The pending data for this model\n * @returns A map of row index to a map of column name/value pairs\n */\n\n /**\n * Set the pending data for this model\n * @param A map of row index to a map of column name/value pairs\n */\n\n /**\n * @returns The count of pending rows to show\n */\n\n /**\n * Set the count of pending rows to show\n * @param count The count of pending rows to show\n */\n\n /**\n * Errors for the pending data\n * @returns Map from row number to the error\n */\n\n /**\n * Commit pending data and save all data to the table\n */\n\n /**\n * Check if a column is filterable\n * @param columnIndex The column index to check for filterability\n * @returns True if the current provided column index is filterable, false otherwise\n */\n isFilterable(columnIndex) {\n return false;\n }\n\n /**\n * Set the indices of the viewport\n * @param top Top of viewport\n * @param bottom Bottom of viewport\n * @param columns The columns in the viewport. `undefined` for all columns\n */\n\n /**\n * Takes a snapshot of the provided ranges\n * @param ranges The model ranges to take the snapshot of\n * @returns Returns the data in a row/column matrix\n */\n\n /**\n * @param ranges The ranges to take a snapshot of\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue A function to format a value for a cell. Defaults to model format value.\n * @returns A text formatted snapshot of the data for the specified range set\n */\n\n /**\n * @param column The columns to get the distinct values for\n * @returns A table partitioned on the specified columns in the order given in\n */\n\n /**\n * Close this model. It can no longer be used after being closed\n */\n close() {\n // no-op\n }\n\n /**\n * Don't allow any rows to be movable in any IrisGrids by default. Just columns.\n */\n isRowMovable() {\n return false;\n }\n\n /**\n * Delete ranges from an input grid. Will delete the entire row, causing data to shift up\n * @param ranges The ranges to delete\n * @returns A promise that resolves successfully when the operation is complete or rejects if there's an error\n */\n\n get isSeekRowAvailable() {\n return false;\n }\n dataBarOptionsForCell(column, row, theme) {\n throw new Error('Method not implemented.');\n }\n}\n_defineProperty(IrisGridModel, \"EVENT\", Object.freeze({\n UPDATED: 'UPDATED',\n FORMATTER_UPDATED: 'FORMATTER_UPDATED',\n REQUEST_FAILED: 'REQUEST_FAILED',\n COLUMNS_CHANGED: 'COLUMNS_CHANGED',\n TABLE_CHANGED: 'TABLE_CHANGED',\n FILTERS_CHANGED: 'FILTERS_CHANGED',\n SORTS_CHANGED: 'SORTS_CHANGED',\n DISCONNECT: 'DISCONNECT',\n RECONNECT: 'RECONNECT',\n TOTALS_UPDATED: 'TOTALS_UPDATED',\n PENDING_DATA_UPDATED: 'PENDING_DATA_UPDATED'\n}));\nexport default IrisGridModel;\n//# sourceMappingURL=IrisGridModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { GridUtils } from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport Log from '@deephaven/log';\nvar log = Log.module('ColumnHeaderGroup');\nexport function isColumnHeaderGroup(x) {\n return x instanceof ColumnHeaderGroup;\n}\nexport default class ColumnHeaderGroup {\n constructor(_ref) {\n var {\n name,\n children,\n color,\n depth,\n childIndexes,\n parent\n } = _ref;\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"children\", void 0);\n _defineProperty(this, \"depth\", void 0);\n _defineProperty(this, \"parent\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"childIndexes\", void 0);\n _defineProperty(this, \"getVisibleRange\", memoizeOne(movedItems => {\n var flattenedIndexes = this.childIndexes.flat();\n var visibleIndexes = GridUtils.getVisibleIndexes(flattenedIndexes, movedItems);\n var start = Math.min(...visibleIndexes);\n var end = Math.max(...visibleIndexes);\n if (end - start !== flattenedIndexes.length - 1) {\n log.warn(\"Column header group \".concat(this.name, \" is not contiguous\"));\n }\n return [start, end];\n }));\n this.name = name;\n this.children = children;\n this.color = color;\n this.depth = depth;\n this.childIndexes = childIndexes;\n this.parent = parent;\n }\n setParent(parent) {\n this.parent = parent;\n }\n addChildren(children) {\n var newChildren = new Set(this.children.concat(children));\n this.children = [...newChildren];\n }\n removeChildren(children) {\n var newChildren = new Set(this.children);\n children.forEach(name => newChildren.delete(name));\n this.children = [...newChildren];\n }\n get isNew() {\n return this.name.startsWith(ColumnHeaderGroup.NEW_GROUP_PREFIX);\n }\n}\n_defineProperty(ColumnHeaderGroup, \"NEW_GROUP_PREFIX\", ':newGroup');\n//# sourceMappingURL=ColumnHeaderGroup.js.map","export function isPartitionedGridModelProvider(model) {\n return (model === null || model === void 0 ? void 0 : model.isPartitionRequired) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionColumns) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionKeysTable) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionMergedTable) !== undefined && (model === null || model === void 0 ? void 0 : model.partitionTable) !== undefined;\n}\nexport function isPartitionedGridModel(model) {\n return isPartitionedGridModelProvider(model) && model.partitionConfig !== undefined;\n}\n\n/**\n * A grid model that provides key tables and partitions, cannot accept a `PartitionConfig` being set\n */\n\n/**\n * A grid model that can be partitioned on a column\n */\n//# sourceMappingURL=PartitionedGridModel.js.map","var _excluded = [\"selectedValues\"],\n _excluded2 = [\"selectedValues\"];\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { GridUtils } from '@deephaven/grid';\nimport { DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { assertNotNull, bindAllMethods, EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport AggregationUtils from \"./sidebar/aggregations/AggregationUtils.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport AdvancedSettings from \"./sidebar/AdvancedSettings.js\";\nimport ColumnHeaderGroup from \"./ColumnHeaderGroup.js\";\nimport { isPartitionedGridModelProvider } from \"./PartitionedGridModel.js\";\nvar log = Log.module('IrisGridUtils');\n\n/** @deprecated Use `DehydratedSort` instead */\n\nexport function isPanelStateV1(state) {\n return state.partition !== undefined;\n}\nexport function isPanelStateV2(state) {\n return Array.isArray(state.partitions);\n}\n\n/**\n * Checks if an index is valid for the given array\n * @param x The index to check\n * @param array The array\n * @returns True if the index if valid within the array\n */\nfunction isValidIndex(x, array) {\n return x >= 0 && x < array.length;\n}\nfunction isDateWrapper(value) {\n return (value === null || value === void 0 ? void 0 : value.asDate) != null;\n}\nclass IrisGridUtils {\n /**\n * Exports the state from Grid component to a JSON stringifiable object\n * @param model The table model to export the Grid state for\n * @param gridState The state of the Grid to export\n * @returns An object that can be stringified and imported with {{@link hydrateGridState}}\n */\n static dehydrateGridState(model, gridState) {\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var {\n columns\n } = model;\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns].filter(_ref => {\n var {\n to,\n from\n } = _ref;\n return isValidIndex(to, columns) && (typeof from === 'number' && isValidIndex(from, columns) || Array.isArray(from) && isValidIndex(from[0], columns) && isValidIndex(from[1], columns));\n }).map(_ref2 => {\n var {\n to,\n from\n } = _ref2;\n return {\n to: columns[to].name,\n from: Array.isArray(from) ? [columns[from[0]].name, columns[from[1]].name] : columns[from].name\n };\n }),\n movedRows: [...movedRows]\n };\n }\n\n /**\n * Import a state for Grid that was exported with {{@link dehydrateGridState}}\n * @param model The table model to import the state for\n * @param gridState The state of the panel that was saved\n * @returns The gridState props to set on the Grid\n */\n static hydrateGridState(model, gridState) {\n var customColumns = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var {\n isStuckToBottom,\n isStuckToRight,\n movedColumns,\n movedRows\n } = gridState;\n var {\n columns\n } = model;\n var customColumnNames = IrisGridUtils.parseCustomColumnNames(customColumns);\n var columnNames = columns.map(_ref3 => {\n var {\n name\n } = _ref3;\n return name;\n }).concat(customColumnNames);\n return {\n isStuckToBottom,\n isStuckToRight,\n movedColumns: [...movedColumns].map(_ref4 => {\n var {\n to,\n from\n } = _ref4;\n var getIndex = x => typeof x === 'string' ? columnNames.findIndex(name => name === x) : x;\n return {\n to: getIndex(to),\n from: Array.isArray(from) ? [getIndex(from[0]), getIndex(from[1])] : getIndex(from)\n };\n }).filter(_ref5 => {\n var {\n to,\n from\n } = _ref5;\n return isValidIndex(to, columnNames) && (typeof from === 'number' && isValidIndex(from, columnNames) || Array.isArray(from) && isValidIndex(from[0], columnNames) && isValidIndex(from[1], columnNames));\n }),\n movedRows: [...movedRows]\n };\n }\n\n /**\n * Export the IrisGridPanel state.\n * @param model The table model the state is being dehydrated with\n * @param irisGridPanelState The current IrisGridPanel state\n * @returns The dehydrated IrisGridPanel state\n */\n static dehydrateIrisGridPanelState(model, irisGridPanelState) {\n var {\n isSelectingPartition,\n partitions,\n advancedSettings\n } = irisGridPanelState;\n\n // Return value will be serialized, should not contain undefined\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: [...advancedSettings]\n };\n }\n\n /**\n * Import the saved IrisGridPanel state.\n * @param model The model the state is being hydrated with\n * @param irisGridPanelState Exported IrisGridPanel state\n * @returns The state to apply to the IrisGridPanel\n */\n static hydrateIrisGridPanelState(model, irisGridPanelState) {\n var {\n isSelectingPartition,\n advancedSettings\n } = irisGridPanelState;\n var partitions = isPanelStateV2(irisGridPanelState) ? irisGridPanelState.partitions : [irisGridPanelState.partition];\n return {\n isSelectingPartition,\n partitions,\n advancedSettings: new Map([...AdvancedSettings.DEFAULTS, ...advancedSettings])\n };\n }\n\n /**\n * Export the quick filters to JSON striginfiable object\n * @param quickFilters The quick filters to dehydrate\n * @returns The dehydrated quick filters\n */\n static dehydrateQuickFilters(quickFilters) {\n return [...quickFilters].map(_ref6 => {\n var [columnIndex, quickFilter] = _ref6;\n var {\n text\n } = quickFilter;\n return [columnIndex, {\n text\n }];\n });\n }\n static dehydrateLong(value) {\n return value != null ? \"\".concat(value) : null;\n }\n\n /**\n * Export the sorts from the provided table sorts to JSON stringifiable object\n * @param sorts The table sorts\n * @returns The dehydrated sorts\n */\n static dehydrateSort(sorts) {\n return sorts.map(sort => {\n var {\n column,\n isAbs,\n direction\n } = sort;\n return {\n column: column.name,\n isAbs,\n direction\n };\n });\n }\n\n /**\n * Pulls just the table settings from the panel state, eg. filters/sorts\n * @param panelState The dehydrated panel state\n * @returns A dehydrated table settings object, { partition, partitionColumn, advancedFilters, quickFilters, sorts }\n */\n static extractTableSettings(panelState) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var {\n irisGridPanelState,\n irisGridState\n } = panelState;\n var partitions = isPanelStateV2(irisGridPanelState) ? irisGridPanelState.partitions : [irisGridPanelState.partition];\n var {\n advancedFilters,\n quickFilters,\n sorts\n } = irisGridState;\n return {\n advancedFilters,\n inputFilters,\n partitions,\n quickFilters,\n sorts\n };\n }\n static getInputFiltersForColumns(columns) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return inputFilters.filter(_ref7 => {\n var {\n name,\n type\n } = _ref7;\n return columns.find(_ref8 => {\n var {\n name: columnName,\n type: columnType\n } = _ref8;\n return columnName === name && columnType === type;\n });\n });\n }\n static getFiltersFromFilterMap(filterMap) {\n var filters = [];\n var keys = Array.from(filterMap.keys());\n for (var i = 0; i < keys.length; i += 1) {\n var key = keys[i];\n var item = filterMap.get(key);\n if ((item === null || item === void 0 ? void 0 : item.filter) != null) {\n filters.push(item.filter);\n }\n }\n return filters;\n }\n\n /**\n * Get array of hidden column indexes\n * @param userColumnWidths Map of user column widths\n * @returns Array of hidden column indexes\n */\n static getHiddenColumns(userColumnWidths) {\n return [...userColumnWidths.entries()].filter(_ref9 => {\n var [, value] = _ref9;\n return value === 0;\n }).map(_ref10 => {\n var [key] = _ref10;\n return key;\n });\n }\n static parseCustomColumnNames(customColumns) {\n return customColumns.map(customColumn => customColumn.split('=')[0]);\n }\n static getRemovedCustomColumnNames(oldCustomColumns, customColumns) {\n var oldCustomColumnsNames = IrisGridUtils.parseCustomColumnNames(oldCustomColumns);\n var customColumnNames = IrisGridUtils.parseCustomColumnNames(customColumns);\n return oldCustomColumnsNames.filter(oldCustomColumnName => !customColumnNames.includes(oldCustomColumnName));\n }\n static removeSortsInColumns(sorts, columnNames) {\n return sorts.filter(sort => !columnNames.includes(sort.column.name));\n }\n static removeFiltersInColumns(columns, filters, removedColumnNames) {\n var columnNames = columns.map(_ref11 => {\n var {\n name\n } = _ref11;\n return name;\n });\n var newFilter = new Map(filters);\n removedColumnNames.forEach(columnName => newFilter.delete(columnNames.indexOf(columnName)));\n return newFilter;\n }\n static removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames) {\n var columnNames = columns.map(_ref12 => {\n var {\n name\n } = _ref12;\n return name;\n });\n var newMoves = [...movedColumns];\n var _loop = function _loop() {\n var removedColumnName = removedColumnNames[i];\n var removedColumnIndex = columnNames.findIndex(name => name === removedColumnName);\n var moves = [];\n for (var j = 0; j < newMoves.length; j += 1) {\n var move = newMoves[j];\n var newMove = _objectSpread({}, move);\n var [fromStart, fromEnd] = Array.isArray(move.from) ? move.from : [move.from, move.from];\n if (removedColumnIndex <= move.to) {\n newMove.to -= 1;\n }\n\n // If equal to fromStart, the new fromStart would stay the same\n // It's just the next element in the range which will have the same index after deletion\n if (removedColumnIndex < fromStart) {\n fromStart -= 1;\n }\n if (removedColumnIndex <= fromEnd) {\n fromEnd -= 1;\n }\n if (fromStart <= fromEnd && fromStart !== newMove.to) {\n if (fromStart === fromEnd) {\n moves.push(_objectSpread(_objectSpread({}, newMove), {}, {\n from: fromStart\n }));\n } else {\n moves.push(_objectSpread(_objectSpread({}, newMove), {}, {\n from: [fromStart, fromEnd]\n }));\n }\n }\n\n // get the next index of the removed column after the move is applied\n // eslint-disable-next-line prefer-destructuring\n removedColumnIndex = GridUtils.applyItemMoves(removedColumnIndex, removedColumnIndex, [move])[0][0];\n }\n newMoves = moves;\n columnNames.splice(columnNames.findIndex(name => name === removedColumnName), 1);\n };\n for (var i = 0; i < removedColumnNames.length; i += 1) {\n _loop();\n }\n return newMoves;\n }\n static removeColumnsFromSelectDistinctColumns(selectDistinctColumns, removedColumnNames) {\n return selectDistinctColumns.filter(columnName => !removedColumnNames.includes(columnName));\n }\n static getVisibleColumnsInRange(tableColumns, left, right, movedColumns, hiddenColumns) {\n var columns = [];\n for (var i = left; i <= right; i += 1) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.push(tableColumns[modelIndex]);\n }\n }\n return columns;\n }\n static getPrevVisibleColumns(tableColumns, startIndex, count, movedColumns, hiddenColumns) {\n var columns = [];\n var i = startIndex;\n while (i >= 0 && columns.length < count) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.unshift(tableColumns[modelIndex]);\n }\n i -= 1;\n }\n return columns;\n }\n static getNextVisibleColumns(tableColumns, startIndex, count, movedColumns, hiddenColumns) {\n var columns = [];\n var i = startIndex;\n while (i < tableColumns.length && columns.length < count) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (modelIndex >= 0 && modelIndex < tableColumns.length && !hiddenColumns.includes(modelIndex)) {\n columns.push(tableColumns[modelIndex]);\n }\n i += 1;\n }\n return columns;\n }\n static getColumnsToFetch(tableColumns, viewportColumns, alwaysFetchColumnNames) {\n var columnsToFetch = [...viewportColumns];\n alwaysFetchColumnNames.forEach(columnName => {\n var column = tableColumns.find(_ref13 => {\n var {\n name\n } = _ref13;\n return name === columnName;\n });\n if (column != null && !viewportColumns.includes(column)) {\n columnsToFetch.push(column);\n }\n });\n return columnsToFetch;\n }\n static getModelViewportColumns(columns, left, right, movedColumns) {\n var hiddenColumns = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n var alwaysFetchColumnNames = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n var bufferPages = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n if (left == null || right == null) {\n return undefined;\n }\n var columnsCenter = IrisGridUtils.getVisibleColumnsInRange(columns, left, right, movedColumns, hiddenColumns);\n var bufferWidth = columnsCenter.length * bufferPages;\n var columnsLeft = IrisGridUtils.getPrevVisibleColumns(columns, left - 1, bufferWidth, movedColumns, hiddenColumns);\n var columnsRight = IrisGridUtils.getNextVisibleColumns(columns, right + 1, bufferWidth, movedColumns, hiddenColumns);\n var bufferedColumns = [...columnsLeft, ...columnsCenter, ...columnsRight];\n return IrisGridUtils.getColumnsToFetch(columns, bufferedColumns, alwaysFetchColumnNames);\n }\n\n /**\n * Validate whether the ranges passed in are valid to take a snapshot from.\n * Multiple selections are valid if all of the selected rows have the same columns selected.\n *\n * @param ranges The ranges to validate\n * @returns True if the ranges are valid, false otherwise\n */\n static isValidSnapshotRanges(ranges) {\n if (ranges == null || ranges.length === 0) {\n return false;\n }\n\n // To verify all the rows selected have the same set of columns selected, build a map with string representations\n // of each range.\n var rangeMap = new Map();\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n var rowMapIndex = \"\".concat(range.startRow, \":\").concat(range.endRow);\n var columnMapIndex = \"\".concat(range.startColumn, \":\").concat(range.endColumn);\n if (!rangeMap.has(rowMapIndex)) {\n rangeMap.set(rowMapIndex, []);\n }\n rangeMap.get(rowMapIndex).push(columnMapIndex);\n }\n var keys = [...rangeMap.keys()];\n var matchColumnRanges = rangeMap.get(keys[0]).sort().join(',');\n for (var _i = 1; _i < keys.length; _i += 1) {\n if (rangeMap.get(keys[_i]).sort().join(',') !== matchColumnRanges) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Check if the provided value is a valid table index\n * @param value A value to check if it's a valid table index\n */\n static isValidIndex(value) {\n if (!Number.isInteger(value)) {\n return false;\n }\n if (!(typeof value === 'number')) {\n return false;\n }\n return value >= 0;\n }\n\n /**\n * Returns all columns used in any of the ranges provided\n * @param ranges The model ranges to get columns for\n * @param allColumns All the columns to pull from\n * @returns The columns selected in the range\n */\n static columnsFromRanges(ranges, allColumns) {\n if (ranges == null || ranges.length === 0) {\n return [];\n }\n if (ranges[0].startColumn === null && ranges[0].endColumn === null) {\n // Snapshot of all the columns\n return [...allColumns];\n }\n var columnSet = new Set();\n for (var i = 0; i < ranges.length; i += 1) {\n var range = ranges[i];\n assertNotNull(range.startColumn);\n assertNotNull(range.endColumn);\n for (var c = (_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0; c <= ((_range$endColumn = range.endColumn) !== null && _range$endColumn !== void 0 ? _range$endColumn : allColumns.length - 1); c += 1) {\n var _range$startColumn, _range$endColumn;\n columnSet.add(c);\n }\n }\n return [...columnSet].map(c => allColumns[c]);\n }\n\n /**\n * Transforms an iris data snapshot into a simple data matrix\n * @param data The Iris formatted table data\n * @returns A matrix of the values of the data\n */\n static snapshotDataToMatrix(data) {\n var {\n columns,\n rows\n } = data;\n var result = [];\n for (var r = 0; r < rows.length; r += 1) {\n var row = rows[r];\n var rowData = [];\n for (var c = 0; c < columns.length; c += 1) {\n var column = columns[c];\n var value = row.get(column);\n rowData.push(value);\n }\n result.push(rowData);\n }\n return result;\n }\n\n /**\n * Hydrate model rollup config\n * @param originalColumns Original model columns\n * @param config Dehydrated rollup config\n * @param aggregationSettings Aggregation settings\n * @returns Rollup config for the model\n */\n static getModelRollupConfig(originalColumns, config, aggregationSettings) {\n var _config$columns$lengt, _config$columns;\n if (((_config$columns$lengt = config === null || config === void 0 ? void 0 : (_config$columns = config.columns) === null || _config$columns === void 0 ? void 0 : _config$columns.length) !== null && _config$columns$lengt !== void 0 ? _config$columns$lengt : 0) === 0) {\n return null;\n }\n var {\n columns: groupingColumns = [],\n showConstituents: includeConstituents = true,\n showNonAggregatedColumns = true,\n includeDescriptions = true\n } = config !== null && config !== void 0 ? config : {};\n var {\n aggregations = []\n } = aggregationSettings !== null && aggregationSettings !== void 0 ? aggregationSettings : {};\n var aggregationColumns = aggregations.map(_ref14 => {\n var {\n operation,\n selected,\n invert\n } = _ref14;\n return AggregationUtils.isRollupOperation(operation) ? [] : AggregationUtils.getOperationColumnNames(originalColumns, operation, selected, invert);\n });\n var aggregationMap = {};\n // Aggregation columns should show first, add them first\n for (var i = 0; i < aggregations.length; i += 1) {\n aggregationMap[aggregations[i].operation] = aggregationColumns[i];\n }\n if (showNonAggregatedColumns) {\n // Filter out any column that already has an aggregation or grouping\n var nonAggregatedColumnSet = new Set(originalColumns.map(c => c.name).filter(name => !groupingColumns.includes(name)));\n aggregationColumns.forEach(columns => {\n columns.forEach(name => nonAggregatedColumnSet.delete(name));\n });\n if (nonAggregatedColumnSet.size > 0) {\n var _aggregationMap$Aggre;\n var existingColumns = (_aggregationMap$Aggre = aggregationMap[AggregationOperation.FIRST]) !== null && _aggregationMap$Aggre !== void 0 ? _aggregationMap$Aggre : [];\n aggregationMap[AggregationOperation.FIRST] = [...existingColumns, ...nonAggregatedColumnSet];\n }\n }\n return {\n groupingColumns,\n includeConstituents,\n includeDescriptions,\n aggregations: aggregationMap\n };\n }\n\n /**\n * @param pendingDataMap Map of pending data\n * @returns A map with the errors in the pending data\n */\n static getPendingErrors(pendingDataMap) {\n pendingDataMap.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(\"Invalid rowIndex \".concat(rowIndex));\n }\n var {\n data\n } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(\"Invalid columnIndex \".concat(columnIndex));\n }\n });\n });\n }\n\n /**\n * Retrieves a column from the provided array at the index, or `null` and logs an error if it's invalid\n *\n * @param columns The columns to get the column from\n * @param columnIndex The column index to get\n */\n static getColumn(columns, columnIndex) {\n if (columnIndex < columns.length) {\n return columns[columnIndex];\n }\n log.error('Unable to retrieve column', columnIndex, '>=', columns.length);\n return null;\n }\n\n /**\n * Retrieves a column from the provided array matching the name, or `null` and logs an error if not found\n * @param columns The columns to get the column from\n * @param columnName The column name to retrieve\n */\n static getColumnByName(columns, columnName) {\n var column = columns.find(_ref15 => {\n var {\n name\n } = _ref15;\n return name === columnName;\n });\n if (column == null) {\n log.error('Unable to retrieve column by name', columnName, columns.map(_ref16 => {\n var {\n name\n } = _ref16;\n return name;\n }));\n }\n return column;\n }\n\n /**\n * Get filter configs with column names changed to indexes, exclude missing columns\n * @param columns The columns to get column indexes from\n * @param filters Filter configs\n * @returns Updated filter configs with column names changed to indexes\n */\n static changeFilterColumnNamesToIndexes(columns, filters) {\n return filters.map(_ref17 => {\n var {\n name,\n filter\n } = _ref17;\n var index = columns.findIndex(column => column.name === name);\n return index < 0 ? null : [index, filter];\n }).filter(filterConfig => filterConfig != null);\n }\n\n /**\n * @param columnType The column type that the filters will be applied to.\n * @param filterList The list of filters to be combined.\n * @returns The combination of the filters in filterList as text.\n */\n static combineFiltersFromList(columnType, filterList) {\n filterList.sort((a, b) => {\n // move all 'equals' comparisons to end of list\n if (a.operator === 'eq' && b.operator !== 'eq') {\n return 1;\n }\n if (a.operator !== 'eq' && b.operator === 'eq') {\n return -1;\n }\n return a.startColumnIndex - b.startColumnIndex;\n });\n var combinedText = '';\n for (var i = 0; i < filterList.length; i += 1) {\n var {\n text,\n value,\n operator\n } = filterList[i];\n if (value !== undefined) {\n var symbol = '';\n if (operator !== undefined) {\n if (value == null && operator === 'eq') {\n symbol = '=';\n } else if (operator !== 'eq') {\n if (operator === 'startsWith' || operator === 'endsWith') {\n symbol = '*';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n }\n var filterText = \"\".concat(symbol).concat(text);\n if (operator === 'startsWith') {\n filterText = \"\".concat(text).concat(symbol);\n }\n if (columnType != null && value !== null && TableUtils.isCharType(columnType)) {\n filterText = \"\".concat(symbol).concat(String.fromCharCode(parseInt(text, 10)));\n }\n if (i !== 0) {\n combinedText += operator === 'eq' ? ' || ' : ' && ';\n }\n combinedText += filterText;\n }\n }\n return combinedText;\n }\n\n /**\n * Parses the column header groups provided.\n * If undefined, should provide default groups such as from layoutHints\n *\n * @returns Object containing groups array, max depth, map of name to parent group, and map of name to group\n */\n static parseColumnHeaderGroups(model, groupsParam) {\n var maxDepth = 1;\n var parentMap = new Map();\n var groupMap = new Map();\n\n // Remove any empty groups before parsing\n var groups = groupsParam === null || groupsParam === void 0 ? void 0 : groupsParam.filter(_ref18 => {\n var {\n children\n } = _ref18;\n return children.length > 0;\n });\n if (groups.length === 0) {\n return {\n groups: [],\n maxDepth,\n parentMap,\n groupMap\n };\n }\n var originalGroupMap = new Map(groups.map(group => [group.name, group]));\n var seenChildren = new Set();\n var addGroup = group => {\n var {\n name\n } = group;\n if (model.getColumnIndexByName(name) != null) {\n throw new Error(\"Column header group has same name as column: \".concat(name));\n }\n var existingGroup = groupMap.get(name);\n if (existingGroup) {\n return existingGroup;\n }\n var childIndexes = [];\n var depth = 1;\n group.children.forEach(childName => {\n if (seenChildren.has(childName)) {\n throw new Error(\"Column group child \".concat(childName, \" specified in multiple groups\"));\n }\n seenChildren.add(childName);\n var childGroup = originalGroupMap.get(childName);\n var childIndex = model.getColumnIndexByName(childName);\n if (childGroup) {\n // Adding another column header group\n var addedGroup = addGroup(childGroup);\n childIndexes.push(...addedGroup.childIndexes);\n depth = Math.max(depth, addedGroup.depth + 1);\n } else if (childIndex != null) {\n // Adding a base column\n childIndexes.push(childIndex);\n depth = Math.max(depth, 1);\n } else {\n throw new Error(\"Unknown child \".concat(childName, \" in group \").concat(name));\n }\n });\n var columnHeaderGroup = new ColumnHeaderGroup(_objectSpread(_objectSpread({}, group), {}, {\n depth,\n childIndexes: childIndexes.flat()\n }));\n groupMap.set(name, columnHeaderGroup);\n group.children.forEach(childName => parentMap.set(childName, columnHeaderGroup));\n maxDepth = Math.max(maxDepth, columnHeaderGroup.depth + 1);\n return columnHeaderGroup;\n };\n var groupNames = new Set();\n groups.forEach(group => {\n var {\n name\n } = group;\n if (groupNames.has(name)) {\n throw new Error(\"Duplicate column group name: \".concat(name));\n }\n groupNames.add(name);\n addGroup(group);\n });\n groupMap.forEach(group => {\n var _parentMap$get;\n group.setParent((_parentMap$get = parentMap.get(group.name)) === null || _parentMap$get === void 0 ? void 0 : _parentMap$get.name);\n });\n return {\n groups: [...groupMap.values()],\n maxDepth,\n groupMap,\n parentMap\n };\n }\n\n /**\n * @param value The value of the cell in a column\n * @param columnType The type of the column\n * @returns The value of the cell converted to text\n */\n static convertValueToText(value, columnType) {\n if (columnType != null && TableUtils.isCharType(columnType) && value != null && typeof value === 'number') {\n return String.fromCharCode(value);\n }\n if (TableUtils.isDateType(columnType) && isDateWrapper(value)) {\n var date = new Date(value.asDate());\n var offset = date.getTimezoneOffset();\n var offsetDate = new Date(date.getTime() - offset * 60 * 1000);\n var dateText = offsetDate.toISOString();\n var formattedText = dateText.replace('T', ' ').substring(0, 23);\n return formattedText;\n }\n if (value == null) {\n return '';\n }\n return \"\".concat(value);\n }\n constructor(dh) {\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n this.dh = dh;\n this.tableUtils = new TableUtils(dh);\n bindAllMethods(this);\n }\n\n /**\n * Exports the state from IrisGrid to a JSON stringifiable object\n * @param model The table model to export the state for\n * @param irisGridState The current state of the IrisGrid\n */\n dehydrateIrisGridState(model, irisGridState) {\n var {\n aggregationSettings = {\n aggregations: EMPTY_ARRAY,\n showOnTop: false\n },\n advancedFilters,\n customColumnFormatMap,\n isFilterBarShown,\n metrics,\n quickFilters,\n customColumns,\n conditionalFormats = EMPTY_ARRAY,\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns = EMPTY_ARRAY,\n selectedSearchColumns,\n sorts,\n invertSearchColumns,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n columnHeaderGroups,\n partitionConfig = undefined\n } = irisGridState;\n assertNotNull(metrics);\n var {\n userColumnWidths,\n userRowHeights\n } = metrics;\n var {\n columns\n } = model;\n var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];\n\n // Return value will be serialized, should not contain undefined\n return {\n advancedFilters: this.dehydrateAdvancedFilters(columns, advancedFilters),\n aggregationSettings,\n customColumnFormatMap: [...customColumnFormatMap],\n isFilterBarShown,\n quickFilters: IrisGridUtils.dehydrateQuickFilters(quickFilters),\n sorts: IrisGridUtils.dehydrateSort(sorts),\n userColumnWidths: [...userColumnWidths].filter(_ref19 => {\n var [columnIndex] = _ref19;\n return columnIndex != null && columnIndex >= 0 && columnIndex < columns.length;\n }).map(_ref20 => {\n var [columnIndex, width] = _ref20;\n return [columns[columnIndex].name, width];\n }),\n userRowHeights: [...userRowHeights],\n customColumns: [...customColumns],\n conditionalFormats: [...conditionalFormats],\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns: [...selectDistinctColumns],\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.dehydratePendingDataMap(columns, pendingDataMap),\n frozenColumns,\n columnHeaderGroups: columnHeaderGroups === null || columnHeaderGroups === void 0 ? void 0 : columnHeaderGroups.map(item => ({\n name: item.name,\n children: item.children,\n color: item.color\n })),\n partitionConfig: this.dehydratePartitionConfig(partitionColumns, partitionConfig)\n };\n }\n\n /**\n * Import a state for IrisGrid that was exported with {{@link dehydrateIrisGridState}}\n * @param model The table model to import the state with\n * @param irisGridState The saved IrisGrid state\n */\n hydrateIrisGridState(model, irisGridState) {\n var _ref24, _model$layoutHints;\n var {\n advancedFilters,\n aggregationSettings = {\n aggregations: [],\n showOnTop: false\n },\n customColumnFormatMap,\n isFilterBarShown,\n quickFilters,\n sorts,\n customColumns,\n conditionalFormats,\n userColumnWidths,\n userRowHeights,\n reverseType,\n rollupConfig = undefined,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns = true,\n pendingDataMap = [],\n frozenColumns,\n columnHeaderGroups,\n partitionConfig\n } = irisGridState;\n var {\n columns,\n formatter\n } = model;\n var partitionColumns = isPartitionedGridModelProvider(model) ? model.partitionColumns : [];\n return {\n advancedFilters: this.hydrateAdvancedFilters(columns, advancedFilters, formatter.timeZone),\n aggregationSettings,\n customColumnFormatMap: new Map(customColumnFormatMap),\n isFilterBarShown,\n quickFilters: this.hydrateQuickFilters(columns, quickFilters, formatter.timeZone),\n sorts: this.hydrateSort(columns, sorts),\n userColumnWidths: new Map(userColumnWidths.map(_ref21 => {\n var [column, width] = _ref21;\n if (typeof column === 'string' || column instanceof String) {\n return [columns.findIndex(_ref22 => {\n var {\n name\n } = _ref22;\n return name === column;\n }), width];\n }\n return [column, width];\n }).filter(_ref23 => {\n var [column] = _ref23;\n return column != null && column >= 0 && column < columns.length;\n })),\n customColumns,\n conditionalFormats,\n userRowHeights: new Map(userRowHeights),\n reverseType,\n rollupConfig,\n showSearchBar,\n searchValue,\n selectDistinctColumns,\n selectedSearchColumns,\n invertSearchColumns,\n pendingDataMap: this.hydratePendingDataMap(columns, pendingDataMap),\n frozenColumns,\n columnHeaderGroups: IrisGridUtils.parseColumnHeaderGroups(model, (_ref24 = columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : (_model$layoutHints = model.layoutHints) === null || _model$layoutHints === void 0 ? void 0 : _model$layoutHints.columnGroups) !== null && _ref24 !== void 0 ? _ref24 : []).groups,\n partitionConfig: this.hydratePartitionConfig(partitionColumns, partitionConfig)\n };\n }\n\n /**\n * Import the saved quick filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedQuickFilters Exported quick filters definitions\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n * @returns The quick filters to apply to the columns\n */\n hydrateQuickFilters(columns, savedQuickFilters, timeZone) {\n var importedFilters = savedQuickFilters.map(_ref25 => {\n var [columnIndex, quickFilter] = _ref25;\n var {\n text\n } = quickFilter;\n var filter = null;\n try {\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n if (column != null) {\n filter = this.tableUtils.makeQuickFilter(column, text, timeZone);\n }\n } catch (error) {\n log.error('hydrateQuickFilters error with', text, error);\n }\n return [columnIndex, {\n text,\n filter\n }];\n });\n return new Map(importedFilters);\n }\n\n /**\n * Export the advanced filters from the provided columns to JSON striginfiable object\n * @param columns The columns for the filters\n * @param advancedFilters The advanced filters to dehydrate\n * @returns The dehydrated advanced filters\n */\n dehydrateAdvancedFilters(columns, advancedFilters) {\n return [...advancedFilters].map(_ref26 => {\n var [columnIndex, advancedFilter] = _ref26;\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n var options = this.dehydrateAdvancedFilterOptions(column, advancedFilter.options);\n return [columnIndex, {\n options\n }];\n });\n }\n\n /**\n * Import the saved advanced filters to apply to the columns. Does not actually apply the filters.\n * @param columns The columns the filters will be applied to\n * @param savedAdvancedFilters Exported advanced filters definitions\n * @param timeZone The time zone to make this filter in if it is a date type. E.g. America/New_York\n * @returns The advanced filters to apply to the columns\n */\n hydrateAdvancedFilters(columns, savedAdvancedFilters, timeZone) {\n var importedFilters = savedAdvancedFilters.map(_ref27 => {\n var [columnIndex, advancedFilter] = _ref27;\n var column = IrisGridUtils.getColumn(columns, columnIndex);\n assertNotNull(column);\n var options = this.hydrateAdvancedFilterOptions(column, advancedFilter.options);\n var filter = null;\n try {\n var columnRetrieved = IrisGridUtils.getColumn(columns, columnIndex);\n if (columnRetrieved != null) {\n filter = this.tableUtils.makeAdvancedFilter(column, options, timeZone);\n }\n } catch (error) {\n log.error('hydrateAdvancedFilters error with', options, error);\n }\n return [columnIndex, {\n options,\n filter\n }];\n });\n return new Map(importedFilters);\n }\n dehydrateAdvancedFilterOptions(column, options) {\n var {\n selectedValues\n } = options,\n otherOptions = _objectWithoutProperties(options, _excluded);\n return _objectSpread({\n selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => this.dehydrateValue(value, column === null || column === void 0 ? void 0 : column.type))\n }, otherOptions);\n }\n hydrateAdvancedFilterOptions(column, options) {\n var {\n selectedValues\n } = options,\n otherOptions = _objectWithoutProperties(options, _excluded2);\n return _objectSpread({\n selectedValues: selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.map(value => this.hydrateValue(value, column === null || column === void 0 ? void 0 : column.type))\n }, otherOptions);\n }\n dehydratePendingDataMap(columns, pendingDataMap) {\n return [...pendingDataMap].map(_ref28 => {\n var [rowIndex, {\n data\n }] = _ref28;\n return [rowIndex, {\n data: [...data].map(_ref29 => {\n var [c, value] = _ref29;\n return [columns[c].name, this.dehydrateValue(value, columns[c].type)];\n })\n }];\n });\n }\n hydratePendingDataMap(columns, pendingDataMap) {\n var columnMap = new Map();\n var getColumnIndex = columnName => {\n if (!columnMap.has(columnName)) {\n columnMap.set(columnName, columns.findIndex(_ref30 => {\n var {\n name\n } = _ref30;\n return name === columnName;\n }));\n }\n return columnMap.get(columnName);\n };\n return new Map(pendingDataMap.map(_ref31 => {\n var [rowIndex, {\n data\n }] = _ref31;\n return [rowIndex, {\n data: new Map(data.map(_ref32 => {\n var _getColumnIndex;\n var [columnName, value] = _ref32;\n var index = getColumnIndex(columnName);\n assertNotNull(index);\n return [(_getColumnIndex = getColumnIndex(columnName)) !== null && _getColumnIndex !== void 0 ? _getColumnIndex : null, this.hydrateValue(value, columns[index].type)];\n }))\n }];\n }));\n }\n dehydratePartitionConfig(partitionColumns, partitionConfig) {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n return _objectSpread(_objectSpread({}, partitionConfig), {}, {\n partitions: partitionConfig.partitions.map((partition, index) => this.dehydrateValue(partition, partitionColumns[index].type))\n });\n }\n hydratePartitionConfig(partitionColumns, partitionConfig) {\n if (partitionConfig == null) {\n return partitionConfig;\n }\n return _objectSpread(_objectSpread({}, partitionConfig), {}, {\n partitions: partitionConfig.partitions.map((partition, index) => this.hydrateValue(partition, partitionColumns[index].type))\n });\n }\n\n /**\n * Dehydrates/serializes a value for storage.\n * @param value The value to dehydrate\n * @param columnType The column type\n */\n dehydrateValue(value, columnType) {\n if (TableUtils.isDateType(columnType)) {\n return this.dehydrateDateTime(value);\n }\n if (TableUtils.isLongType(columnType)) {\n return IrisGridUtils.dehydrateLong(value);\n }\n return value;\n }\n\n /**\n * Hydrate a value from it's serialized state\n * @param value The dehydrated value that needs to be hydrated\n * @param columnType The type of column\n */\n hydrateValue(value, columnType) {\n if (TableUtils.isDateType(columnType)) {\n return this.hydrateDateTime(value);\n }\n if (TableUtils.isLongType(columnType)) {\n return this.hydrateLong(value);\n }\n return value;\n }\n dehydrateDateTime(value) {\n return value != null ? this.dh.i18n.DateTimeFormat.format(DateUtils.FULL_DATE_FORMAT, value) : null;\n }\n hydrateDateTime(value) {\n return value != null ? this.dh.i18n.DateTimeFormat.parse(DateUtils.FULL_DATE_FORMAT, value) : null;\n }\n hydrateLong(value) {\n return value != null ? this.dh.LongWrapper.ofString(value) : null;\n }\n\n /**\n * Import the saved sorts to apply to the table. Does not actually apply the sort.\n * @param columns The columns the sorts will be applied to\n * @param sorts Exported sort definitions\n * @returns The sorts to apply to the table\n */\n hydrateSort(columns, sorts) {\n var {\n dh\n } = this;\n return sorts.map(sort => {\n var {\n column: columnIndexOrName,\n isAbs,\n direction\n } = sort;\n if (direction === TableUtils.sortDirection.reverse) {\n return dh.Table.reverse();\n }\n var column = typeof columnIndexOrName === 'string' ? IrisGridUtils.getColumnByName(columns, columnIndexOrName) : IrisGridUtils.getColumn(columns, columnIndexOrName);\n if (column != null) {\n var columnSort = column.sort();\n if (isAbs) {\n columnSort = columnSort.abs();\n }\n if (direction === TableUtils.sortDirection.descending) {\n columnSort = columnSort.desc();\n } else {\n columnSort = columnSort.asc();\n }\n return columnSort;\n }\n return null;\n })\n // If we can't find the column any more, it's null, filter it out\n // If the item is a reverse sort item, filter it out - it will get applied with the `reverseType` property\n // This should only happen when loading a legacy dashboard\n .filter(item => item != null && item.direction !== TableUtils.sortDirection.reverse);\n }\n\n /**\n * Applies the passed in table settings directly to the provided table\n * @param table The table to apply the settings to\n * @param tableSettings Dehydrated table settings extracted with `extractTableSettings`\n * @param timeZone The time zone to make this value in if it is a date type. E.g. America/New_York\n */\n applyTableSettings(table, tableSettings, timeZone) {\n var {\n columns\n } = table;\n var quickFilters = [];\n if (tableSettings.quickFilters) {\n quickFilters = IrisGridUtils.getFiltersFromFilterMap(this.hydrateQuickFilters(columns, tableSettings.quickFilters, timeZone));\n }\n var advancedFilters = [];\n if (tableSettings.advancedFilters) {\n advancedFilters = IrisGridUtils.getFiltersFromFilterMap(this.hydrateAdvancedFilters(columns, tableSettings.advancedFilters, timeZone));\n }\n var inputFilters = this.getFiltersFromInputFilters(columns, tableSettings.inputFilters, timeZone);\n var sorts = [];\n if (tableSettings.sorts) {\n sorts = this.hydrateSort(columns, tableSettings.sorts);\n }\n var filters = [...quickFilters, ...advancedFilters];\n var {\n partitions,\n partitionColumns: partitionColumnNames\n } = tableSettings;\n if (partitions && partitions.length && partitionColumnNames && partitionColumnNames !== null && partitionColumnNames !== void 0 && partitionColumnNames.length) {\n var partitionColumns = partitionColumnNames.map(partitionColumnName => IrisGridUtils.getColumnByName(columns, partitionColumnName));\n for (var i = 0; i < partitionColumns.length; i += 1) {\n if (partitionColumns[i] !== undefined && partitions[i] != null) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n var partitionFilter = partitionColumns[i].filter().eq(this.dh.FilterValue.ofString(partitions[i]));\n filters = [partitionFilter, ...filters];\n }\n }\n }\n filters = [...inputFilters, ...filters];\n table.applyFilter(filters);\n table.applySort(sorts);\n }\n getFiltersFromInputFilters(columns) {\n var inputFilters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var timeZone = arguments.length > 2 ? arguments[2] : undefined;\n return inputFilters.map(_ref33 => {\n var {\n name,\n type,\n value\n } = _ref33;\n var column = columns.find(_ref34 => {\n var {\n name: columnName,\n type: columnType\n } = _ref34;\n return columnName === name && columnType === type;\n });\n if (column) {\n try {\n return this.tableUtils.makeQuickFilter(column, value, timeZone);\n } catch (e) {\n // It may be unable to create it because user hasn't completed their input\n log.debug('Unable to create input filter', e);\n }\n }\n return null;\n }).filter(filter => filter != null);\n }\n\n /**\n * Get the dh.RangeSet representation of the provided ranges.\n * Ranges are sorted prior to creating the RangeSet. Only the rows are taken into account,\n * RangeSet does not have an option for columns.\n * @param ranges The ranges to get the range set for\n * @returns The rangeset for the provided ranges\n */\n rangeSetFromRanges(ranges) {\n var {\n dh\n } = this;\n var rangeSets = ranges.slice().sort((a, b) => {\n assertNotNull(a.startRow);\n assertNotNull(b.startRow);\n return a.startRow - b.startRow;\n }).map(range => {\n var {\n startRow,\n endRow\n } = range;\n assertNotNull(startRow);\n assertNotNull(endRow);\n return dh.RangeSet.ofRange(startRow, endRow);\n });\n return dh.RangeSet.ofRanges(rangeSets);\n }\n}\nexport default IrisGridUtils;\n//# sourceMappingURL=IrisGridUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass MissingPartitionError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isMissingPartitionError\", true);\n }\n}\nexport function isMissingPartitionError(err) {\n return (err === null || err === void 0 ? void 0 : err.isMissingPartitionError) === true;\n}\nexport default MissingPartitionError;\n//# sourceMappingURL=MissingPartitionError.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass MissingKeyError extends Error {\n constructor(rowIndex, columnName) {\n super(\"\".concat(columnName, \" can't be empty (on pending row \").concat(rowIndex + 1, \")\"));\n _defineProperty(this, \"isMissingKey\", true);\n _defineProperty(this, \"rowIndex\", void 0);\n _defineProperty(this, \"columnName\", void 0);\n this.rowIndex = rowIndex;\n this.columnName = columnName;\n }\n}\nexport default MissingKeyError;\n//# sourceMappingURL=MissingKeyError.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable no-underscore-dangle */\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridRange, GridUtils, memoizeClear } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport { TableUtils, Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport MissingKeyError from \"./MissingKeyError.js\";\nimport { isColumnHeaderGroup } from \"./ColumnHeaderGroup.js\";\nvar log = Log.module('IrisGridTableModelTemplate');\nvar SET_VIEWPORT_THROTTLE = 150;\nvar APPLY_VIEWPORT_THROTTLE = 0;\nexport function isIrisGridTableModelTemplate(model) {\n return model.table !== undefined;\n}\n\n/**\n * Template model for a grid\n */\n\nclass IrisGridTableModelTemplate extends IrisGridModel {\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n throw new Error('Method not implemented.');\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get customColumns() {\n return [];\n }\n set customColumns(customColumns) {\n throw new Error('Method not implemented.');\n }\n get formatColumns() {\n return [];\n }\n set formatColumns(formatColumns) {\n throw new Error('Method not implemented.');\n }\n updateFrozenColumns(columns) {\n throw new Error('Method not implemented.');\n }\n get rollupConfig() {\n throw new Error('Method not implemented.');\n }\n set rollupConfig(rollupConfig) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n throw new Error('Method not implemented.');\n }\n set selectDistinctColumns(names) {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Returns an array of the columns in the model\n * The order of model columns should never change once established\n */\n get columns() {\n return this.table.columns;\n }\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(dh, table) {\n var _this$layoutHints$col, _this$layoutHints;\n var _formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"irisGridUtils\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"irisFormatter\", void 0);\n _defineProperty(this, \"inputTable\", void 0);\n _defineProperty(this, \"subscription\", void 0);\n _defineProperty(this, \"table\", void 0);\n _defineProperty(this, \"viewport\", void 0);\n _defineProperty(this, \"viewportData\", void 0);\n _defineProperty(this, \"formattedStringData\", void 0);\n _defineProperty(this, \"pendingStringData\", void 0);\n _defineProperty(this, \"isSaveInProgress\", void 0);\n _defineProperty(this, \"totalsTable\", void 0);\n _defineProperty(this, \"totalsTablePromise\", void 0);\n _defineProperty(this, \"totals\", void 0);\n _defineProperty(this, \"totalsDataMap\", void 0);\n _defineProperty(this, \"pendingNewDataMap\", void 0);\n _defineProperty(this, \"pendingNewRowCount\", 0);\n _defineProperty(this, \"_columnHeaderGroupMap\", new Map());\n _defineProperty(this, \"columnHeaderParentMap\", new Map());\n _defineProperty(this, \"_columnHeaderMaxDepth\", null);\n _defineProperty(this, \"_columnHeaderGroups\", []);\n _defineProperty(this, \"_movedColumns\", null);\n _defineProperty(this, \"getMemoizedInitialMovedColumns\", memoize(layoutHints => {\n var _layoutHints$columnGr;\n if (!layoutHints) {\n return [];\n }\n var movedColumns = [];\n var {\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr !== void 0 ? _layoutHints$columnGr : []);\n var moveColumn = (name, toIndex) => {\n var modelIndex = this.getColumnIndexByName(name);\n if (modelIndex == null) {\n throw new Error(\"Unknown layout hint column: \".concat(name));\n }\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n movedColumns = GridUtils.moveItem(visibleIndex, toIndex, movedColumns);\n };\n var moveGroup = (name, toIndex) => {\n var group = groupMap.get(name);\n if (group == null) {\n throw new Error(\"Unknown layout hint group: \".concat(name));\n }\n var visibleRange = group.getVisibleRange(movedColumns);\n movedColumns = GridUtils.moveRange(visibleRange, toIndex, movedColumns);\n };\n var {\n frontColumns = [],\n backColumns = [],\n frozenColumns = []\n } = layoutHints;\n if (frontColumns.length || backColumns.length || frozenColumns.length) {\n var usedColumns = new Set();\n var frontIndex = 0;\n frozenColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n frontColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n var backIndex = this.columnMap.size - 1;\n backColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n var layoutHintColumnGroups = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups;\n if (layoutHintColumnGroups) {\n var columnGroups = [...groupMap.values()];\n columnGroups.sort((a, b) => a.depth - b.depth);\n columnGroups.forEach(group => {\n var firstChildName = group.children[0];\n var rightModelIndex = this.getColumnIndexByName(firstChildName);\n var rightVisibleIndex;\n if (rightModelIndex != null) {\n rightVisibleIndex = GridUtils.getVisibleIndex(rightModelIndex, movedColumns);\n } else {\n var firstChildGroup = groupMap.get(firstChildName);\n if (!firstChildGroup) {\n throw new Error(\"Unknown column \".concat(firstChildName, \" in group \").concat(group.name));\n }\n var visibleRange = firstChildGroup.getVisibleRange(movedColumns);\n // Columns will be moved to start at the end of the first child group\n [, rightVisibleIndex] = visibleRange;\n }\n for (var i = 1; i < group.children.length; i += 1) {\n var childName = group.children[i];\n var childGroup = groupMap.get(childName);\n var childColumn = this.getColumnIndexByName(childName);\n if (childGroup) {\n // All columns in the group will be before or after the start index\n // Lower level groups are re-arranged first, so they will be contiguous\n var isBeforeGroup = childGroup.getVisibleRange(movedColumns)[0] < rightVisibleIndex;\n var moveToIndex = isBeforeGroup ? rightVisibleIndex - childGroup.childIndexes.length + 1 : rightVisibleIndex + 1;\n moveGroup(childName, moveToIndex);\n rightVisibleIndex = moveToIndex + childGroup.childIndexes.length - 1;\n } else if (childColumn != null) {\n var _isBeforeGroup = GridUtils.getVisibleIndex(childColumn, movedColumns) < rightVisibleIndex;\n var _moveToIndex = _isBeforeGroup ? rightVisibleIndex : rightVisibleIndex + 1;\n moveColumn(childName, _moveToIndex);\n rightVisibleIndex = _moveToIndex;\n }\n }\n });\n }\n this._movedColumns = movedColumns;\n return movedColumns;\n }));\n _defineProperty(this, \"getMemoizedInitialColumnHeaderGroups\", memoize(layoutHints => {\n var _layoutHints$columnGr2;\n return IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr2 = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr2 !== void 0 ? _layoutHints$columnGr2 : []).groups;\n }));\n _defineProperty(this, \"getMemoizedColumnMap\", memoize(tableColumns => {\n var columnMap = new Map();\n tableColumns.forEach(col => columnMap.set(col.name, col));\n return columnMap;\n }));\n _defineProperty(this, \"getColumnIndicesByNameMap\", memoize(columns => {\n var indices = new Map();\n columns.forEach((_ref, i) => {\n var {\n name\n } = _ref;\n return indices.set(name, i);\n });\n return indices;\n }));\n _defineProperty(this, \"setViewport\", throttle((top, bottom, columns) => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n var {\n viewport\n } = this;\n if (viewport != null && viewport.top === top && viewport.bottom === bottom && viewport.columns === columns) {\n log.debug2('Ignoring duplicate viewport', viewport);\n return;\n }\n this.viewport = {\n top,\n bottom,\n columns\n };\n log.debug2('setViewport', this.viewport);\n this.applyViewport();\n }, SET_VIEWPORT_THROTTLE));\n _defineProperty(this, \"applyViewport\", throttle(() => {\n if (!this.viewport) {\n return;\n }\n log.debug2('applyViewport', this.viewport);\n var {\n top,\n bottom,\n columns\n } = this.viewport;\n var [viewportTop, viewportBottom] = this.getCachedViewportRowRange(top, bottom);\n this.applyBufferedViewport(viewportTop, viewportBottom, columns);\n }, APPLY_VIEWPORT_THROTTLE, {\n leading: false\n }));\n _defineProperty(this, \"getCachedFormattedString\", memoizeClear((formatter, value, columnType, columnName, formatOverride) => formatter.getFormattedString(value, columnType, columnName, formatOverride), {\n max: 10000\n }));\n _defineProperty(this, \"getCachedCustomColumnFormatFlag\", memoizeClear(FormatterUtils.isCustomColumnFormatDefined, {\n max: 10000\n }));\n _defineProperty(this, \"getCachedViewportRowRange\", memoize((top, bottom) => {\n var viewHeight = bottom - top;\n var viewportTop = Math.max(0, top - viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES);\n var viewportBottom = bottom + viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n }));\n _defineProperty(this, \"getCachedPendingErrors\", memoize((pendingDataMap, columns, keyColumnCount) => {\n var map = new Map();\n pendingDataMap.forEach((row, rowIndex) => {\n var {\n data: rowData\n } = row;\n for (var i = 0; i < keyColumnCount; i += 1) {\n if (!rowData.has(i)) {\n var _map$get;\n if (!map.has(rowIndex)) {\n map.set(rowIndex, []);\n }\n (_map$get = map.get(rowIndex)) === null || _map$get === void 0 ? void 0 : _map$get.push(new MissingKeyError(rowIndex, columns[i].name));\n }\n }\n });\n return map;\n }));\n this.handleTableDisconnect = this.handleTableDisconnect.bind(this);\n this.handleTableReconnect = this.handleTableReconnect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTotalsUpdate = this.handleTotalsUpdate.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);\n this.dh = dh;\n this.irisFormatter = _formatter;\n this.irisGridUtils = new IrisGridUtils(dh);\n this.inputTable = inputTable;\n this.subscription = null;\n this.table = table;\n this.tableUtils = new TableUtils(dh);\n this.viewport = null;\n this.viewportData = null;\n this.formattedStringData = [];\n this.pendingStringData = [];\n this.isSaveInProgress = false;\n this.totalsTable = null;\n this.totalsTablePromise = null;\n this.totals = null;\n this.totalsDataMap = null;\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n this.pendingNewDataMap = new Map();\n this.pendingNewRowCount = 0;\n this.columnHeaderGroups = IrisGridUtils.parseColumnHeaderGroups(this, (_this$layoutHints$col = (_this$layoutHints = this.layoutHints) === null || _this$layoutHints === void 0 ? void 0 : _this$layoutHints.columnGroups) !== null && _this$layoutHints$col !== void 0 ? _this$layoutHints$col : []).groups;\n }\n close() {\n this.table.close();\n if (this.totalsTable !== null) {\n this.totalsTable.close();\n }\n if (this.totalsTablePromise !== null) {\n this.totalsTablePromise.cancel();\n }\n }\n startListening() {\n super.startListening();\n var {\n dh\n } = this;\n this.table.addEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.addEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n this.applyViewport();\n }\n stopListening() {\n super.stopListening();\n var {\n dh\n } = this;\n this.table.removeEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.removeEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.removeEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.removeEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.closeSubscription();\n }\n addTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.addEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n\n // Totals table only has one row of data\n totalsTable.setViewport(0, 0);\n }\n removeTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n }\n handleTableDisconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.DISCONNECT));\n }\n handleTableReconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n handleTableUpdate(event) {\n this.copyViewportData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleTotalsUpdate(event) {\n this.copyTotalsData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleRequestFailed(event) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event));\n }\n handleCustomColumnsChanged() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns\n }));\n }\n get rowCount() {\n var _this$totals$operatio, _this$totals, _this$totals$operatio2;\n return (\n // Table size can be negative if the table isn't ready yet\n Math.max(this.table.size, 0) + this.pendingNewRowCount + ((_this$totals$operatio = (_this$totals = this.totals) === null || _this$totals === void 0 ? void 0 : (_this$totals$operatio2 = _this$totals.operationOrder) === null || _this$totals$operatio2 === void 0 ? void 0 : _this$totals$operatio2.length) !== null && _this$totals$operatio !== void 0 ? _this$totals$operatio : 0)\n );\n }\n get pendingDataErrors() {\n var _this$inputTable$keyC, _this$inputTable;\n return this.getCachedPendingErrors(this.pendingNewDataMap, this.columns, (_this$inputTable$keyC = (_this$inputTable = this.inputTable) === null || _this$inputTable === void 0 ? void 0 : _this$inputTable.keyColumns.length) !== null && _this$inputTable$keyC !== void 0 ? _this$inputTable$keyC : 0);\n }\n get pendingDataMap() {\n return this.pendingNewDataMap;\n }\n set pendingDataMap(map) {\n if (map === this.pendingNewDataMap) {\n return;\n }\n map.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(\"Invalid rowIndex \".concat(rowIndex));\n }\n var {\n data\n } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(\"Invalid columnIndex \".concat(columnIndex));\n }\n });\n });\n this.pendingNewDataMap = map;\n this.pendingNewRowCount = Math.max(this.pendingNewRowCount, this.maxPendingDataRow);\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n }\n get pendingRowCount() {\n return this.pendingNewRowCount;\n }\n set pendingRowCount(count) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n get maxPendingDataRow() {\n return this.pendingNewDataMap.size > 0 ? Math.max(...this.pendingNewDataMap.keys()) + 1 : 0;\n }\n get columnCount() {\n return this.columns.length;\n }\n get floatingBottomRowCount() {\n var _this$totals$operatio3, _this$totals2, _this$totals2$operati;\n return this.totals != null && this.totals.showOnTop ? 0 : (_this$totals$operatio3 = (_this$totals2 = this.totals) === null || _this$totals2 === void 0 ? void 0 : (_this$totals2$operati = _this$totals2.operationOrder) === null || _this$totals2$operati === void 0 ? void 0 : _this$totals2$operati.length) !== null && _this$totals$operatio3 !== void 0 ? _this$totals$operatio3 : 0;\n }\n get floatingTopRowCount() {\n var _this$totals$operatio4, _this$totals3, _this$totals3$operati;\n return this.totals != null && this.totals.showOnTop ? (_this$totals$operatio4 = (_this$totals3 = this.totals) === null || _this$totals3 === void 0 ? void 0 : (_this$totals3$operati = _this$totals3.operationOrder) === null || _this$totals3$operati === void 0 ? void 0 : _this$totals3$operati.length) !== null && _this$totals$operatio4 !== void 0 ? _this$totals$operatio4 : 0 : 0;\n }\n get isChartBuilderAvailable() {\n return true;\n }\n get isTotalsAvailable() {\n return this.table.getTotalsTable != null;\n }\n get isEditable() {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n cacheFormattedValue(x, y, text) {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n cachePendingValue(x, y, text) {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n clearPendingValue(x, y) {\n var column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n textValueForCell(x, y) {\n var _this$pendingStringDa, _this$formattedString;\n // First check if there's any pending values we should read from\n if (((_this$pendingStringDa = this.pendingStringData[x]) === null || _this$pendingStringDa === void 0 ? void 0 : _this$pendingStringDa[y]) !== undefined) {\n return this.pendingStringData[x][y];\n }\n\n // Use a separate cache from memoization just for the strings that are currently displayed\n if (((_this$formattedString = this.formattedStringData[x]) === null || _this$formattedString === void 0 ? void 0 : _this$formattedString[y]) === undefined) {\n var _value = this.valueForCell(x, y);\n if (_value === null) {\n return null;\n }\n if (_value === undefined) {\n return undefined;\n }\n var _column = this.sourceColumn(x, y);\n var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(this.formatter, _column.name, _column.type);\n var formatOverride;\n if (!hasCustomColumnFormat) {\n var formatForCell = this.formatForCell(x, y);\n if ((formatForCell === null || formatForCell === void 0 ? void 0 : formatForCell.formatString) != null) {\n formatOverride = formatForCell;\n }\n }\n var text = this.displayString(_value, _column.type, _column.name, formatOverride);\n this.cacheFormattedValue(x, y, text);\n }\n return this.formattedStringData[x][y];\n }\n textForCell(x, y) {\n var _this$columns$x;\n var text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null && this.pendingDataMap.has(pendingRow)) {\n // Asterisk to show a value is required for a key column on a row that has some data entered\n return '*';\n }\n }\n if (TableUtils.isTextType((_this$columns$x = this.columns[x]) === null || _this$columns$x === void 0 ? void 0 : _this$columns$x.type)) {\n if (text === null) {\n return this.formatter.showNullStrings ? 'null' : '';\n }\n if (text === '') {\n return this.formatter.showEmptyStrings ? 'empty' : '';\n }\n }\n return text !== null && text !== void 0 ? text : '';\n }\n truncationCharForCell(x) {\n var column = this.columns[x];\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type) && this.formatter.truncateNumbersWithPound) {\n return '#';\n }\n return undefined;\n }\n colorForCell(x, y, theme) {\n var data = this.dataForCell(x, y);\n if (data) {\n var {\n format,\n value: _value2\n } = data;\n if (_value2 == null || _value2 === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if (format && format.color) {\n return format.color;\n }\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n assertNotNull(theme.pendingTextColor);\n return theme.pendingTextColor;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (_value2 != null) {\n var _column2 = this.sourceColumn(x, y);\n if (TableUtils.isDateType(_column2.type) || _column2.name === 'Date') {\n assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(_column2.type)) {\n if (_value2 > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if (_value2 < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n assertNotNull(theme.errorTextColor);\n return theme.errorTextColor;\n }\n return theme.textColor;\n }\n backgroundColorForCell(x, y, theme) {\n var _this$formatForCell$b, _this$formatForCell;\n return (_this$formatForCell$b = (_this$formatForCell = this.formatForCell(x, y)) === null || _this$formatForCell === void 0 ? void 0 : _this$formatForCell.backgroundColor) !== null && _this$formatForCell$b !== void 0 ? _this$formatForCell$b : null;\n }\n textAlignForCell(x) {\n var column = this.columns[x];\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type)) {\n return 'right';\n }\n if (TableUtils.isDateType(type) || column.name === 'Date') {\n return 'center';\n }\n return 'left';\n }\n textForColumnHeader(x) {\n var _header$displayName;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var header = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(header)) {\n return header.isNew ? '' : header.name;\n }\n return (_header$displayName = header === null || header === void 0 ? void 0 : header.displayName) !== null && _header$displayName !== void 0 ? _header$displayName : header === null || header === void 0 ? void 0 : header.name;\n }\n colorForColumnHeader(x) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var column = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(column)) {\n var _column$color;\n return (_column$color = column.color) !== null && _column$color !== void 0 ? _column$color : null;\n }\n return null;\n }\n getColumnHeaderGroup(modelIndex, depth) {\n var group = this.columnAtDepth(modelIndex, depth);\n if (isColumnHeaderGroup(group)) {\n return group;\n }\n return undefined;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n var _this$columnAtDepth$n, _this$columnAtDepth;\n return this.columnHeaderParentMap.get((_this$columnAtDepth$n = (_this$columnAtDepth = this.columnAtDepth(modelIndex, depth)) === null || _this$columnAtDepth === void 0 ? void 0 : _this$columnAtDepth.name) !== null && _this$columnAtDepth$n !== void 0 ? _this$columnAtDepth$n : '');\n }\n columnAtDepth(x) {\n var _this$columns$x2;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (depth === 0) {\n return this.columns[x];\n }\n var columnName = (_this$columns$x2 = this.columns[x]) === null || _this$columns$x2 === void 0 ? void 0 : _this$columns$x2.name;\n var group = this.columnHeaderParentMap.get(columnName);\n if (!group) {\n return undefined;\n }\n var currentDepth = group.depth;\n while (currentDepth < depth) {\n group = this.columnHeaderParentMap.get(group.name);\n if (!group) {\n return undefined;\n }\n currentDepth = group.depth;\n }\n if (group.depth === depth) {\n return group;\n }\n return undefined;\n }\n textForRowFooter(y) {\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null && this.totals) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get initialMovedColumns() {\n var _this$layoutHints2;\n return this.getMemoizedInitialMovedColumns((_this$layoutHints2 = this.layoutHints) !== null && _this$layoutHints2 !== void 0 ? _this$layoutHints2 : undefined);\n }\n get initialColumnHeaderGroups() {\n var _this$layoutHints3;\n return this.getMemoizedInitialColumnHeaderGroups((_this$layoutHints3 = this.layoutHints) !== null && _this$layoutHints3 !== void 0 ? _this$layoutHints3 : undefined);\n }\n get columnMap() {\n return this.getMemoizedColumnMap(this.table.columns);\n }\n get columnHeaderMaxDepth() {\n var _this$_columnHeaderMa;\n return (_this$_columnHeaderMa = this._columnHeaderMaxDepth) !== null && _this$_columnHeaderMa !== void 0 ? _this$_columnHeaderMa : 1;\n }\n set columnHeaderMaxDepth(depth) {\n this._columnHeaderMaxDepth = depth;\n }\n get columnHeaderGroupMap() {\n return this._columnHeaderGroupMap;\n }\n get columnHeaderGroups() {\n return this._columnHeaderGroups;\n }\n set columnHeaderGroups(groups) {\n if (groups === this._columnHeaderGroups) {\n return;\n }\n var {\n groups: newGroups,\n maxDepth,\n parentMap,\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, groups !== null && groups !== void 0 ? groups : this.initialColumnHeaderGroups);\n this._columnHeaderGroups = newGroups;\n this.columnHeaderMaxDepth = maxDepth;\n this.columnHeaderParentMap = parentMap;\n this._columnHeaderGroupMap = groupMap;\n }\n row(y) {\n var _this$totals$operatio5, _this$totals4, _this$totals4$operati, _this$totals$showOnTo, _this$totals5, _this$viewportData$of, _this$viewportData, _this$viewportData$ro, _this$viewportData2, _this$viewportData2$r;\n var totalsRowCount = (_this$totals$operatio5 = (_this$totals4 = this.totals) === null || _this$totals4 === void 0 ? void 0 : (_this$totals4$operati = _this$totals4.operationOrder) === null || _this$totals4$operati === void 0 ? void 0 : _this$totals4$operati.length) !== null && _this$totals$operatio5 !== void 0 ? _this$totals$operatio5 : 0;\n var showOnTop = (_this$totals$showOnTo = (_this$totals5 = this.totals) === null || _this$totals5 === void 0 ? void 0 : _this$totals5.showOnTop) !== null && _this$totals$showOnTo !== void 0 ? _this$totals$showOnTo : false;\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n var _this$totals6, _this$totalsDataMap$g, _this$totalsDataMap;\n var operation = (_this$totals6 = this.totals) === null || _this$totals6 === void 0 ? void 0 : _this$totals6.operationOrder[totalsRow];\n assertNotNull(operation);\n return (_this$totalsDataMap$g = (_this$totalsDataMap = this.totalsDataMap) === null || _this$totalsDataMap === void 0 ? void 0 : _this$totalsDataMap.get(operation)) !== null && _this$totalsDataMap$g !== void 0 ? _this$totalsDataMap$g : null;\n }\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n var _this$pendingNewDataM;\n return (_this$pendingNewDataM = this.pendingNewDataMap.get(pendingRow)) !== null && _this$pendingNewDataM !== void 0 ? _this$pendingNewDataM : null;\n }\n var offset = (_this$viewportData$of = (_this$viewportData = this.viewportData) === null || _this$viewportData === void 0 ? void 0 : _this$viewportData.offset) !== null && _this$viewportData$of !== void 0 ? _this$viewportData$of : 0;\n var viewportY = (showOnTop ? y - totalsRowCount : y) - offset;\n return (_this$viewportData$ro = (_this$viewportData2 = this.viewportData) === null || _this$viewportData2 === void 0 ? void 0 : (_this$viewportData2$r = _this$viewportData2.rows) === null || _this$viewportData2$r === void 0 ? void 0 : _this$viewportData2$r[viewportY]) !== null && _this$viewportData$ro !== void 0 ? _this$viewportData$ro : null;\n }\n\n /**\n * Retrieve the source column for given coordinates.\n * - Retrieve the totals column if this is a totals row\n * - Retrieve the source column if it's a proxied column\n * - Otherwise return the column at the given index\n * @param column Column index to get the source column from\n * @param row Row index to get the source column from\n */\n sourceColumn(column, row) {\n var totalsRow = this.totalsRow(row);\n if (totalsRow != null) {\n var _this$totals7, _this$totals$defaultO, _this$totals8, _this$totalsTable;\n var operation = (_this$totals7 = this.totals) === null || _this$totals7 === void 0 ? void 0 : _this$totals7.operationOrder[totalsRow];\n var defaultOperation = (_this$totals$defaultO = (_this$totals8 = this.totals) === null || _this$totals8 === void 0 ? void 0 : _this$totals8.defaultOperation) !== null && _this$totals$defaultO !== void 0 ? _this$totals$defaultO : AggregationOperation.SUM;\n var tableColumn = this.columns[column];\n\n // Find the matching totals table column for the operation\n // When there are multiple aggregations, the column name will be the original name of the column with the operation appended afterward\n // When the the operation is the default operation OR there is only one operation, then the totals column name is just the original column name\n var totalsColumn = (_this$totalsTable = this.totalsTable) === null || _this$totalsTable === void 0 ? void 0 : _this$totalsTable.columns.find(col => {\n var _this$totals9;\n return col.name === \"\".concat(tableColumn.name, \"__\").concat(operation) || (operation === defaultOperation || ((_this$totals9 = this.totals) === null || _this$totals9 === void 0 ? void 0 : _this$totals9.operationOrder.length) === 1) && col.name === tableColumn.name;\n });\n if (totalsColumn != null) {\n return totalsColumn;\n }\n // There may be cases were the totals table doesn't have a column, such as when there's a virtual column\n }\n\n return this.columns[column];\n }\n\n /**\n * Translate from the row in the model to a row in the totals table.\n * If the row is not a totals row, return null\n * @param y The row in the model to get the totals row for\n * @returns The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y) {\n var _this$totals$operatio6, _this$totals10, _this$totals10$operat, _this$totals$showOnTo2, _this$totals11;\n var totalsRowCount = (_this$totals$operatio6 = (_this$totals10 = this.totals) === null || _this$totals10 === void 0 ? void 0 : (_this$totals10$operat = _this$totals10.operationOrder) === null || _this$totals10$operat === void 0 ? void 0 : _this$totals10$operat.length) !== null && _this$totals$operatio6 !== void 0 ? _this$totals$operatio6 : 0;\n var showOnTop = (_this$totals$showOnTo2 = (_this$totals11 = this.totals) === null || _this$totals11 === void 0 ? void 0 : _this$totals11.showOnTop) !== null && _this$totals$showOnTo2 !== void 0 ? _this$totals$showOnTo2 : false;\n var totalsRow = showOnTop ? y : y - this.table.size;\n if (totalsRow >= 0 && totalsRow < totalsRowCount) {\n return totalsRow;\n }\n return null;\n }\n\n /**\n * Translate from the row in the model to a pending input row.\n * If the row is not a pending input row, return null\n * @param y The row in the model to get the pending row for\n * @returns The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y) {\n var pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0 && pendingRow < this.pendingNewRowCount) {\n return pendingRow;\n }\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param y The row in the model to check if it's a totals table row\n * @returns True if the row is a totals row, false if not\n */\n isTotalsRow(y) {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param y The row in the model to check if it's a pending new row\n * @returns True if the row is a pending new row, false if not\n */\n isPendingRow(y) {\n return this.pendingRow(y) != null;\n }\n dataForCell(x, y) {\n var _this$row;\n return (_this$row = this.row(y)) === null || _this$row === void 0 ? void 0 : _this$row.data.get(x);\n }\n formatForCell(x, y) {\n var _this$dataForCell;\n return (_this$dataForCell = this.dataForCell(x, y)) === null || _this$dataForCell === void 0 ? void 0 : _this$dataForCell.format;\n }\n valueForCell(x, y) {\n var data = this.dataForCell(x, y);\n\n /* JS API current sets null values as undefined in some instances. This means \n we need to nullish coaelesce so all undefined values from the API return null \n since the data has been fetched. undefined is used to indicate the API has not \n fetched data yet */\n if (data) {\n var _data$value;\n return (_data$value = data.value) !== null && _data$value !== void 0 ? _data$value : null;\n }\n return undefined;\n }\n copyViewportData(data) {\n if (data == null) {\n log.warn('invalid data!');\n return;\n }\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n copyTotalsData(totalsData) {\n var _this$totals$defaultO2,\n _this$totals12,\n _this$totals13,\n _this = this;\n if (totalsData == null) {\n log.warn('invalid data!');\n return;\n }\n var {\n columns,\n rows\n } = totalsData;\n if (rows.length !== 1) {\n log.error('Unexpected number of rows received for totals table, ignoring update');\n return;\n }\n var dataMap = new Map();\n var row = rows[0];\n var defaultOperation = (_this$totals$defaultO2 = (_this$totals12 = this.totals) === null || _this$totals12 === void 0 ? void 0 : _this$totals12.defaultOperation) !== null && _this$totals$defaultO2 !== void 0 ? _this$totals$defaultO2 : AggregationOperation.SUM;\n var operationMap = (_this$totals13 = this.totals) === null || _this$totals13 === void 0 ? void 0 : _this$totals13.operationMap;\n var _loop = function _loop() {\n var _operationMap$name$, _operationMap$name;\n var column = columns[c];\n var [name, operation = (_operationMap$name$ = operationMap === null || operationMap === void 0 ? void 0 : (_operationMap$name = operationMap[name]) === null || _operationMap$name === void 0 ? void 0 : _operationMap$name[0]) !== null && _operationMap$name$ !== void 0 ? _operationMap$name$ : defaultOperation] = column.name.split('__');\n if (!dataMap.has(operation)) {\n dataMap.set(operation, {\n data: new Map()\n });\n }\n var {\n data: rowData\n } = dataMap.get(operation);\n var columnIndex = _this.columns.findIndex(col => col.name === name);\n rowData.set(columnIndex, {\n value: row.get(column),\n format: row.getFormat(column)\n });\n };\n for (var c = 0; c < columns.length; c += 1) {\n _loop();\n }\n log.debug2('copyTotalsData', dataMap);\n this.totalsDataMap = dataMap;\n this.formattedStringData = [];\n }\n\n /**\n * Use this as the canonical column index since things like layoutHints could have\n * changed the column order.\n */\n getColumnIndexByName(name) {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param data The data to copy from\n */\n extractViewportData(data) {\n var newData = {\n offset: data.offset,\n rows: []\n };\n var {\n columns\n } = data;\n for (var r = 0; r < data.rows.length; r += 1) {\n var _row = data.rows[r];\n var newRow = this.extractViewportRow(_row, columns);\n newData.rows.push(newRow);\n }\n return newData;\n }\n extractViewportRow(row, columns) {\n var data = new Map();\n for (var c = 0; c < columns.length; c += 1) {\n var _column3 = columns[c];\n var index = this.getColumnIndexByName(_column3.name);\n assertNotNull(index);\n data.set(index, {\n value: row.get(_column3),\n format: row.getFormat(_column3)\n });\n }\n return {\n data\n };\n }\n closeSubscription() {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n }\n this.setViewport.cancel();\n this.applyViewport.cancel();\n }\n get filter() {\n return this.table.filter;\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n get formatter() {\n return this.irisFormatter;\n }\n set formatter(formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED));\n }\n displayString(value, columnType) {\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var formatOverride = arguments.length > 3 ? arguments[3] : undefined;\n return this.getCachedFormattedString(this.formatter, value, columnType, columnName, formatOverride);\n }\n get sort() {\n return this.table.sort;\n }\n set sort(sort) {\n this.closeSubscription();\n this.table.applySort(sort);\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n setTotalsTable(totalsTable) {\n log.debug('setTotalsTable', totalsTable);\n if (this.totalsTable !== null) {\n if (this.listenerCount > 0) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.totalsTable.close();\n }\n this.totalsTable = totalsTable;\n this.totalsDataMap = null;\n if (this.listenerCount > 0 && this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n }\n\n /**\n * Applies the current viewport to the underlying table.\n */\n\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n log.debug2('applyBufferedViewport', viewportTop, viewportBottom, columns);\n if (this.subscription == null) {\n log.debug2('applyBufferedViewport creating new subscription');\n this.subscription = this.table.setViewport(viewportTop, viewportBottom, columns);\n } else {\n log.debug2('applyBufferedViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }\n snapshot(ranges) {\n var _arguments = arguments,\n _this2 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var formatValue = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : value => value;\n var consolidateRanges = _arguments.length > 3 && _arguments[3] !== undefined ? _arguments[3] : true;\n if (_this2.subscription == null) {\n throw new Error('No subscription available');\n }\n var consolidated = consolidateRanges ? GridRange.consolidate(ranges) : ranges;\n if (!IrisGridUtils.isValidSnapshotRanges(consolidated)) {\n throw new Error(\"Invalid snapshot ranges \".concat(ranges));\n }\n\n // Need to separate out the floating ranges as they're from a different source\n var topFloatingRowsSet = new Set();\n var tableRanges = [];\n var bottomFloatingRowsSet = new Set();\n for (var i = 0; i < consolidated.length; i += 1) {\n var range = consolidated[i];\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n // Get the rows that are in the top aggregations section\n for (var r = range.startRow; r <= range.endRow && r < _this2.floatingTopRowCount; r += 1) {\n topFloatingRowsSet.add(r);\n }\n\n // Separate out the range that is part of the actual table (ie. not the floating ranges, not aggregations)\n if (range.endRow >= _this2.floatingTopRowCount && range.startRow <= _this2.floatingTopRowCount + _this2.table.size) {\n tableRanges.push(new GridRange(range.startColumn, Math.min(Math.max(0, range.startRow - _this2.floatingTopRowCount)), range.endColumn, Math.min(Math.max(0, range.endRow - _this2.floatingTopRowCount), _this2.table.size - _this2.floatingTopRowCount)));\n }\n // Get the rows that are in the bottom aggregations section\n for (var _r = Math.max(range.startRow, _this2.floatingTopRowCount + _this2.table.size); _r <= range.endRow && _r < _this2.floatingTopRowCount + _this2.table.size + _this2.floatingBottomRowCount; _r += 1) {\n bottomFloatingRowsSet.add(_r);\n }\n }\n var columns = IrisGridUtils.columnsFromRanges(consolidated, _this2.columns);\n var result = [];\n if (includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var topFloatingRows = [...topFloatingRowsSet].sort();\n var _loop2 = function* _loop2() {\n var row = topFloatingRows[_i];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i = 0; _i < topFloatingRows.length; _i += 1) {\n yield* _loop2();\n }\n if (tableRanges.length > 0) {\n var rangeSet = _this2.irisGridUtils.rangeSetFromRanges(tableRanges);\n var snapshot = yield _this2.subscription.snapshot(rangeSet, columns);\n result.push(...snapshot.rows.map(rowData => columns.map(column => formatValue(rowData.get(column), column))));\n }\n var bottomFloatingRows = [...bottomFloatingRowsSet].sort();\n var _loop3 = function* _loop3() {\n var row = bottomFloatingRows[_i2];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i2 = 0; _i2 < bottomFloatingRows.length; _i2 += 1) {\n yield* _loop3();\n }\n return result;\n })();\n }\n\n /**\n * Get a text snapshot of the provided ranges\n * @param ranges The ranges to get the snapshot for\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue Function for formatting the raw value into a string\n * @returns A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n textSnapshot(ranges) {\n var _arguments2 = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;\n var formatValue = _arguments2.length > 2 && _arguments2[2] !== undefined ? _arguments2[2] : value => \"\".concat(value);\n log.debug2('textSnapshot', ranges, includeHeaders);\n var data = yield _this3.snapshot(ranges, includeHeaders, formatValue, false);\n return data.map(row => row.join('\\t')).join('\\n');\n })();\n }\n valuesTable(columns) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var table = null;\n try {\n table = yield _this4.table.copy();\n table.applyFilter([]);\n table.applySort([]);\n return table.selectDistinct(Array.isArray(columns) ? columns : [columns]);\n } finally {\n if (table != null) {\n table.close();\n }\n }\n })();\n }\n isColumnMovable(modelIndex, depth) {\n if (modelIndex < 0 || modelIndex >= this.columnCount) {\n return false;\n }\n\n // All groups are movable\n if (depth > 0) {\n return true;\n }\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName) || !columnName) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnSortable(modelIndex) {\n var _this$columns$modelIn;\n return (_this$columns$modelIn = this.columns[modelIndex].isSortable) !== null && _this$columns$modelIn !== void 0 ? _this$columns$modelIn : true;\n }\n isKeyColumn(x) {\n var _this$inputTable$keyC2, _this$inputTable2;\n return x < ((_this$inputTable$keyC2 = (_this$inputTable2 = this.inputTable) === null || _this$inputTable2 === void 0 ? void 0 : _this$inputTable2.keyColumns.length) !== null && _this$inputTable$keyC2 !== void 0 ? _this$inputTable$keyC2 : 0);\n }\n isRowMovable() {\n return false;\n }\n isEditableRange(range) {\n // Make sure we have an input table and a valid range\n if (this.inputTable == null || !GridRange.isBounded(range)) {\n return false;\n }\n\n // Check that the edit is in the editable range\n // If an input table has keyed columns, the non-key columns are always editable\n // If an input table does not have key columns, it is append only and existing rows cannot be editable\n // Pending rows are always editable\n var isPendingRange = this.isPendingRow(range.startRow) && this.isPendingRow(range.endRow);\n if (!(isPendingRange || this.inputTable.keyColumns.length !== 0 && range.startColumn >= this.inputTable.keyColumns.length && range.endColumn >= this.inputTable.keyColumns.length)) {\n return false;\n }\n\n // Editing the aggregations/totals which are floating above/below is not allowed\n if (range.startRow < this.floatingTopRowCount || range.startRow >= this.floatingTopRowCount + this.table.size + this.pendingRowCount || range.endRow >= this.floatingTopRowCount + this.table.size + this.pendingRowCount) {\n return false;\n }\n return true;\n }\n isDeletableRange(range) {\n return this.inputTable != null && range.startRow != null && range.endRow != null && range.startRow >= this.floatingTopRowCount && range.startRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount && range.endRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount;\n }\n isEditableRanges(ranges) {\n return ranges.every(range => this.isEditableRange(range));\n }\n isDeletableRanges(ranges) {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns A range corresponding to the underlying table\n */\n getTableAreaRange() {\n return new GridRange(null, this.floatingTopRowCount, null, this.floatingTopRowCount + this.table.size - 1);\n }\n\n /**\n * @returns A range corresponding to the pending new rows\n */\n getPendingAreaRange() {\n return new GridRange(null, this.floatingTopRowCount + this.table.size, null, this.floatingTopRowCount + this.table.size + this.pendingNewRowCount - 1);\n }\n\n /**\n * Set value in an editable table\n * @param x The column to set\n * @param y The row to set\n * @param value The value to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForCell(x, y, text) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n return _this5.setValueForRanges([new GridRange(x, y, x, y)], text);\n })();\n }\n\n /**\n * Set value in an editable table\n * @param ranges The ranges to set\n * @param value The values to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForRanges(ranges, text) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (!_this6.isEditableRanges(ranges)) {\n throw new Error(\"Uneditable ranges \".concat(ranges));\n }\n try {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n var columnSet = new Set();\n\n // Formatted text for each column\n // Since there could be different formatting for each column, but the value will be the same across rows\n var formattedText = [];\n GridRange.forEachCell(ranges, (x, y) => {\n var column = _this6.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n var _value3 = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n formattedText[x] = _value3 != null ? _this6.displayString(_value3, column.type, column.name) : null;\n }\n _this6.cachePendingValue(x, y, formattedText[x]);\n });\n\n // Take care of updates to the pending new area first, as they can be updated synchronously\n var pendingAreaRange = _this6.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this6.floatingTopRowCount + _this6.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_this6.pendingNewDataMap);\n GridRange.forEachCell(pendingRanges, (columnIndex, rowIndex) => {\n if (!newDataMap.has(rowIndex)) {\n newDataMap.set(rowIndex, {\n data: new Map()\n });\n }\n var column = _this6.columns[columnIndex];\n var row = newDataMap.get(rowIndex);\n assertNotNull(row);\n var {\n data: rowData\n } = row;\n var newRowData = new Map(rowData);\n var value = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n if (value != null) {\n newRowData.set(columnIndex, {\n value\n });\n } else {\n newRowData.delete(columnIndex);\n }\n if (newRowData.size > 0) {\n newDataMap.set(rowIndex, _objectSpread(_objectSpread({}, row), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(rowIndex);\n }\n });\n _this6.pendingDataMap = newDataMap;\n }\n _this6.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n var tableAreaRange = _this6.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this6$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this6.snapshot(tableRanges.map(range => {\n var _range$startRow, _range$endRow;\n return new GridRange(null, (_range$startRow = range === null || range === void 0 ? void 0 : range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : null, null, (_range$endRow = range === null || range === void 0 ? void 0 : range.endRow) !== null && _range$endRow !== void 0 ? _range$endRow : null);\n }));\n var newRows = data.map(row => {\n var newRow = {};\n for (var c = 0; c < _this6.columns.length; c += 1) {\n newRow[_this6.columns[c].name] = row[c];\n }\n columnSet.forEach(column => {\n newRow[column.name] = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n });\n return newRow;\n });\n var result = yield (_this6$inputTable = _this6.inputTable) === null || _this6$inputTable === void 0 ? void 0 : _this6$inputTable.addRows(newRows);\n log.debug('setValueForRanges(', ranges, ',', text, ') set tableRanges', tableRanges, 'result', result);\n }\n\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n GridRange.forEachCell(ranges, (x, y) => {\n var cellText = formattedText[x];\n assertNotNull(cellText);\n _this6.cacheFormattedValue(x, y, cellText);\n });\n } catch (err) {\n log.error('Unable to set ranges', ranges, text, err);\n } finally {\n GridRange.forEachCell(ranges, (x, y) => {\n _this6.clearPendingValue(x, y);\n });\n }\n })();\n }\n setValues() {\n var _arguments3 = arguments,\n _this7 = this;\n return _asyncToGenerator(function* () {\n var edits = _arguments3.length > 0 && _arguments3[0] !== undefined ? _arguments3[0] : [];\n log.debug('setValues(', edits, ')');\n if (!edits.every(edit => {\n var _edit$column, _edit$row;\n return _this7.isEditableRange(GridRange.makeCell((_edit$column = edit.column) !== null && _edit$column !== void 0 ? _edit$column : edit.x, (_edit$row = edit.row) !== null && _edit$row !== void 0 ? _edit$row : edit.y));\n })) {\n throw new Error(\"Uneditable ranges \".concat(edits));\n }\n try {\n var newDataMap = new Map(_this7.pendingNewDataMap);\n\n // Cache the display values\n edits.forEach(edit => {\n var _edit$column2, _edit$row2;\n var {\n text\n } = edit;\n var x = (_edit$column2 = edit.column) !== null && _edit$column2 !== void 0 ? _edit$column2 : edit.x;\n var y = (_edit$row2 = edit.row) !== null && _edit$row2 !== void 0 ? _edit$row2 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cachePendingValue(x, y, formattedText);\n\n // Take care of updates to the pending new area as well, as that can be updated synchronously\n var pendingRow = _this7.pendingRow(y);\n if (pendingRow != null) {\n if (!newDataMap.has(pendingRow)) {\n newDataMap.set(pendingRow, {\n data: new Map()\n });\n }\n var _row2 = newDataMap.get(pendingRow);\n assertNotNull(_row2);\n var {\n data: rowData\n } = _row2;\n var newRowData = new Map(rowData);\n if (value != null) {\n newRowData.set(x, {\n value\n });\n } else {\n newRowData.delete(x);\n }\n if (newRowData.size > 0) {\n newDataMap.set(pendingRow, _objectSpread(_objectSpread({}, _row2), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(pendingRow);\n }\n }\n });\n _this7.pendingDataMap = newDataMap;\n\n // Send an update right after setting the pending map so the values are displayed immediately\n _this7.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n\n // Need to group by row...\n var rowEditMap = edits.reduce((rowMap, edit) => {\n var _edit$row3, _rowMap$get;\n var y = (_edit$row3 = edit.row) !== null && _edit$row3 !== void 0 ? _edit$row3 : edit.y;\n if (!rowMap.has(y)) {\n rowMap.set(y, []);\n }\n (_rowMap$get = rowMap.get(y)) === null || _rowMap$get === void 0 ? void 0 : _rowMap$get.push(edit);\n return rowMap;\n }, new Map());\n var ranges = GridRange.consolidate(edits.map(edit => {\n var _edit$column3, _edit$row4;\n return GridRange.makeCell((_edit$column3 = edit.column) !== null && _edit$column3 !== void 0 ? _edit$column3 : edit.x, (_edit$row4 = edit.row) !== null && _edit$row4 !== void 0 ? _edit$row4 : edit.y);\n }));\n var tableAreaRange = _this7.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this7$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this7.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(null, range.startRow, null, range.endRow);\n }));\n var newRows = data.map((row, dataIndex) => {\n var rowIndex = null;\n var r = dataIndex;\n for (var i = 0; i < tableRanges.length; i += 1) {\n var range = tableRanges[i];\n assertNotNull(range);\n var rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n assertNotNull(range.startRow);\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n var newRow = {};\n for (var c = 0; c < _this7.columns.length; c += 1) {\n newRow[_this7.columns[c].name] = row[c];\n }\n assertNotNull(rowIndex);\n var rowEdits = rowEditMap.get(rowIndex);\n if (rowEdits != null) {\n rowEdits.forEach(edit => {\n var _edit$column4;\n var column = _this7.columns[(_edit$column4 = edit.column) !== null && _edit$column4 !== void 0 ? _edit$column4 : edit.x];\n newRow[column.name] = _this7.tableUtils.makeValue(column.type, edit.text, _this7.formatter.timeZone);\n });\n }\n return newRow;\n });\n log.info('setValues setting tableRanges', tableRanges);\n var result = yield (_this7$inputTable = _this7.inputTable) === null || _this7$inputTable === void 0 ? void 0 : _this7$inputTable.addRows(newRows);\n log.info('setValues set tableRanges', tableRanges, 'SUCCESS', result);\n }\n\n // We've sent the changes to the server, but have not yet got an update with those changes committed\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n edits.forEach(edit => {\n var _edit$column5, _edit$row5;\n var {\n text\n } = edit;\n var x = (_edit$column5 = edit.column) !== null && _edit$column5 !== void 0 ? _edit$column5 : edit.x;\n var y = (_edit$row5 = edit.row) !== null && _edit$row5 !== void 0 ? _edit$row5 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cacheFormattedValue(x, y, formattedText);\n });\n } finally {\n edits.forEach(edit => {\n _this7.clearPendingValue(edit.column, edit.row);\n });\n }\n })();\n }\n commitPending() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (_this8.pendingNewDataMap.size <= 0) {\n throw new Error('No pending changes to commit');\n }\n try {\n var _this8$inputTable, _this8$viewport$botto, _this8$viewport;\n _this8.isSaveInProgress = true;\n var newRows = [];\n _this8.pendingNewDataMap.forEach(row => {\n var newRow = {};\n row.data.forEach((_ref2, columnIndex) => {\n var {\n value\n } = _ref2;\n var column = _this8.columns[columnIndex];\n newRow[column.name] = value;\n });\n newRows.push(newRow);\n });\n var result = yield (_this8$inputTable = _this8.inputTable) === null || _this8$inputTable === void 0 ? void 0 : _this8$inputTable.addRows(newRows);\n log.debug('commitPending()', _this8.pendingNewDataMap, 'result', result);\n _this8.pendingNewDataMap = new Map();\n _this8.pendingNewRowCount = Math.max(0, ((_this8$viewport$botto = (_this8$viewport = _this8.viewport) === null || _this8$viewport === void 0 ? void 0 : _this8$viewport.bottom) !== null && _this8$viewport$botto !== void 0 ? _this8$viewport$botto : 0) - _this8.table.size);\n _this8.formattedStringData = [];\n _this8.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n } finally {\n _this8.isSaveInProgress = false;\n }\n })();\n }\n editValueForCell(x, y) {\n return this.textValueForCell(x, y);\n }\n delete(ranges) {\n return _asyncToGenerator(function* () {\n throw new Error('Delete not implemented');\n })();\n }\n isValidForCell(x, y, value) {\n try {\n var _column4 = this.columns[x];\n this.tableUtils.makeValue(_column4.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n_defineProperty(IrisGridTableModelTemplate, \"ROW_BUFFER_PAGES\", 1);\nexport default IrisGridTableModelTemplate;\n//# sourceMappingURL=IrisGridTableModelTemplate.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nvar log = Log.module('IrisGridTableModel');\n\n/**\n * Model for a grid showing an iris data table\n */\n\nclass IrisGridTableModel extends IrisGridTableModelTemplate {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh, table, formatter, inputTable);\n _defineProperty(this, \"userFrozenColumns\", void 0);\n _defineProperty(this, \"customColumnList\", void 0);\n _defineProperty(this, \"formatColumnList\", void 0);\n _defineProperty(this, \"initialFilters\", []);\n _defineProperty(this, \"getMemoizedFrontColumns\", memoize(layoutHintsFrontColumns => layoutHintsFrontColumns !== null && layoutHintsFrontColumns !== void 0 ? layoutHintsFrontColumns : []));\n _defineProperty(this, \"getMemoizedBackColumns\", memoize(layoutHintsBackColumns => layoutHintsBackColumns !== null && layoutHintsBackColumns !== void 0 ? layoutHintsBackColumns : []));\n _defineProperty(this, \"getMemoizedFrozenColumns\", memoize((layoutHintsFrozenColumns, userFrozenColumns) => {\n var _ref;\n return (_ref = userFrozenColumns !== null && userFrozenColumns !== void 0 ? userFrozenColumns : layoutHintsFrozenColumns) !== null && _ref !== void 0 ? _ref : [];\n }));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize(columns => new Set(columns.map((_, index) => index))));\n _defineProperty(this, \"getCachedPartitionColumns\", memoize(columns => columns.filter(column => column.isPartitionColumn)));\n this.customColumnList = [];\n this.formatColumnList = [];\n this.initialFilters = table.filter;\n }\n get isExportAvailable() {\n return this.table.freeze != null;\n }\n get isColumnStatisticsAvailable() {\n return this.table.getColumnStatistics != null;\n }\n get isValuesTableAvailable() {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n get isRollupAvailable() {\n return this.table.rollup != null;\n }\n get isSelectDistinctAvailable() {\n return this.table.selectDistinct != null;\n }\n get isCustomColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n get isFormatColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n get frontColumns() {\n var _this$layoutHints;\n return this.getMemoizedFrontColumns((_this$layoutHints = this.layoutHints) === null || _this$layoutHints === void 0 ? void 0 : _this$layoutHints.frontColumns);\n }\n get backColumns() {\n var _this$layoutHints2;\n return this.getMemoizedBackColumns((_this$layoutHints2 = this.layoutHints) === null || _this$layoutHints2 === void 0 ? void 0 : _this$layoutHints2.backColumns);\n }\n get frozenColumns() {\n var _this$layoutHints3;\n return this.getMemoizedFrozenColumns((_this$layoutHints3 = this.layoutHints) === null || _this$layoutHints3 === void 0 ? void 0 : _this$layoutHints3.frozenColumns, this.userFrozenColumns);\n }\n get layoutHints() {\n return this.table.layoutHints;\n }\n get floatingLeftColumnCount() {\n return this.frozenColumns.length;\n }\n get description() {\n return this.table.description;\n }\n get customColumns() {\n return this.customColumnList;\n }\n set customColumns(customColumns) {\n log.debug2('set customColumns', customColumns, this.customColumnList, customColumns === this.customColumnList);\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n get formatColumns() {\n return this.formatColumnList;\n }\n set formatColumns(formatColumns) {\n log.debug2('set formatColumns', formatColumns, this.formatColumnList, formatColumns === this.formatColumnList);\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n updateFrozenColumns(columns) {\n this.userFrozenColumns = columns;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: this.table\n }));\n }\n get partitionColumns() {\n return this.getCachedPartitionColumns(this.columns);\n }\n partitionKeysTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.valuesTable(_this.partitionColumns);\n })();\n }\n partitionMergedTable() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var t = yield _this2.table.copy();\n t.applyFilter([]);\n return t;\n })();\n }\n partitionTable(partitions) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n log.debug('getting partition table for partitions', partitions);\n var partitionFilters = [];\n for (var i = 0; i < _this3.partitionColumns.length; i += 1) {\n var partition = partitions[i];\n var partitionColumn = _this3.partitionColumns[i];\n var partitionFilter = _this3.tableUtils.makeFilterRawValue(partitionColumn.type, partition);\n partitionFilters.push(partitionColumn.filter().eq(partitionFilter));\n }\n var t = yield _this3.table.copy();\n t.applyFilter([..._this3.initialFilters, ...partitionFilters]);\n return t;\n })();\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter([...this.initialFilters, ...filter]);\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n get isFilterRequired() {\n return this.table.isUncoalesced;\n }\n get isPartitionRequired() {\n return this.table.isUncoalesced && this.isValuesTableAvailable && this.partitionColumns.length > 0;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n export() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n return _this4.table.freeze();\n })();\n }\n columnStatistics(column) {\n return this.table.getColumnStatistics(column);\n }\n isColumnMovable(modelIndex) {\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName)) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnFrozen(modelIndex) {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\n }\n delete(ranges) {\n var _superprop_getPendingDataMap = () => super.pendingDataMap,\n _superprop_setPendingDataMap = _value => super.pendingDataMap = _value,\n _this5 = this;\n return _asyncToGenerator(function* () {\n var _this5$inputTable;\n if (!_this5.isDeletableRanges(ranges)) {\n throw new Error(\"Undeletable ranges \".concat(ranges));\n }\n assertNotNull(_this5.inputTable);\n var {\n keyColumns\n } = _this5.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n var pendingAreaRange = _this5.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this5.floatingTopRowCount + _this5.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_superprop_getPendingDataMap());\n for (var i = 0; i < pendingRanges.length; i += 1) {\n var pendingRange = pendingRanges[i];\n assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\n for (var r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n _superprop_setPendingDataMap(newDataMap);\n _this5.formattedStringData = [];\n _this5.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n _this5.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n var tableAreaRange = _this5.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length <= 0) {\n return;\n }\n var [data, deleteTable] = yield Promise.all([\n // Need to get the key values of each row\n _this5.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n // Need to map each key column to it's range so we can pass that into the snapshot function\n return keyColumns.map(keyColumn => {\n var keyIndex = _this5.getColumnIndexByName(keyColumn.name);\n if (keyIndex == null) {\n throw new Error(\"Key column \".concat(keyColumn.name, \" not found\"));\n }\n return new GridRange(keyIndex, range.startRow, keyIndex, range.endRow);\n });\n }).flat()), _this5.table.copy()]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n var filters = data.map(row => {\n var columnFilters = [];\n for (var c = 0; c < keyColumns.length; c += 1) {\n var column = keyColumns[c];\n var value = row[c];\n var filterValue = _this5.tableUtils.makeFilterRawValue(column.type, value);\n var _filter = column.filter().eq(filterValue);\n columnFilters.push(_filter);\n }\n return columnFilters.reduce((agg, curr) => {\n var _agg$and;\n return (_agg$and = agg === null || agg === void 0 ? void 0 : agg.and(curr)) !== null && _agg$and !== void 0 ? _agg$and : curr;\n });\n });\n var filter = filters.reduce((agg, curr) => {\n var _agg$or;\n return (_agg$or = agg === null || agg === void 0 ? void 0 : agg.or(curr)) !== null && _agg$or !== void 0 ? _agg$or : curr;\n });\n deleteTable.applyFilter([filter]);\n yield (_this5$inputTable = _this5.inputTable) === null || _this5$inputTable === void 0 ? void 0 : _this5$inputTable.deleteTable(deleteTable);\n deleteTable.close();\n })();\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n return _this6.table.seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards);\n })();\n }\n get isSeekRowAvailable() {\n return this.table.seekRow != null;\n }\n}\nexport default IrisGridTableModel;\n//# sourceMappingURL=IrisGridTableModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nclass EmptyIrisGridModel extends IrisGridModel {\n constructor(dh) {\n var formatter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Formatter(dh);\n super(dh);\n _defineProperty(this, \"modelFormatter\", void 0);\n this.modelFormatter = formatter;\n }\n get rowCount() {\n return 0;\n }\n get columnCount() {\n return 0;\n }\n textForCell(column, row) {\n return '';\n }\n textForColumnHeader(column, depth) {\n return undefined;\n }\n get columns() {\n return EMPTY_ARRAY;\n }\n getColumnIndexByName(name) {\n return undefined;\n }\n get initialMovedColumns() {\n return EMPTY_ARRAY;\n }\n get initialMovedRows() {\n return EMPTY_ARRAY;\n }\n get initialColumnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n get groupedColumns() {\n return EMPTY_ARRAY;\n }\n formatForCell(column, row) {\n return undefined;\n }\n valueForCell(column, row) {\n return undefined;\n }\n get filter() {\n return EMPTY_ARRAY;\n }\n set filter(filter) {\n // No-op\n }\n get partition() {\n return EMPTY_ARRAY;\n }\n set partition(partition) {\n // No-op\n }\n get partitionColumns() {\n return EMPTY_ARRAY;\n }\n get formatter() {\n return this.modelFormatter;\n }\n set formatter(formatter) {\n this.modelFormatter = formatter;\n }\n displayString(value, columnType, columnName) {\n return '';\n }\n get sort() {\n return EMPTY_ARRAY;\n }\n set sort(sort) {\n // No-op\n }\n get customColumns() {\n return EMPTY_ARRAY;\n }\n set customColumns(customColumns) {\n // No-op\n }\n get formatColumns() {\n return EMPTY_ARRAY;\n }\n updateFrozenColumns(columns) {\n // Do nothing\n }\n get rollupConfig() {\n return null;\n }\n set rollupConfig(rollupConfig) {\n // No-op\n }\n get totalsConfig() {\n return null;\n }\n set totalsConfig(totalsConfig) {\n // No-op\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n return EMPTY_ARRAY;\n }\n set selectDistinctColumns(selectDistinctColumns) {\n // No-op\n }\n get pendingDataMap() {\n return EMPTY_MAP;\n }\n set pendingDataMap(map) {\n // No-op\n }\n get pendingRowCount() {\n return 0;\n }\n set pendingRowCount(count) {\n // No-op\n }\n get pendingDataErrors() {\n return EMPTY_MAP;\n }\n commitPending() {\n return Promise.resolve();\n }\n setViewport(top, bottom, columns) {\n // No-op\n }\n snapshot(ranges) {\n return Promise.resolve([]);\n }\n textSnapshot(ranges, includeHeaders, formatValue) {\n return Promise.resolve('');\n }\n valuesTable(columns) {\n throw new Error('Method not implemented.');\n }\n delete(ranges) {\n return Promise.resolve();\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n return Promise.resolve(0);\n }\n get columnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n set columnHeaderGroups(groups) {\n // No-op\n }\n get columnHeaderGroupMap() {\n return EMPTY_MAP;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n return undefined;\n }\n}\nexport default EmptyIrisGridModel;\n//# sourceMappingURL=EmptyIrisGridModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport EmptyIrisGridModel from \"./EmptyIrisGridModel.js\";\nimport MissingPartitionError, { isMissingPartitionError } from \"./MissingPartitionError.js\";\nclass IrisGridPartitionedTableModel extends EmptyIrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Partitioned table to be used in the model\n * @param formatter The formatter to use when getting formats\n */\n constructor(dh, partitionedTable) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n super(dh, formatter);\n _defineProperty(this, \"partitionedTable\", void 0);\n this.partitionedTable = partitionedTable;\n }\n get isPartitionRequired() {\n return true;\n }\n get isReversible() {\n return false;\n }\n displayString(value, columnType, columnName) {\n return '';\n }\n close() {\n this.partitionedTable.close();\n }\n get columns() {\n return this.partitionedTable.columns;\n }\n get partitionColumns() {\n return this.partitionedTable.keyColumns;\n }\n partitionKeysTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.partitionedTable.getKeyTable();\n })();\n }\n partitionMergedTable() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.partitionedTable.getMergedTable();\n })();\n }\n partitionTable(partitions) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n try {\n var table = yield _this3.partitionedTable.getTable(partitions);\n if (table == null) {\n // TODO: Will be unnecessary with https://github.com/deephaven/deephaven-core/pull/5050\n throw new MissingPartitionError('Partition not found');\n }\n return table;\n } catch (e) {\n if (!isMissingPartitionError(e)) {\n throw new MissingPartitionError('Unable to retrieve partition');\n } else {\n throw e;\n }\n }\n })();\n }\n}\nexport default IrisGridPartitionedTableModel;\n//# sourceMappingURL=IrisGridPartitionedTableModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull } from '@deephaven/utils';\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nvar log = Log.module('IrisGridTreeTableModel');\nclass IrisGridTreeTableModel extends IrisGridTableModelTemplate {\n /** We keep a virtual column at the front that tracks the \"group\" that is expanded */\n\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh, table, formatter, inputTable);\n _defineProperty(this, \"virtualColumns\", void 0);\n _defineProperty(this, \"getCachedColumns\", memoize((virtualColumns, tableColumns) => [...virtualColumns, ...tableColumns]));\n _defineProperty(this, \"getCachedGroupColumns\", memoize((virtualColumns, tableGroupedColumns) => [...virtualColumns, ...tableGroupedColumns]));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize((columns, groupedColumns, virtualColumns) => new Set(((groupedColumns === null || groupedColumns === void 0 ? void 0 : groupedColumns.length) > 0 ? groupedColumns : columns).filter(c => !virtualColumns.includes(c)).map(c1 => columns.findIndex(c2 => c1.name === c2.name)))));\n _defineProperty(this, \"getCachedGroupedColumnSet\", memoize(groupedColumns => new Set(groupedColumns.map(c1 => this.columns.findIndex(c2 => c1.name === c2.name)))));\n this.virtualColumns = [{\n name: '__DH_UI_GROUP__',\n displayName: 'Group',\n type: TableUtils.dataType.STRING,\n constituentType: TableUtils.dataType.STRING,\n isPartitionColumn: false,\n isSortable: false,\n isProxy: true,\n description: 'Key column',\n filter: () => {\n throw new Error('Filter not implemented for virtual column');\n },\n sort: () => {\n throw new Error('Sort not implemented virtual column');\n },\n formatColor: () => {\n throw new Error('Color not implemented for virtual column');\n },\n formatRowColor: () => {\n throw new Error('Color not implemented for virtual column');\n }\n }];\n }\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n var viewportColumns = [\n // Need to always fetch the grouped columns so we always have key data for the rows\n // Used to display our virtual key column\n ...this.table.groupedColumns, ...columns.filter(c => !this.virtualColumns.includes(c) && !this.groupedColumns.includes(c))];\n this.table.setViewport(viewportTop, viewportBottom, viewportColumns);\n }\n textForCell(x, y) {\n var column = this.sourceColumn(x, y);\n var row = this.row(y);\n if (row != null && column != null) {\n if (!row.hasChildren && column.constituentType != null) {\n var _value = this.valueForCell(x, y);\n return this.displayString(_value, column.constituentType, column.name);\n }\n // Show empty string instead of null in rollup grouping columns (issue #1483)\n if (row.hasChildren && row.depth <= x + 1 && this.valueForCell(x, y) === null && this.getCachedGroupedColumnSet(this.groupedColumns).has(x)) {\n return '';\n }\n }\n return super.textForCell(x, y);\n }\n extractViewportRow(row, columns) {\n var {\n isExpanded,\n hasChildren,\n depth\n } = row;\n var extractedRow = super.extractViewportRow(row, columns);\n var modifiedData = new Map(extractedRow.data);\n if (hasChildren) {\n for (var i = 0; i < this.virtualColumns.length; i += 1) {\n var key = i + (depth - 1) + (this.virtualColumns.length - 1);\n var cellData = modifiedData.get(key);\n if (cellData == null) {\n log.warn('Missing key data for virtual column', i, depth, key, row);\n } else {\n modifiedData.set(i, cellData);\n }\n }\n }\n return _objectSpread(_objectSpread({}, extractedRow), {}, {\n data: modifiedData,\n isExpanded,\n hasChildren,\n depth\n });\n }\n snapshot(ranges, includeHeaders, formatValue) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _this$viewport$column, _this$viewportData;\n assertNotNull(_this.viewport);\n assertNotNull(_this.viewportData);\n var columns = (_this$viewport$column = _this.viewport.columns) !== null && _this$viewport$column !== void 0 ? _this$viewport$column : _this.columns;\n var result = [];\n if (includeHeaders != null && includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var viewportRange = new GridRange(0, (_this$viewportData = _this.viewportData) === null || _this$viewportData === void 0 ? void 0 : _this$viewportData.offset, columns.length, _this.viewportData.offset + _this.viewportData.rows.length);\n for (var i = 0; i < ranges.length; i += 1) {\n var intersection = GridRange.intersection(viewportRange, ranges[i]);\n assertNotNull(intersection);\n assertNotNull(intersection.startRow);\n assertNotNull(intersection.endRow);\n for (var r = intersection.startRow; r <= intersection.endRow; r += 1) {\n var resultRow = [];\n var viewportRow = _this.viewportData.rows[r - _this.viewportData.offset];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (var c = intersection.startColumn; c <= intersection.endColumn; c += 1) {\n var _viewportRow$data$get;\n assertNotNull(formatValue);\n resultRow.push(formatValue((_viewportRow$data$get = viewportRow.data.get(c)) === null || _viewportRow$data$get === void 0 ? void 0 : _viewportRow$data$get.value, _this.columns[c]));\n }\n result.push(resultRow);\n }\n }\n return result;\n })();\n }\n get columns() {\n return this.getCachedColumns(this.virtualColumns, super.columns);\n }\n get groupedColumns() {\n return this.getCachedGroupColumns(this.virtualColumns, this.table.groupedColumns);\n }\n sourceForCell(column, row) {\n if (column >= this.virtualColumns.length) {\n return {\n column,\n row\n };\n }\n var depth = this.depthForRow(row);\n return {\n column: column + depth,\n row\n };\n }\n sourceColumn(column, row) {\n if (column >= this.virtualColumns.length) {\n return super.sourceColumn(column, row);\n }\n var depth = this.depthForRow(row);\n return this.columns[column + depth];\n }\n getClearFilterRange(column) {\n if (column >= this.virtualColumns.length) {\n return super.getClearFilterRange(column);\n }\n // Source for the proxied column could be any of the grouped columns.\n // Return the range of columns matching the grouped columns.\n return [this.virtualColumns.length, this.groupedColumns.length];\n }\n get hasExpandableRows() {\n return true;\n }\n get isExpandAllAvailable() {\n return this.table.expandAll !== undefined;\n }\n get isChartBuilderAvailable() {\n return false;\n }\n get isSelectDistinctAvailable() {\n return false;\n }\n get isReversible() {\n return false;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns, this.groupedColumns, this.virtualColumns).has(columnIndex);\n }\n isColumnMovable(column) {\n return column >= this.groupedColumns.length;\n }\n isRowExpandable(y) {\n var _row$hasChildren;\n var row = this.row(y);\n return (_row$hasChildren = row === null || row === void 0 ? void 0 : row.hasChildren) !== null && _row$hasChildren !== void 0 ? _row$hasChildren : false;\n }\n isRowExpanded(y) {\n var _row$isExpanded;\n var row = this.row(y);\n return (_row$isExpanded = row === null || row === void 0 ? void 0 : row.isExpanded) !== null && _row$isExpanded !== void 0 ? _row$isExpanded : false;\n }\n setRowExpanded(y, isExpanded) {\n var expandDescendants = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (this.isExpandAllAvailable) {\n this.table.setExpanded(y, isExpanded, expandDescendants);\n } else {\n this.table.setExpanded(y, isExpanded);\n }\n }\n expandAll() {\n if (this.table.expandAll) {\n this.table.expandAll();\n }\n }\n collapseAll() {\n if (this.table.collapseAll) {\n this.table.collapseAll();\n }\n }\n depthForRow(y) {\n var _row$depth;\n var row = this.row(y);\n return ((_row$depth = row === null || row === void 0 ? void 0 : row.depth) !== null && _row$depth !== void 0 ? _row$depth : 1) - 1;\n }\n updateFrozenColumns(columns) {\n if (columns.length > 0) {\n throw new Error('Cannot freeze columns on a tree table');\n }\n }\n}\nexport default IrisGridTreeTableModel;\n//# sourceMappingURL=IrisGridTreeTableModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport deepEqual from 'deep-equal';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils } from '@deephaven/utils';\nimport { isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport IrisGridTableModel from \"./IrisGridTableModel.js\";\nimport IrisGridPartitionedTableModel from \"./IrisGridPartitionedTableModel.js\";\nimport IrisGridTreeTableModel from \"./IrisGridTreeTableModel.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport { isIrisGridTableModelTemplate } from \"./IrisGridTableModelTemplate.js\";\nimport { isPartitionedGridModelProvider } from \"./PartitionedGridModel.js\";\nvar log = Log.module('IrisGridProxyModel');\nfunction makeModel(dh, table, formatter, inputTable) {\n if (TableUtils.isTreeTable(table)) {\n return new IrisGridTreeTableModel(dh, table, formatter);\n }\n if (TableUtils.isPartitionedTable(table)) {\n return new IrisGridPartitionedTableModel(dh, table, formatter);\n }\n return new IrisGridTableModel(dh, table, formatter, inputTable);\n}\n\n/**\n * Model which proxies calls to other IrisGridModels.\n * This allows for operations that generate new tables, like rollups.\n */\nclass IrisGridProxyModel extends IrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n\n constructor(dh, table) {\n var _this;\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh);\n _this = this;\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"originalModel\", void 0);\n _defineProperty(this, \"model\", void 0);\n _defineProperty(this, \"modelPromise\", void 0);\n _defineProperty(this, \"rollup\", void 0);\n _defineProperty(this, \"partition\", void 0);\n _defineProperty(this, \"selectDistinct\", void 0);\n _defineProperty(this, \"currentViewport\", void 0);\n _defineProperty(this, \"textForCell\", function () {\n return _this.model.textForCell(...arguments);\n });\n _defineProperty(this, \"truncationCharForCell\", function () {\n return _this.model.truncationCharForCell(...arguments);\n });\n _defineProperty(this, \"textAlignForCell\", function () {\n return _this.model.textAlignForCell(...arguments);\n });\n _defineProperty(this, \"colorForCell\", function () {\n return _this.model.colorForCell(...arguments);\n });\n _defineProperty(this, \"backgroundColorForCell\", function () {\n return _this.model.backgroundColorForCell(...arguments);\n });\n _defineProperty(this, \"textForColumnHeader\", function () {\n return _this.model.textForColumnHeader(...arguments);\n });\n _defineProperty(this, \"colorForColumnHeader\", function () {\n return _this.model.colorForColumnHeader(...arguments);\n });\n _defineProperty(this, \"textForRowHeader\", function () {\n return _this.model.textForRowHeader(...arguments);\n });\n _defineProperty(this, \"textForRowFooter\", function () {\n return _this.model.textForRowFooter(...arguments);\n });\n _defineProperty(this, \"isRowMovable\", function () {\n return _this.model.isRowMovable(...arguments);\n });\n _defineProperty(this, \"isColumnMovable\", function () {\n return _this.model.isColumnMovable(...arguments);\n });\n _defineProperty(this, \"isRowExpandable\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.isRowExpandable(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"isRowExpanded\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.isRowExpanded(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"setRowExpanded\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.setRowExpanded(...arguments);\n }\n throw Error('Function setRowExpanded does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"expandAll\", () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.expandAll();\n }\n throw Error('Function expandAll does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"collapseAll\", () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.collapseAll();\n }\n throw Error('Function collapseAll does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"depthForRow\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.depthForRow(...arguments);\n }\n return 0;\n // throw Error('Function depthForRow does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"getColumnHeaderGroup\", function () {\n return _this.model.getColumnHeaderGroup(...arguments);\n });\n _defineProperty(this, \"getColumnHeaderParentGroup\", function () {\n return _this.model.getColumnHeaderParentGroup(...arguments);\n });\n _defineProperty(this, \"sourceForCell\", function () {\n return _this.model.sourceForCell(...arguments);\n });\n _defineProperty(this, \"getClearFilterRange\", function () {\n return _this.model.getClearFilterRange(...arguments);\n });\n _defineProperty(this, \"formatForCell\", function () {\n return _this.model.formatForCell(...arguments);\n });\n _defineProperty(this, \"valueForCell\", function () {\n return _this.model.valueForCell(...arguments);\n });\n _defineProperty(this, \"renderTypeForCell\", function () {\n return _this.model.renderTypeForCell(...arguments);\n });\n _defineProperty(this, \"dataBarOptionsForCell\", function () {\n return _this.model.dataBarOptionsForCell(...arguments);\n });\n _defineProperty(this, \"displayString\", function () {\n return _this.model.displayString(...arguments);\n });\n _defineProperty(this, \"isEditableRange\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.isEditableRange(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"isFilterable\", function () {\n return _this.model.isFilterable(...arguments);\n });\n _defineProperty(this, \"setViewport\", (top, bottom, columns) => {\n this.currentViewport = {\n top,\n bottom,\n columns\n };\n this.model.setViewport(top, bottom, columns);\n });\n _defineProperty(this, \"snapshot\", function () {\n return _this.model.snapshot(...arguments);\n });\n _defineProperty(this, \"textSnapshot\", function () {\n return _this.model.textSnapshot(...arguments);\n });\n _defineProperty(this, \"valuesTable\", function () {\n return _this.model.valuesTable(...arguments);\n });\n _defineProperty(this, \"editValueForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.editValueForCell(...arguments);\n }\n return '';\n });\n _defineProperty(this, \"setValueForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValueForCell(...arguments);\n }\n return Promise.reject(new Error('Model is not editable'));\n });\n _defineProperty(this, \"setValueForRanges\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValueForRanges(...arguments);\n }\n return Promise.reject(new Error('Model is not editable'));\n });\n _defineProperty(this, \"setValues\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValues(...arguments);\n }\n return Promise.resolve();\n });\n _defineProperty(this, \"isValidForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.isValidForCell(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"delete\", function () {\n return _this.model.delete(...arguments);\n });\n _defineProperty(this, \"commitPending\", function () {\n return _this.model.commitPending(...arguments);\n });\n this.handleModelEvent = this.handleModelEvent.bind(this);\n var model = makeModel(dh, table, formatter, inputTable);\n this.dh = dh;\n this.originalModel = model;\n this.model = model;\n this.modelPromise = null;\n this.rollup = null;\n this.partition = null;\n this.selectDistinct = [];\n }\n close() {\n this.originalModel.close();\n if (this.model !== this.originalModel) {\n this.model.close();\n }\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n }\n handleModelEvent(event) {\n log.debug2('handleModelEvent', event);\n var {\n detail,\n type\n } = event;\n this.dispatchEvent(new EventShimCustomEvent(type, {\n detail\n }));\n }\n setModel(model) {\n log.debug('setModel', model);\n var oldModel = this.model;\n var {\n columns: oldColumns\n } = oldModel;\n if (oldModel !== this.originalModel) {\n oldModel.close();\n }\n this.model = model;\n if (this.listenerCount > 0) {\n this.addListeners(model);\n }\n if (oldColumns !== model.columns) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: model.columns\n }));\n } else if (this.currentViewport != null) {\n // If the columns haven't changed, the current viewport should still valid, and needs to be set on the new model\n var {\n top,\n bottom,\n columns\n } = this.currentViewport;\n model.setViewport(top, bottom, columns);\n }\n if (isIrisGridTableModelTemplate(model)) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: model.table\n }));\n }\n }\n setNextModel(modelPromise) {\n log.debug2('setNextModel');\n if (this.modelPromise) {\n this.modelPromise.cancel();\n }\n if (this.listenerCount > 0) {\n this.removeListeners(this.model);\n }\n this.modelPromise = PromiseUtils.makeCancelable(modelPromise, model => model.close());\n this.modelPromise.then(model => {\n this.modelPromise = null;\n this.setModel(model);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('setNextModel cancelled');\n return;\n }\n log.error('Unable to set next model', err);\n this.modelPromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n startListening() {\n super.startListening();\n this.addListeners(this.model);\n }\n stopListening() {\n super.stopListening();\n this.removeListeners(this.model);\n }\n addListeners(model) {\n var events = Object.keys(IrisGridModel.EVENT);\n for (var i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.addEventListener(events[i], this.handleModelEvent);\n }\n }\n removeListeners(model) {\n var events = Object.keys(IrisGridModel.EVENT);\n for (var i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.removeEventListener(events[i], this.handleModelEvent);\n }\n }\n get rowCount() {\n return this.model.rowCount;\n }\n get columnCount() {\n return this.model.columnCount;\n }\n get floatingTopRowCount() {\n return this.model.floatingTopRowCount;\n }\n get floatingBottomRowCount() {\n return this.model.floatingBottomRowCount;\n }\n get floatingLeftColumnCount() {\n return this.model.floatingLeftColumnCount;\n }\n get floatingRightColumnCount() {\n return this.model.floatingRightColumnCount;\n }\n isColumnFrozen(x) {\n return this.model.isColumnFrozen(x);\n }\n isColumnSortable(index) {\n return this.model.isColumnSortable(index);\n }\n get hasExpandableRows() {\n if (isExpandableGridModel(this.model)) {\n return this.model.hasExpandableRows;\n }\n return false;\n }\n get isExpandAllAvailable() {\n if (isExpandableGridModel(this.model)) {\n var _this$model$isExpandA;\n return (_this$model$isExpandA = this.model.isExpandAllAvailable) !== null && _this$model$isExpandA !== void 0 ? _this$model$isExpandA : false;\n }\n return false;\n }\n get isExportAvailable() {\n return this.model.isExportAvailable;\n }\n get isColumnStatisticsAvailable() {\n return this.model.isColumnStatisticsAvailable;\n }\n get isValuesTableAvailable() {\n return this.model.isValuesTableAvailable;\n }\n get isCustomColumnsAvailable() {\n return this.model.isCustomColumnsAvailable &&\n // Disable for selectDistinct tables\n !(this.isSelectDistinctAvailable && this.selectDistinctColumns.length > 0);\n }\n get isFormatColumnsAvailable() {\n return this.model.isFormatColumnsAvailable;\n }\n get isChartBuilderAvailable() {\n return this.model.isChartBuilderAvailable;\n }\n get isRollupAvailable() {\n return (this.originalModel.isRollupAvailable || this.rollup != null) && this.selectDistinct.length === 0;\n }\n get isSelectDistinctAvailable() {\n return (this.originalModel.isSelectDistinctAvailable || this.selectDistinct.length > 0) && this.rollup == null;\n }\n get isTotalsAvailable() {\n return this.model.isTotalsAvailable;\n }\n get isReversible() {\n return this.model.isReversible;\n }\n get columns() {\n return this.model.columns;\n }\n get initialMovedColumns() {\n return this.model.initialMovedColumns;\n }\n get initialMovedRows() {\n return this.model.initialMovedRows;\n }\n get layoutHints() {\n return this.model.layoutHints;\n }\n get frontColumns() {\n return this.model.frontColumns;\n }\n get backColumns() {\n return this.model.backColumns;\n }\n get frozenColumns() {\n return this.model.frozenColumns;\n }\n get columnHeaderGroups() {\n return this.model.columnHeaderGroups;\n }\n set columnHeaderGroups(groups) {\n this.model.columnHeaderGroups = groups;\n }\n get initialColumnHeaderGroups() {\n return this.model.initialColumnHeaderGroups;\n }\n get columnHeaderGroupMap() {\n return this.model.columnHeaderGroupMap;\n }\n get columnHeaderMaxDepth() {\n return this.model.columnHeaderMaxDepth;\n }\n updateFrozenColumns(columns) {\n return this.model.updateFrozenColumns(columns);\n }\n get originalColumns() {\n return this.originalModel.columns;\n }\n get groupedColumns() {\n return this.model.groupedColumns;\n }\n get partitionColumns() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n return [];\n }\n return this.originalModel.partitionColumns;\n }\n get description() {\n return this.model.description;\n }\n get filter() {\n return this.model.filter;\n }\n set filter(filter) {\n this.model.filter = filter;\n }\n get partitionConfig() {\n if (!isPartitionedGridModelProvider(this.originalModel) || !this.originalModel.isPartitionRequired) {\n return null;\n }\n return this.partition;\n }\n set partitionConfig(partitionConfig) {\n if (!this.isPartitionRequired) {\n throw new Error('Partitions are not available');\n }\n log.debug('set partitionConfig', partitionConfig);\n this.partition = partitionConfig;\n var modelPromise = Promise.resolve(this.originalModel);\n if (partitionConfig != null && isPartitionedGridModelProvider(this.originalModel)) {\n if (partitionConfig.mode === 'keys') {\n modelPromise = this.originalModel.partitionKeysTable().then(table => makeModel(this.dh, table, this.formatter));\n } else if (partitionConfig.mode === 'merged') {\n modelPromise = this.originalModel.partitionMergedTable().then(table => makeModel(this.dh, table, this.formatter));\n } else {\n modelPromise = this.originalModel.partitionTable(partitionConfig.partitions).then(table => makeModel(this.dh, table, this.formatter));\n }\n }\n this.setNextModel(modelPromise);\n }\n partitionKeysTable() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionKeysTable();\n }\n partitionMergedTable() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionMergedTable();\n }\n partitionTable(partitions) {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionTable(partitions);\n }\n get formatter() {\n return this.model.formatter;\n }\n set formatter(formatter) {\n this.model.formatter = formatter;\n }\n get sort() {\n return this.model.sort;\n }\n set sort(sort) {\n this.model.sort = sort;\n }\n get customColumns() {\n return this.model.customColumns;\n }\n set customColumns(customColumns) {\n this.model.customColumns = customColumns;\n }\n get formatColumns() {\n return this.model.formatColumns;\n }\n set formatColumns(formatColumns) {\n this.model.formatColumns = formatColumns;\n }\n get rollupConfig() {\n return this.rollup;\n }\n set rollupConfig(rollupConfig) {\n log.debug('set rollupConfig', rollupConfig);\n if (!this.isRollupAvailable) {\n throw new Error('Rollup Rows are not available');\n }\n\n // Prevent model update when IrisGridModelUpdater is mounted\n // if rollup is already initialized in IrisGridPanel\n if (deepEqual(rollupConfig, this.rollup)) {\n return;\n }\n this.rollup = rollupConfig;\n var modelPromise = Promise.resolve(this.originalModel);\n if (isIrisGridTableModelTemplate(this.originalModel) && rollupConfig != null) {\n modelPromise = this.originalModel.table.rollup(rollupConfig).then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n get selectDistinctColumns() {\n return this.selectDistinct;\n }\n set selectDistinctColumns(columnNames) {\n log.debug('set selectDistinctColumns', columnNames);\n if (!this.isSelectDistinctAvailable) {\n throw new Error('Select distinct is not available');\n }\n if (columnNames === this.selectDistinctColumns || columnNames.length === 0 && this.selectDistinctColumns.length === 0) {\n log.debug('Ignore same selectDistinctColumns', columnNames);\n return;\n }\n this.selectDistinct = columnNames;\n var selectDistinctColumns = columnNames.map(name => this.originalColumns.find(column => column.name === name)).filter(column => column != null);\n var modelPromise = Promise.resolve(this.originalModel);\n if (isIrisGridTableModelTemplate(this.originalModel) && selectDistinctColumns.length > 0) {\n modelPromise = this.originalModel.table.selectDistinct(selectDistinctColumns).then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n get table() {\n if (isIrisGridTableModelTemplate(this.model)) {\n return this.model.table;\n }\n return undefined;\n }\n get totalsConfig() {\n return this.model.totalsConfig;\n }\n set totalsConfig(totalsConfig) {\n this.model.totalsConfig = totalsConfig;\n }\n get isFilterRequired() {\n return this.originalModel.isFilterRequired;\n }\n get isPartitionRequired() {\n return isPartitionedGridModelProvider(this.originalModel) ? this.originalModel.isPartitionRequired : false;\n }\n get isEditable() {\n return isEditableGridModel(this.model) && this.model.isEditable;\n }\n export() {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'export' property\");\n }\n return this.model.export();\n }\n columnStatistics(column) {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'columnStatistics' function\");\n }\n return this.model.columnStatistics(column);\n }\n get pendingDataMap() {\n return this.model.pendingDataMap;\n }\n set pendingDataMap(map) {\n this.model.pendingDataMap = map;\n }\n get pendingRowCount() {\n return this.model.pendingRowCount;\n }\n set pendingRowCount(count) {\n this.model.pendingRowCount = count;\n }\n get pendingDataErrors() {\n return this.model.pendingDataErrors;\n }\n getColumnIndexByName(name) {\n return this.model.getColumnIndexByName(name);\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.model.seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards);\n })();\n }\n get isSeekRowAvailable() {\n return this.model.isSeekRowAvailable;\n }\n}\nexport default IrisGridProxyModel;\n//# sourceMappingURL=IrisGridProxyModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport IrisGridProxyModel from \"./IrisGridProxyModel.js\";\n/**\n * Factory to create an IrisGridDataModel based on a table or tree table, whatever is passed in.\n */\nclass IrisGridModelFactory {\n /**\n * @param table The Table or TreeTable object to create the model with\n * @param formatter The formatter to use\n * @returns An IrisGridModel that uses the table provided\n */\n static makeModel(dh, table) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n var formatter = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : new Formatter(dh);\n var inputTable = null;\n if (!TableUtils.isTreeTable(table) && !TableUtils.isPartitionedTable(table) && table.hasInputTable) {\n inputTable = yield table.inputTable();\n }\n return new IrisGridProxyModel(dh, table, formatter, inputTable);\n })();\n }\n}\nexport default IrisGridModelFactory;\n//# sourceMappingURL=IrisGridModelFactory.js.map","import { createContext } from 'react';\nexport var ConnectionContext = /*#__PURE__*/createContext(null);\nexport default ConnectionContext;\n//# sourceMappingURL=ConnectionContext.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { ConnectionContext } from \"./ConnectionContext.js\";\n/**\n * Retrieve the connection for the current context.\n *\n * @returns Connection for the current context\n */\nexport function useConnection() {\n return useContextOrThrow(ConnectionContext, 'No IdeConnection available in useConnection. Was code wrapped in ConnectionContext.Provider?');\n}\nexport default useConnection;\n//# sourceMappingURL=useConnection.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { UserContext } from '@deephaven/auth-plugins';\nexport function useUser() {\n return useContextOrThrow(UserContext, 'No user available in useUser. Was code wrapped in UserBootstrap or UserContext.Provider?');\n}\nexport default useUser;\n//# sourceMappingURL=useUser.js.map"],"file":"assets/useUser-411aa0b5.js"}