@visactor/vtable 0.16.3 → 0.16.4-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/BaseTable.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0EAA4D;AAC5D,4EAA8D;AAC9D,mCAAsC;AACtC,sDAAwC;AACxC,0CAkCqB;AAErB,4CAA4D;AAE5D,yDAAsD;AACtD,wDAAqD;AACrD,sDAAmD;AACnD,kDAA+C;AAC/C,wCAAqC;AAErC,wCAA0C;AAC1C,uDAA+B;AAC/B,sCAAmC;AACnC,yDAAsD;AACtD,0CAA8C;AAC9C,0CAA8C;AAC9C,4DAAwD;AACxD,kEAA8D;AAE9D,yEAAsE;AAEtE,6CAAwG;AACxG,mEAA+D;AAC/D,2DAAuD;AASvD,4CAA6C;AAC7C,+CAWuB;AACvB,oEAAiE;AAEjE,6CAA0C;AAC1C,sDAAyD;AACzD,sEAAkE;AAClE,iDAA6C;AAG7C,iGAAmG;AACnG,4EAA8F;AAC9F,MAAM,EAAE,UAAU,EAAE,GAAG,cAAS,CAAC;AACjC,MAAM,EAAE,YAAY,EAAE,GAAG,cAAK,CAAC;AAC/B,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AACpC,IAAA,mBAAW,GAAE,CAAC;AAEd,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAsB,SAAU,SAAQ,yBAAW;IA6BjD,MAAM,KAAK,UAAU;QACnB,OAAO,mCAAgB,CAAC;IAC1B,CAAC;IAwBD,YAAY,SAAsB,EAAE,UAAuC,EAAE;;QAC3E,KAAK,EAAE,CAAC;QAtDV,mBAAc,GAAG,IAAI,CAAC;QACtB,aAAQ,GAAG,IAAI,CAAC;QAkChB,YAAO,GAAG,QAAQ,CAAC;QAWnB,OAAE,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAK3B,eAAU,GAAY,KAAK,CAAC;QAmN5B,uBAAkB,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QA/M1D,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;SACpD;QACD,MAAM,EAGJ,cAAc,GAAG,CAAC,EAElB,gBAAgB,GAAG,EAAE,EACrB,sBAAsB,EACtB,eAAe,GAAG,EAAE,EACpB,qBAAqB,EACrB,SAAS,GAAG,UAAU,EACtB,UAAU,GAAG,UAAU,EACvB,aAAa,GAAG,KAAK,EACrB,cAAc,GAAG,KAAK,EACtB,eAAe,EAEf,gBAAgB,EAChB,cAAc,EAGd,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,KAAK,EACL,IAAI,EACJ,MAAM,EAAE,KAAK,EACb,YAAY,EACZ,UAAU,GAAG,+BAAiB,EAC9B,gBAAgB,EAChB,0BAA0B,EAE1B,IAAI,EACJ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACd,GAAG,OAAO,CAAC;QACZ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,OAAO,EAAE;YACX,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;aAC9B;iBAAM;gBACL,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzD,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnD,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;aACvD;SACF;QAED,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,EAAyB,CAAC,CAAC;QAIvE,cAAc,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC;QACvE,IAAI,OAAO,mBAAmB,KAAK,QAAQ,IAAI,mBAAmB,IAAI,CAAC,EAAE;YACvE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;SAC7B;QAID,IAAI,SAAG,CAAC,IAAI,KAAK,MAAM,EAAE;YACvB,aAAa,CAAC,OAAO,GAAG,IAAA,+BAAiB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxD,aAAa,CAAC,YAAY,GAAG,IAAI,uBAAU,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;YACzE,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxD,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACxD,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;SAChE;QAED,aAAa,CAAC,OAAO,GAAG,IAAI,2BAAY,EAAE,CAAC;QAC3C,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;QACtC,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC;QAE9C,aAAa,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAClD,aAAa,CAAC,sBAAsB,GAAG,sBAAsB,aAAtB,sBAAsB,cAAtB,sBAAsB,GAAI,gBAAgB,CAAC;QAElF,aAAa,CAAC,eAAe,GAAG,eAAe,CAAC;QAChD,aAAa,CAAC,qBAAqB,GAAG,qBAAqB,aAArB,qBAAqB,cAArB,qBAAqB,GAAI,eAAe,CAAC;QAE/E,aAAa,CAAC,eAAe,GAAG,eAAe,CAAC;QAEhD,aAAa,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAClD,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC;QAC9C,aAAa,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAClD,IAAA,8CAAwB,EAAC,0BAA0B,CAAC,CAAC;QACrD,aAAa,CAAC,kBAAkB,GAAG,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,MAAM,CAAC;QAChE,aAAa,CAAC,cAAc,GAAG,IAAI,qBAAS,EAAE,CAAC;QAC/C,aAAa,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC9C,aAAa,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7C,aAAa,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAE,CAAC;QAE9C,IAAI,CAAC,YAAY,GAAG,IAAI,qBAAS,EAAE,CAAC;QACpC,IAAI,CAAC,mBAAmB,GAAG,IAAI,qBAAS,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAEzB,aAAa,CAAC,gBAAgB,GAAG;YAC/B,CAAC,EAAE,aAAa;YAChB,IAAI,IAAI;;gBACN,IAAI,SAAG,CAAC,IAAI,KAAK,MAAM,EAAE;oBACvB,OAAO,WAAW,GAAG,CAAC,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,CAAC,CAAC,CAAC;iBACxC;gBACD,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAC,IAAI,CAAC,CAAC,CAAC,OAAe,CAAC,UAAU,mCAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC/F,CAAC;SAIF,CAAC;QAEF,aAAa,CAAC,iBAAiB,GAAG,EAAE,CAAC;QACrC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;QACnC,aAAa,CAAC,KAAK,GAAG,gBAAM,CAAC,EAAE,CAAC,MAAA,OAAO,CAAC,KAAK,mCAAI,gBAAM,CAAC,OAAO,CAAC,CAAC;QAEjE,IAAI,SAAS,EAAE;YAEb,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;YACzB,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;aAAM;YACL,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,aAAa,CAAC,KAAK,GAAG,gBAAM,CAAC,EAAE,CAAC,MAAA,OAAO,CAAC,KAAK,mCAAI,gBAAM,CAAC,OAAO,CAAC,CAAC;QACjE,aAAa,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,CAAC;QAChD,aAAa,CAAC,YAAY,GAAG,IAAI,4BAAY,CAAC,IAAI,CAAC,CAAC;QAEpD,aAAa,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAElD,aAAa,CAAC,mBAAmB,GAAG,MAAA,OAAO,CAAC,mBAAmB,mCAAI,aAAa,CAAC,QAAQ,CAAC;QAC1F,aAAa,CAAC,iBAAiB,GAAG,MAAA,OAAO,CAAC,iBAAiB,mCAAI,GAAG,CAAC;QACnE,aAAa,CAAC,aAAa;YACzB,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,SAAS;gBACnD,CAAC,CAAC,OAAO,aAAa,KAAK,QAAQ;oBACjC,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,aAAa;wBACf,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,EAAE,CAAC;QAET,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,IAAI,oBAAY,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,oBAAY,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,aAAa,CAAC,OAAO,GAAG,IAAA,4BAAY,EAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC;gBACvC,CAAC,EAAE,IAAI,CAAC,MAAM;gBACd,CAAC,EAAE,IAAI,CAAC,MAAM;aACf,CAAC,CAAC;SACJ;QAGD,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CACnC;YACE,UAAU,EAAE,MAAM;YAClB,yBAAyB,EAAE,KAAK;YAChC,OAAO,EAAE,IAAI;SACd,EACD,OAAO,CAAC,OAAO,CAChB,CAAC;QACF,IAAI,aAAa,CAAC,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE;YAC/C,aAAa,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACxF;QACD,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAChC;YACE,UAAU,EAAE,MAAM;SACnB,EACD,OAAO,CAAC,IAAI,CACb,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,MAAA,OAAO,CAAC,IAAI,0CAAE,qBAAqB,CAAC;YAChD,IAAI,CAAC,wBAAwB,CAAC,MAAA,OAAO,CAAC,IAAI,0CAAE,qBAAqB,CAAC,CAAC;QAGrE,KAAK,CAAC,OAAO,CAAC,MAAA,OAAO,CAAC,IAAI,0CAAE,sBAAsB,CAAC;YACjD,CAAC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAElE,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;YAC5C,aAAa,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,CAAC;SACnD;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAEhC,aAAa,CAAC,KAAK,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QAE3C,aAAa,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAC1D,CAAC;IAOD,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAID,UAAU;QACR,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IACpC,CAAC;IAID,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnC,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SACrC;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SACnC;QAED,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;IAKD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IACrC,CAAC;IAID,IAAI,QAAQ,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzC,CAAC;IAID,IAAI,QAAQ;;QACV,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,mCAAI,CAAC,CAAC;IAC1C,CAAC;IAID,IAAI,QAAQ,CAAC,QAAgB;QAC3B,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzC,CAAC;IAID,IAAI,cAAc;;QAChB,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,cAAc,mCAAI,IAAI,CAAC,aAAa,CAAC,cAAc,mCAAI,CAAC,CAAC;IAChG,CAAC;IAID,IAAI,cAAc,CAAC,cAAsB;QAEvC,IAAI,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,cAAc,GAAG,CAAC,CAAC;SACpB;QAED,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;QAE7C,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE;YAC5E,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACpE,CAAC;IAED,iBAAiB,CAAC,cAAsB;QACtC,IAAI,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,cAAc,GAAG,CAAC,CAAC;SACpB;QAED,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;QAE7C,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE;YAC5E,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACpE,CAAC;IAKD,kBAAkB,CAAC,cAAsB;QAEvC,IAAI,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,cAAc,GAAG,CAAC,CAAC;SACpB;QACD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC;IACrD,CAAC;IAID,oBAAoB;QAClB,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YAC/B,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE;gBACzF,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;aAC5B;iBAAM,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC9D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;aACtD;SACF;IACH,CAAC;IAID,IAAI,cAAc;;QAChB,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,cAAc,mCAAI,IAAI,CAAC,aAAa,CAAC,cAAc,mCAAI,CAAC,CAAC;IAChG,CAAC;IAID,IAAI,cAAc,CAAC,cAAsB;QACvC,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC;IAErD,CAAC;IAED,IAAI,mBAAmB;;QACrB,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,mBAAmB,mCAAI,IAAI,CAAC,aAAa,CAAC,mBAAmB,mCAAI,CAAC,CAAC;IAC1G,CAAC;IAED,IAAI,mBAAmB,CAAC,mBAA2B;QACjD,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,oBAAoB;;QACtB,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,oBAAoB,mCAAI,IAAI,CAAC,aAAa,CAAC,oBAAoB,mCAAI,CAAC,CAAC;IAC5G,CAAC;IAED,IAAI,oBAAoB,CAAC,oBAA4B;QACnD,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;IAC9D,CAAC;IAMD,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;IAC7C,CAAC;IAID,IAAI,gBAAgB,CAAC,gBAAwB;QAC3C,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IACnD,CAAC;IAKD,IAAI,sBAAsB;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC;IACnD,CAAC;IAID,IAAI,sBAAsB,CAAC,sBAA+D;QACxF,IAAI,CAAC,aAAa,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IAC/D,CAAC;IAID,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;IAC5C,CAAC;IAID,IAAI,eAAe,CAAC,eAAuB;QACzC,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,eAAe,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;IACjD,CAAC;IAID,IAAI,qBAAqB;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC;IAClD,CAAC;IAID,IAAI,qBAAqB,CAAC,qBAA8D;QACtF,IAAI,CAAC,aAAa,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IAC7D,CAAC;IAID,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;IAC1C,CAAC;IAID,IAAI,YAAY,CAAC,YAAwC;QACvD,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,YAAY,CAAC;IAClD,CAAC;IAID,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC;IACjD,CAAC;IAID,IAAI,mBAAmB,CAAC,mBAA+C;QACrE,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;IAChE,CAAC;IAID,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC;IAC/C,CAAC;IAID,IAAI,kBAAkB,CAAC,kBAAuC;QAC5D,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC7D,CAAC;IAID,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC;IAChD,CAAC;IAID,IAAI,mBAAmB,CAAC,mBAAwC;QAC9D,IAAI,CAAC,aAAa,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IAC/D,CAAC;IAID,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;IAC3C,CAAC;IAID,IAAI,aAAa,CAAC,aAAgC;QAChD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,aAAa,CAAC;IACpD,CAAC;IAID,IAAI,cAAc;QAOhB,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;IAC5C,CAAC;IAID,IAAI,cAAc,CAAC,cAMlB;QACC,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,cAAc,CAAC;IACtD,CAAC;IACD,IAAI,eAAe;;QACjB,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,eAAe,mCAAI,IAAI,CAAC;IACpD,CAAC;IACD,IAAI,eAAe,CAAC,eAA4C;QAC9D,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,SAAS,CAAC;IACpE,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,IAAI,SAAS,CAAC,SAAuB;QACnC,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE;YACjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;SACpC;IACH,CAAC;IACD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,IAAI,UAAU,CAAC,UAAyB;QACtC,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE;YACnC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;SACtC;IACH,CAAC;IACD,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IACD,IAAI,aAAa,CAAC,aAAsB;QACtC,IAAI,aAAa,KAAK,IAAI,CAAC,cAAc,EAAE;YACzC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;SACrC;IACH,CAAC;IACD,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IACD,IAAI,cAAc,CAAC,cAAuB;QACxC,IAAI,cAAc,KAAK,IAAI,CAAC,eAAe,EAAE;YAC3C,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;SACvC;IACH,CAAC;IAMD,wBAAwB,CAAC,KAAsB;QAC7C,IAAI,KAAK,KAAK,MAAM,EAAE;YAEpB,OAAO,CAAC,CAAC;SACV;QACD,OAAO,IAAA,wBAAU,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAQO,kBAAkB,CAAC,GAAW;QAMpC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAKR,EAAE,CAAC;QAEP,IAAI,KAAK,CAAC,GAAG,EAAE;YACb,MAAM,CAAC,GAAG,GAAG,IAAA,wBAAU,EAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;SAC3B;QACD,IAAI,KAAK,CAAC,GAAG,EAAE;YACb,MAAM,CAAC,GAAG,GAAG,IAAA,wBAAU,EAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;SAC3B;QACD,OAAO,MAAe,CAAC;IACzB,CAAC;IAED,eAAe,CAAC,GAAW,EAAE,QAAgB;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAA,kCAAoB,EAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAMD,aAAa,CAAC,UAAkB;QAC9B,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAKD,WAAW;;QAET,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEzB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,IAAI,SAAG,CAAC,IAAI,KAAK,SAAS,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAElC,MAAM,MAAM,GAAG,MAAA,MAAA,OAAO,CAAC,aAAa,0CAAE,WAAW,mCAAI,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAA,MAAA,OAAO,CAAC,aAAa,0CAAE,YAAY,mCAAI,CAAC,GAAG,CAAC,CAAC;YAE7D,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC;YACxF,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC;YAE3F,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YACtC,MAAM,GAAG,MAAA,MAAA,MAAM,CAAC,aAAa,0CAAE,WAAW,mCAAI,CAAC,GAAG,CAAC,CAAC;YACpD,OAAO,GAAG,MAAA,MAAA,MAAM,CAAC,aAAa,0CAAE,YAAY,mCAAI,CAAC,GAAG,CAAC,CAAC;YAGtD,IAAI,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,0CAAE,KAAK,EAAE;gBAC3B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;aAC/C;iBAAM;gBACL,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACxB,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;gBACzB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;gBACtB,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;gBAExB,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC;gBACnC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC;aACtC;SACF;aAAM,IAAI,SAAG,CAAC,IAAI,KAAK,MAAM,EAAE;YAC9B,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YAC9B,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;SACjC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QAEzF,IAAI,MAAA,IAAI,CAAC,aAAa,CAAC,KAAK,0CAAE,UAAU,EAAE;YAExC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAA,MAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,0CAAE,eAAe,mCAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9F,MAAM,YAAY,GAAG,UAAU,CAAC,MAAA,MAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,0CAAE,UAAU,mCAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,CAAC,MAAM,GAAG,CAAC,MAAA,UAAU,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,YAAY,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,GAAG,CAAC,MAAA,UAAU,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,YAAY,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,iBAAiB;gBACpB,KAAK,GAAG,CAAC,CAAC,MAAA,UAAU,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,YAAY,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAA,UAAU,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,YAAY,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC,CAAC;YAC5G,IAAI,CAAC,kBAAkB;gBACrB,MAAM,GAAG,CAAC,CAAC,MAAA,UAAU,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,YAAY,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAA,UAAU,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,YAAY,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC,CAAC;SAC9G;IACH,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAgBD,YAAY,CAAC,QAAgB,EAAE,MAAc;QAC3C,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAE7C,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;QAC7E,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAS,EAAE;YAC3D,OAAO,cAAc,CAAC;SACvB;QAGD,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;QACtF,IAAI,mBAAmB,KAAK,IAAI,IAAI,mBAAmB,KAAK,SAAS,EAAE;YAUrE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAEzC,MAAM,QAAQ,GAAG,mBAAmB,GAAG,OAAO,CAAC;YAE/C,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBAC3D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC7E;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAC7B;QAED,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE;YAC7C,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SAC5B;QAoBD,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;YAChC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACtE;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAMD,YAAY,CAAC,GAAW;QAStB,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACpC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,IAAA,iBAAQ,EAAC,aAAa,CAAC,EAAE;YAC3B,OAAO,aAAa,CAAC;SACtB;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,mBAAmB,CAAC,GAAW;;QAC7B,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;YAC9D,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;gBAC/C,CAAC,CAAC,MAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,mCAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB;gBACzE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;SACjC;QACD,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE;YACzD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC;gBAC/C,CAAC,CAAC,MAAA,IAAI,CAAC,sBAAsB,CACzB,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAC9F,mCAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB;gBAC1C,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;SACjC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;IAC7C,CAAC;IAMD,aAAa,CAAC,GAAW,EAAE,MAAc,EAAE,UAAoB;QAC7D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAEhD,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;SACpC;IACH,CAAC;IAOD,aAAa,CAAC,QAAgB,EAAE,MAAc;;QAE5C,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;QAC/E,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,SAAS,EAAE;YAC7D,OAAO,eAAe,CAAC;SACxB;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;QACxF,IAAI,oBAAoB,KAAK,IAAI,IAAI,oBAAoB,KAAK,SAAS,EAAE;YACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,oBAAoB;gBAClB,CAAC,MAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,mCAC7B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC;oBAC/D,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,IAAA,iBAAQ,EAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;wBAC3F,CAAC,CAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAY;wBACjD,CAAC,CAAC,IAAA,iBAAQ,EAAC,IAAI,CAAC,sBAAsB,CAAC;4BACvC,CAAC,CAAE,IAAI,CAAC,sBAAiC;4BACzC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB;oBACvC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAC9C,CAAC;YACF,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;gBAChC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;aAC5E;YACD,OAAO,MAAM,CAAC;SACf;QAED,IAAI,CAAC,GAAG,CAAC,CAAC;QAWV,IACE,IAAI,CAAC,UAAU,KAAK,UAAU;YAC9B,CAAC,IAAI,CAAC,cAAc;YACpB,IAAI,CAAC,aAAa,CAAC,SAAS;YAC5B,MAAM,IAAI,IAAI,CAAC,sBAAsB;YACrC,CAAC,IAAI,CAAC,oBAAoB;YAC1B,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAC1B;YACA,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE;gBAE3D,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aAC3B;YAED,CAAC,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;SAC7F;aAAM;YACL,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aAC3B;SACF;QACD,IAAI,QAAQ,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACzC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACvE;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAOD,kBAAkB,CAAC,GAAW;;QAC5B,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAEzC,IAAI,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;YAClC,OAAO,MAAM,CAAC;SACf;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,qBAAqB,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC;QAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,CAAC,EAAE;YAE3C,OAAO,CAAC,CAAC;SACV;aAAM,IAAI,KAAK,EAAE;YAChB,OAAO,KAAK,CAAC;SACd;aAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;YAClE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC;gBAC9C,CAAC,CAAC,MAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,mCAAI,IAAI,CAAC,eAAe;gBACzD,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;SAChC;aAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,sBAAsB,CAAC,EAAE;YACrE,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACvB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC;oBAC9C,CAAC,CAAC,MAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,mCAAI,IAAI,CAAC,eAAe;oBACzG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;aAChC;YACD,OAAO,IAAI,CAAC,eAAe,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAQD,wBAAwB,CAAC,GAAW;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;IAgCD,WAAW,CAAC,GAAW;;QAErB,MAAM,KAAK,GACT,MAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,mCAC1B,CAAC,GAAG,GAAG,IAAI,CAAC,mBAAmB;YAC7B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC;gBACzC,CAAC,CAAC,MAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,mCAAI,IAAI,CAAC,eAAe;gBACzD,CAAC,CAAC,IAAI,CAAC,qBAAqB;YAC9B,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,IACE,CAAC,IAAI,CAAC,SAAS,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;YAC5D,CAAE,IAAY,CAAC,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EACtD;YAGA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;SAC7C;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;IAMD,YAAY,CAAC,GAAW,EAAE,KAAsB,EAAE,UAAoB,EAAE,eAAyB;QAC/F,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAElF,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;SACnC;QAGD,IAAI,CAAC,eAAe,EAAE;YACpB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACjC;IACH,CAAC;IAMD,uBAAuB,CAAC,GAAY;QAClC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;SACjC;aAAM;YACL,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;YAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACtB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,GAAG,EAAE;oBACP,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;wBAC9B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;qBACrC;iBACF;aACF;SACF;IACH,CAAC;IAKD,wBAAwB,CAAC,GAAY;QACnC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;SAClC;aAAM;YACL,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;YAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACtB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,GAAG,EAAE;oBACP,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;wBAC9B,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;qBACtC;iBACF;aACF;SACF;IACH,CAAC;IAMD,mBAAmB,CAAC,GAAW;QAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,mBAAmB,CAAC,GAAW,EAAE,KAAsB;QACrD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAKD,gBAAgB;QACd,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,CAAC,EAAE;YACpC,OAAO,CAAC,CAAC;SACV;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;IAKD,eAAe;QACb,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,CAAC,EAAE;YACpC,OAAO,CAAC,CAAC;SACV;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC;IACX,CAAC;IAOD,cAAc,CAAC,GAAW;;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,GAAG,GAAG,MAAA,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,mCAAI,QAAQ,CAAC;QACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,GAAG,GAAG,IAAA,wBAAU,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAC7B;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAOD,cAAc,CAAC,GAAW,EAAE,QAAyB;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC;IACrB,CAAC;IAMD,cAAc,CAAC,GAAW;;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,GAAG,GAAG,MAAA,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,mCAAI,CAAC,CAAC;QAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,GAAG,GAAG,IAAA,wBAAU,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAC7B;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAOD,cAAc,CAAC,GAAW,EAAE,QAAyB;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC;IACrB,CAAC;IAOD,WAAW,CAAC,GAAW,EAAE,GAAW;;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEjD,IAAI,YAAY,CAAC;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,EAAE;YACpC,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBACtC,YAAY,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,MAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC;aAC1F;iBAAM;gBACL,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBAClD,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC;aACjC;SACF;aAAM;YACL,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;SACnD;QAED,IAAI,WAAW,CAAC;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,EAAE;YACpC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBACpC,YAAY,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,MAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC;aAC5F;iBAAM;gBACL,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC7C,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC;aAC/B;SACF;aAAM;YACL,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;SAC9C;QACD,OAAO,IAAI,WAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5G,CAAC;IAOD,gBAAgB,CAAC,GAAW,EAAE,GAAW;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxE,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1E,OAAO,IAAI,WAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5G,CAAC;IAOD,mBAAmB,CAAC,GAAW,EAAE,GAAW;QAC1C,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAMD,wBAAwB,CAAC,KAA8B;QACrD,IAAgB,KAAM,CAAC,KAAK,EAAE;YAC5B,OAAO,IAAI,CAAC,eAAe,CACzB,IAAI,CAAC,YAAY,CACH,KAAM,CAAC,KAAK,CAAC,GAAG,EAChB,KAAM,CAAC,KAAK,CAAC,GAAG,EAChB,KAAM,CAAC,GAAG,CAAC,GAAG,EACd,KAAM,CAAC,GAAG,CAAC,GAAG,CAC3B,CACF,CAAC;SACH;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAe,KAAM,CAAC,GAAG,EAAgB,KAAM,CAAC,GAAG,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC,eAAe,CACzB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAClG,CAAC;IACJ,CAAC;IAMD,+BAA+B,CAAC,KAA8B;QAC5D,IAAI,SAAoB,CAAC;QACzB,IAAgB,KAAM,CAAC,KAAK,EAAE;YAC5B,SAAS,GAAc,KAAK,CAAC;SAC9B;aAAM;YACL,SAAS,GAAG,IAAI,CAAC,YAAY,CAAe,KAAM,CAAC,GAAG,EAAgB,KAAM,CAAC,GAAG,CAAC,CAAC;SACnF;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IAChF,CAAC;IAMD,gBAAgB,CAAC,eAAqB,EAAE,SAAoB;QAC1D,MAAM,UAAU,GACd,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc;YACxC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9G,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QAEzB,MAAM,SAAS,GACb,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc;YACxC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9G,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/E,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IASD,YAAY,CAAC,QAAgB,EAAE,QAAgB,EAAE,MAAc,EAAE,MAAc;QAC7E,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE1D,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,EAAE;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACnC,YAAY,IAAI,UAAU,CAAC;YAC3B,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;gBAC5C,KAAK,IAAI,UAAU,CAAC;gBACpB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;aAC/E;SACF;QACD,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,EAAE;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,WAAW,IAAI,SAAS,CAAC;YACzB,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;gBAC5C,MAAM,IAAI,SAAS,CAAC;gBACpB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;aAClF;SACF;QACD,OAAO,IAAI,WAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5G,CAAC;IASD,iBAAiB,CAAC,QAAgB,EAAE,QAAgB,EAAE,MAAc,EAAE,MAAc;QAClF,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,EAAE;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACnC,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;gBAC5C,KAAK,IAAI,UAAU,CAAC;gBACpB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;aAC/E;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAMD,gBAAgB,CAAC,KAA8B;QAC7C,IAAgB,KAAM,CAAC,KAAK,EAAE;YAC5B,OAAO,IAAI,CAAC,YAAY,CACV,KAAM,CAAC,KAAK,CAAC,GAAG,EAChB,KAAM,CAAC,KAAK,CAAC,GAAG,EAChB,KAAM,CAAC,GAAG,CAAC,GAAG,EACd,KAAM,CAAC,GAAG,CAAC,GAAG,CAC3B,CAAC;SACH;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAe,KAAM,CAAC,GAAG,EAAgB,KAAM,CAAC,GAAG,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3G,CAAC;IAMD,qBAAqB,CAAC,KAA8B;QAClD,IAAgB,KAAM,CAAC,KAAK,EAAE;YAC5B,OAAO,IAAI,CAAC,iBAAiB,CACf,KAAM,CAAC,KAAK,CAAC,GAAG,EAChB,KAAM,CAAC,KAAK,CAAC,GAAG,EAChB,KAAM,CAAC,GAAG,CAAC,GAAG,EACd,KAAM,CAAC,GAAG,CAAC,GAAG,CAC3B,CAAC;SACH;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAe,KAAM,CAAC,GAAG,EAAgB,KAAM,CAAC,GAAG,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChH,CAAC;IAED,YAAY,CACV,GAAW,EACX,GAAW;QAKX,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC9E,IAAI,WAAW,IAAI,WAAW,EAAE;YAC9B,OAAO;gBACL,GAAG,EAAE,WAAW;gBAChB,GAAG,EAAE,WAAW;aACjB,CAAC;SACH;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,QAAQ,CAAC,SAAiB;QACxB,MAAM,MAAM,GAAG,IAAA,mCAAqB,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC;SACf;QACD,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG;gBACJ,GAAG,EAAE,CAAC,CAAC;gBACP,GAAG,EAAE,CAAC,CAAC;gBACP,MAAM,EAAE,CAAC,CAAC;gBACV,MAAM,EAAE,CAAC,CAAC;aACX,CAAC;SACH;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAMD,QAAQ,CAAC,SAAiB;QACxB,MAAM,MAAM,GAAG,IAAA,mCAAqB,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC;SACf;QACD,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG;gBACJ,IAAI,EAAE,CAAC,CAAC;gBACR,GAAG,EAAE,CAAC,CAAC;gBACP,KAAK,EAAE,CAAC,CAAC;gBACT,KAAK,EAAE,CAAC;aACT,CAAC;SACH;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAOD,SAAS,CAAC,SAAiB,EAAE,SAAiB;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAC5C,MAAM,IAAI,GAAG;YACX,IAAI;YACJ,KAAK;YACL,GAAG;YACH,MAAM;YACN,KAAK;YACL,MAAM;SACP,CAAC;QACF,OAAO;YACL,GAAG;YACH,GAAG;YACH,IAAI;SACL,CAAC;IACJ,CAAC;IAOD,YAAY,CAAC,GAAW,EAAE,GAAW;QACnC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;YACtE,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAOD,gBAAgB,CAAC,GAAW,EAAE,GAAW;QACvC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACjD,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE;gBACxD,OAAO;aACR;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,IAAA,uCAAyB,EAAC,IAAI,CAAC,CAAC;YACpD,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAC9B,OAAO;aACR;YACD,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;gBACtC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;iBAGnF;qBAAM,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE;oBACvC,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;iBACjD;qBAAM,IAAI,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;oBACzC,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;iBACnD;aACF;YACD,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;gBACtC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;iBAEtF;qBAAM,IAAI,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;oBACrC,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;iBAC9C;qBAAM,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;oBAC3C,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;iBACpD;aACF;SACF;IACH,CAAC;IAKD,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;IACrC,CAAC;IAID,WAAW;QACT,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;QAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;IACL,CAAC;IAMD,eAAe,CAAC,YAAkB;QAChC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,cAAc;QACZ,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACvC,OAAO,IAAI,WAAI,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAKD,IAAI,eAAe;QACjB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,UAAU,GACd,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;QAErG,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,CAAC,CAAC;SACV;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;QACrG,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;YACpC,IAAI,WAAW,CAAC,MAAM,GAAG,MAAM,EAAE;gBAC/B,MAAM;aACP;YACD,KAAK,EAAE,CAAC;YACR,WAAW,GAAG,MAAM,CAAC;SACtB;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uBAAuB;QACrB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClD,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAChE,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE5D,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAC1E,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC;QAC1E,MAAM,MAAM,GACV,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,kBAAkB;YAC/C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,sBAAsB,CAAC,CAAC,GAAG;YACrF,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACxB,MAAM,MAAM,GACV,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,iBAAiB;YAC7C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC,GAAG;YACnF,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACxB,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC;SACb;QACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAChD,CAAC;IAED,sBAAsB;QACpB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACpD,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEhE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAC1E,MAAM,MAAM,GACV,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,kBAAkB;YAC/C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,sBAAsB,CAAC,CAAC,GAAG;YACrF,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACxB,IAAI,MAAM,GAAG,CAAC,EAAE;YACd,OAAO,IAAI,CAAC;SACb;QACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,sBAAsB;QACpB,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClD,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE5D,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC;QAE1E,MAAM,MAAM,GACV,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,iBAAiB;YAC7C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC,GAAG;YACnF,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACxB,IAAI,MAAM,GAAG,CAAC,EAAE;YACd,OAAO,IAAI,CAAC;SACb;QACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAKD,IAAI,eAAe;QACjB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,WAAW,GACf,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;QAEtG,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,CAAC,CAAC;SACV;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;QACvG,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,YAAY,GAAG,KAAK,CAAC;YACnC,IAAI,WAAW,CAAC,KAAK,GAAG,KAAK,EAAE;gBAC7B,MAAM;aACP;YACD,KAAK,EAAE,CAAC;YACR,YAAY,GAAG,KAAK,CAAC;SACtB;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC;IACjD,CAAC;IACD,IAAI,SAAS,CAAC,SAAiB;QAC7B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACnD,CAAC;IACD,IAAI,UAAU,CAAC,UAAkB;QAC/B,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,aAAa,CAAC,GAAW;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,YAAY,CAAC,GAAW;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAQD,mBAAmB,CAAC,GAAW,EAAE,GAAW;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAKD,aAAa,CAAC,UAAmC;QAC/C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,UAAU,EAAE;YAClF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;SACpC;QACD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAC5F,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IACO,OAAO;QACb,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAKD,OAAO;;QACL,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,MAAA,MAAA,aAAa,CAAC,cAAc,0CAAE,OAAO,kDAAI,CAAC;QAC1C,MAAA,MAAA,aAAa,CAAC,WAAW,0CAAE,OAAO,kDAAI,CAAC;QACvC,iBAAS,CAAC,QAAQ,EAAE,CAAC;QAErB,MAAA,KAAK,CAAC,OAAO,oDAAI,CAAC;QAClB,MAAA,MAAA,aAAa,CAAC,OAAO,0CAAE,OAAO,kDAAI,CAAC;QAEnC,MAAA,MAAA,aAAa,CAAC,YAAY,0CAAE,OAAO,kDAAI,CAAC;QACxC,MAAA,aAAa,CAAC,OAAO,0CAAE,OAAO,EAAE,CAAC;QACjC,MAAA,aAAa,CAAC,KAAK,0CAAE,OAAO,EAAE,CAAC;QAC/B,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,aAAa,CAAC,WAAW,EAAE;YAC7B,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,WAAC,OAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,0DAAI,CAAA,EAAA,CAAC,CAAC;YACzE,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;SAClC;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhC,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC;QAChD,IAAI,aAAa,EAAE;YACjB,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SAClD;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,aAAa,CACX,IAAU,EACV,KAA+C;QAE/C,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAMD,YAAY,CAAC,OAAoC;;QAC9C,IAAI,CAAC,OAAgC,GAAG,OAAO,CAAC;QACjD,MAAM,EAGJ,cAAc,GAAG,CAAC,EAElB,gBAAgB,GAAG,EAAE,EACrB,sBAAsB,EACtB,eAAe,GAAG,EAAE,EACpB,qBAAqB,GAAG,EAAE,EAC1B,eAAe,EAEf,gBAAgB,EAChB,cAAc,EAEd,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,KAAK,EACL,IAAI,EACJ,MAAM,EAAE,KAAK,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,0BAA0B,EAC1B,kBAAkB,EAClB,aAAa,EACd,GAAG,OAAO,CAAC;QACZ,IAAI,UAAU,IAAI,UAAU,KAAK,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;YAC9D,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;SAC5C;QAED,IAAI,OAAO,EAAE;YACX,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;aAC9B;iBAAM;gBACL,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzD,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnD,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;aACvD;SACF;QAWD,IAAI,CAAC,cAAc,GAAG,OAAO,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAClF,IAAI,OAAO,mBAAmB,KAAK,QAAQ,IAAI,mBAAmB,IAAI,CAAC,EAAE;YACvE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;SAC7B;QAED,IAAI,CAAC,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,UAAU,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,UAAU,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,KAAK,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,KAAK,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,MAAM,aAAa,GAAwB,IAAI,CAAC,aAAa,CAAC;QAC9D,IAAI,SAAG,CAAC,IAAI,KAAK,MAAM,EAAE;YACvB,IAAA,sCAAwB,EAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SAC/D;QAGD,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC;QAE9C,aAAa,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAClD,aAAa,CAAC,sBAAsB,GAAG,sBAAsB,aAAtB,sBAAsB,cAAtB,sBAAsB,GAAI,gBAAgB,CAAC;QAClF,aAAa,CAAC,eAAe,GAAG,eAAe,CAAC;QAChD,aAAa,CAAC,qBAAqB,GAAG,qBAAqB,aAArB,qBAAqB,cAArB,qBAAqB,GAAI,eAAe,CAAC;QAC/E,aAAa,CAAC,eAAe,GAAG,eAAe,CAAC;QAEhD,aAAa,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAClD,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC;QAC9C,aAAa,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAClD,IAAA,8CAAwB,EAAC,0BAA0B,CAAC,CAAC;QACrD,aAAa,CAAC,kBAAkB,GAAG,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,MAAM,CAAC;QAChE,aAAa,CAAC,iBAAiB,GAAG,EAAE,CAAC;QACrC,aAAa,CAAC,cAAc,GAAG,IAAI,qBAAS,EAAE,CAAC;QAC/C,aAAa,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC9C,aAAa,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;QAE7C,aAAa,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAE,CAAC;QAE9C,IAAI,CAAC,YAAY,GAAG,IAAI,qBAAS,EAAE,CAAC;QACpC,IAAI,CAAC,mBAAmB,GAAG,IAAI,qBAAS,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAEzB,aAAa,CAAC,KAAK,GAAG,gBAAM,CAAC,EAAE,CAAC,MAAA,OAAO,CAAC,KAAK,mCAAI,gBAAM,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;QAKxC,aAAa,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAClD,aAAa,CAAC,mBAAmB,GAAG,MAAA,OAAO,CAAC,mBAAmB,mCAAI,aAAa,CAAC,QAAQ,CAAC;QAC1F,aAAa,CAAC,iBAAiB,GAAG,MAAA,OAAO,CAAC,iBAAiB,mCAAI,GAAG,CAAC;QACnE,aAAa,CAAC,aAAa;YACzB,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,SAAS;gBACnD,CAAC,CAAC,OAAO,aAAa,KAAK,QAAQ;oBACjC,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,aAAa;wBACf,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,EAAE,CAAC;QAET,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAO,EAAE,CAAC;QAC/B,MAAA,aAAa,CAAC,OAAO,0CAAE,OAAO,EAAE,CAAC;QACjC,MAAA,aAAa,CAAC,KAAK,0CAAE,OAAO,EAAE,CAAC;QAC/B,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;QAEzC,IAAI,CAAC,WAAW,EAAE,CAAC;QAGnB,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,aAAa,CAAC,OAAO,GAAG,IAAA,4BAAY,EAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC;gBACvC,CAAC,EAAE,IAAI,CAAC,MAAM;gBACd,CAAC,EAAE,IAAI,CAAC,MAAM;aACf,CAAC,CAAC;SACJ;QAQD,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CACnC;YACE,UAAU,EAAE,MAAM;YAClB,yBAAyB,EAAE,KAAK;YAChC,OAAO,EAAE,IAAI;SACd,EACD,OAAO,CAAC,OAAO,CAChB,CAAC;QACF,IAAI,aAAa,CAAC,OAAO,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;YAChF,aAAa,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACxF;QAED,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAChC;YACE,UAAU,EAAE,MAAM;SACnB,EACD,OAAO,CAAC,IAAI,CACb,CAAC;QACF,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAC1E,aAAa,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,CAAC;SACnD;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAID,uBAAuB;QACrB,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC7G,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAKD,mBAAmB;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC;IAChB,CAAC;IAKD,kBAAkB;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,CAAC;IACX,CAAC;IAKD,yBAAyB;QACvB,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC,EAAE;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAChG,OAAO,MAAM,CAAC;SACf;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAKD,uBAAuB;QACrB,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC7F,OAAO,KAAK,CAAC;SACd;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAMD,YAAY;QAIV,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAG1E,OAAO,IAAI,WAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAKD,sBAAsB,CACpB,GAAwC,EACxC,WAAW,GAAG,IAAI;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC;QACnB,IAAI,CAAqB,CAAC;QAC1B,IAAI,CAAC,GAAG,EAAE;YACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;SACvD;QACD,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;YACrB,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;SAC3B;aAAM;YACL,CAAC,GAAG,GAAG,CAAC;SACT;QACD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;QACtD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;QACtD,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAChE,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE;YACzB,OAAO,GAAG,KAAK,CAAC;SACjB;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE;YAC1B,OAAO,GAAG,KAAK,CAAC;SACjB;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,YAAY,CAAC;QAC5D,MAAM,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC;QAE9C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,aAAa,CAAC;QAC/D,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;QAEjD,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,QAAQ;QACN,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAClC,CAAC;IAQD,cAAc,CAAC,SAAiB;QAC9B,IAAI,SAAS,KAAK,CAAC,EAAE;YACnB,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAChD;QACD,MAAM,UAAU,GAAG,CACjB,QAAgB,EAChB,UAAkB,EAMX,EAAE;YACT,IAAI,KAAK,GAAG,UAAU,CAAC;YACvB,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;gBAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC1F,OAAO;wBACL,IAAI;wBACJ,GAAG;wBACH,KAAK;wBACL,KAAK;qBACN,CAAC;iBACH;gBACD,KAAK,GAAG,IAAI,CAAC;aACd;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,CAChB,QAAgB,EAChB,UAAkB,EAMX,EAAE;YACT,IAAI,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YACxC,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE;gBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;gBAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC1F,OAAO;wBACL,IAAI;wBACJ,GAAG;wBACH,KAAK;wBACL,KAAK;qBACN,CAAC;iBACH;gBACD,IAAI,GAAG,KAAK,CAAC;aACd;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,SAAS,IAAI,KAAK,EAAE;YACtB,OAAO,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAClC;QACD,OAAO,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAOD,cAAc,CAAC,SAAiB;QAC9B,IAAI,SAAS,KAAK,CAAC,EAAE;YACnB,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;SACjD;QAED,MAAM,UAAU,GAAG,CACjB,QAAgB,EAChB,WAAmB,EAMZ,EAAE;YACT,IAAI,MAAM,GAAG,WAAW,CAAC;YACzB,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE;gBACxC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;gBAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBAC1F,OAAO;wBACL,GAAG;wBACH,GAAG;wBACH,MAAM;wBACN,MAAM;qBACP,CAAC;iBACH;gBACD,MAAM,GAAG,GAAG,CAAC;aACd;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,CAChB,QAAgB,EAChB,WAAmB,EAMZ,EAAE;YACT,IAAI,GAAG,GAAG,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YACxC,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE;gBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;gBAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBAC1F,OAAO;wBACL,GAAG;wBACH,GAAG;wBACH,MAAM;wBACN,MAAM;qBACP,CAAC;iBACH;gBACD,GAAG,GAAG,MAAM,CAAC;aACd;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAMF,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,SAAS,IAAI,MAAM,EAAE;YACvB,OAAO,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACnC;QACD,OAAO,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAOO,mBAAmB,CAAC,SAAiB;QAU3C,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE;YAC3D,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC/B,OAAO,MAAM,GAAG,QAAQ,GAAG,CAAC,EAAE;gBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnD,IAAI,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,MAAM,EAAE,CAAC,EAAE;oBAC5D,MAAM,GAAG,MAAM,CAAC;iBACjB;qBAAM,IAAI,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,MAAM,EAAE,CAAC,EAAE;oBACnE,QAAQ,GAAG,MAAM,CAAC;iBACnB;qBAAM;oBACL,OAAO,MAAM,CAAC;iBACf;aACF;YACD,OAAO,MAAM,CAAC;SAGf;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IACjG,CAAC;IAOO,mBAAmB,CAAC,SAAiB;QAE3C,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE;YAC1D,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC/B,OAAO,MAAM,GAAG,QAAQ,GAAG,CAAC,EAAE;gBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnD,IAAI,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,MAAM,EAAE,CAAC,EAAE;oBAC3D,MAAM,GAAG,MAAM,CAAC;iBACjB;qBAAM,IAAI,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,MAAM,EAAE,CAAC,EAAE;oBAClE,QAAQ,GAAG,MAAM,CAAC;iBACnB;qBAAM;oBACL,OAAO,MAAM,CAAC;iBACf;aACF;YACD,OAAO,MAAM,CAAC;SACf;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAChG,CAAC;IAID,aAAa;QACX,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAMD,UAAU,CAAC,GAAW,EAAE,GAAW;QACjC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IACrC,CAAC;IAKD,WAAW,CAAC,UAAuB;QACjC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACvC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAoB,EAAE,KAAa,EAAE,EAAE;YACzD,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC1F,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;aAChG;iBAAM;gBACL,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;gBAC/F,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,2BAAgB,CAAC,OAAO,CAAC,CAAC;gBACnE,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;aAC5F;YACD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,2BAAgB,CAAC,OAAO,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAmCD,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC;IAChD,CAAC;IAKD,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC;IAC1D,CAAC;IAID,IAAI,sBAAsB;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,sBAAsB,CAAC;IAC7D,CAAC;IAID,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IACpC,CAAC;IAID,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;IACvC,CAAC;IAID,IAAI,UAAU,CAAC,UAAyC;QAEtD,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC7B,IAAA,4BAAc,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAID,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;IACzC,CAAC;IAID,IAAI,YAAY,CAAC,YAAqB;QACpC,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,YAAY,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;IAC3C,CAAC;IACD,kBAAkB,CAAC,YAAqB;QACtC,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,YAAY,EAAE;YACpD,OAAO;SACR;QACD,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,YAAY,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;QAEzC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;IAEhB,CAAC;IAKD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,KAAiB;QACzB,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,gBAAM,CAAC,EAAE,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,gBAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IAC7B,CAAC;IAID,WAAW,CAAC,KAAwB;QAClC,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC7G,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,gBAAM,CAAC,EAAE,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,gBAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAOD,YAAY,CAAC,GAAW,EAAE,GAAW;QACnC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;IAC9D,CAAC;IAOD,mBAAmB,CAAC,GAAW,EAAE,GAAW;QAE1C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5D,OAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC;IACtB,CAAC;IAED,iBAAiB,CAAC,GAAW,EAAE,GAAW;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;QACzE,OAAO,IAAA,kBAAO,EAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAMD,cAAc,CAAC,GAAW,EAAE,GAAW;QACrC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,iBAAiB,CAAC,GAAW,EAAE,GAAW;QACxC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClE,CAAC;IAOD,eAAe,CAAC,GAAW,EAAE,GAAW;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5D,OAAO,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,MAAM,CAAC;IACpB,CAAC;IACD,eAAe,CAAC,GAAW,EAAE,GAAW;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAUD,kBAAkB,CAAC,GAAW,EAAE,GAAW;QACzC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAClF,OAAO,eAAe,CAAC;IACzB,CAAC;IAMD,gBAAgB,CAAC,GAAW,EAAE,GAAW;QACvC,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,EAAE;YACX,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;gBAC9C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACtB;iBAAM;gBACL,MAAM;aACP;YAED,GAAG,EAAE,CAAC;SACP;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,mBAAmB,CAAC,GAAW,EAAE,GAAW;QAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,iBAAiB,CAAC,GAAW,EAAE,GAAW;QACxC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IACpC,CAAC;IAOD,eAAe,CAAC,GAAW,EAAE,GAAW;;QACtC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YACnD,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,UAAU,0CAAE,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,iBAAiB,CAAC,GAAW,EAAE,GAAW;QACxC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAMD,8BAA8B,CAAC,KAAa;QAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;IAMD,yBAAyB,CAAC,SAAoB;QAC5C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,EAAE,CAAC;QACP,IAAI,SAAS,CAAC,QAAQ,EAAE;YACtB,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC;SAC7F;aAAM;YACL,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC;SACvF;QACD,IAAI,EAAE,EAAE;YACN,MAAM,UAAU,GAAG,SAAS,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAY,CAAC,CAAC;YACtE,OAAO,UAAU,CAAC;SACnB;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAKD,YAAY,CAAC,GAAW,EAAE,GAAW;QACnC,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE;gBACxD,OAAO,WAAW,CAAC,KAAK,CAAC;aAC1B;SACF;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,cAAc,CAAC,GAAW,EAAE,GAAW;QACrC,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE;gBACxD,IAAI,WAAW,CAAC,KAAK,EAAE;oBACrB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBACvE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;oBAChC,MAAM,SAAS,GAAoB,mBAAmB,CAAC,EAAE,CACvD,KAAK,EACL,IAAI,CAAC,KAAK,CAAC,SAAS,EACpB;wBACE,GAAG;wBACH,GAAG;wBACH,KAAK,EAAE,IAAI;wBACX,KAAK,EAAE,WAAW,CAAC,IAAI;wBACvB,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;wBAC5C,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;qBACnD,EACD,UAAU,EACV,IAAI,CAAC,OAAO,CAAC,YAAY,CAC1B,CAAC;oBACF,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC;iBAC/B;gBACD,OAAO,WAAW,CAAC;aACpB;SACF;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAUD,gBAAgB,CAAC,GAAW,EAAE,GAAW,EAAE,SAAiB,EAAE,SAAiB;QAC7E,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACvF,CAAC;IAOD,gBAAgB,CAAC,GAAW,EAAE,GAAW;QACvC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAOD,oBAAoB,CAAC,GAAW,EAAE,GAAW;;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC;QAC/B,MAAM,WAAW,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,WAAW,mCAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,CAAC;QAChE,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;YACrC,MAAM,GAAG,GAAa;gBACpB,GAAG;gBACH,GAAG;gBACH,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;gBAClC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;aAC7C,CAAC;YACF,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;SACzB;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,wBAAwB,CAAC,KAAkC;QACzD,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,wBAAwB,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;QACpE,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAGD,QAAQ,CAAC,GAAW,EAAE,GAAW;QAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzF,CAAC;IAED,cAAc,CAAC,GAAW,EAAE,GAAW;;QACrC,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,WAAW,CAAC,GAAW,EAAE,GAAW;;QAClC,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,cAAc,CAAC,GAAW,EAAE,GAAW;;QACrC,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IAOD,cAAc,CAAC,GAAW,EAAE,GAAY;;QACtC,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IAOD,kBAAkB,CAAC,GAAW,EAAE,GAAY;;QAC1C,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IAOD,mBAAmB,CAAC,GAAW,EAAE,GAAY;;QAC3C,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrE,CAAC;IAQD,WAAW,CAAC,GAAW,EAAE,GAAY;;QACnC,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAOD,cAAc,CAAC,GAAW,EAAE,GAAY;;QACtC,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAOD,iBAAiB,CAAC,GAAW,EAAE,GAAY;;QACzC,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,SAAS,0CAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,WAAW,CAAC,GAAW,EAAE,GAAW;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7G,OAAO;YACL,GAAG;YACH,GAAG;YACH,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC;YACpC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;YAC1E,KAAK,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK;YACpB,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,EAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM;YAC7G,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC;YAC9C,SAAS,EAAE,IAAI,CAAC,wBAAwB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACtD,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;YAClC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;YAC5C,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC;YAC5C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;SAChF,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,KAAe,EAAE,GAAW,EAAE,GAAW;QACjD,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,KAAK,CAAC;SACd;QACD,MAAM,KAAK,GAAG,IAAI,CAAC;QACnB,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YACpD,OAAO,KAAK,CAAC;SACd;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAOD,aAAa,CAAC,GAAW,EAAE,GAAW;;QACpC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE;YACZ,IAAI,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;YAC5D,IAAI,UAAU,EAAE;gBACd,OAAO,UAAU,CAAC;aACnB;YACD,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAEzC,IAAI,cAAc,CAAC;YACnB,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAA,mCAAiB,EAAC,GAAG,EAAE,GAAG,EAAE,SAAiC,CAAC,EAAE;gBAEzF,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBACrE,MAAM,OAAO,GAAG,MAAA,MAAC,WAAW,CAAC,KAAa,0CAAE,OAAO,mCAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;gBACpF,cAAc,GAAG,OAAO,CAAC;aAC1B;iBAAM,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAA,mCAAiB,EAAC,GAAG,EAAE,GAAG,EAAE,SAAiC,CAAC,EAAE;gBAEhG,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;gBACxE,MAAM,OAAO,GAAG,MAAA,MAAC,WAAW,CAAC,KAAa,0CAAE,OAAO,mCAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;gBACpF,cAAc,GAAG,OAAO,CAAC;aAC1B;YAED,IACE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC;gBACnB,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;oBACrC,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC;oBACvC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC;oBAClC,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EACvC;gBACA,OAAO,WAAW,CAAC;aACpB;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,UAAU,KAAI,MAAM,CAAC,CAAC;YAC3F,IAAI,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;gBACzE,UAAU,GAAoB,mBAAmB,CAAC,EAAE,CAClD,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,EACjD,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAC5B;oBACE,GAAG;oBACH,GAAG;oBACH,KAAK,EAAE,IAAoB;oBAC3B,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;oBAClC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;oBAC5C,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;iBACnD,EACD,UAAU,EACV,IAAI,CAAC,OAAO,CAAC,YAAY,CAC1B,CAAC;aACH;iBAAM,IAAI,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBACjF,UAAU,GAAoB,mBAAmB,CAAC,EAAE,CAClD,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,EACjD,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAC3B;oBACE,GAAG;oBACH,GAAG;oBACH,KAAK,EAAE,IAAoB;oBAC3B,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;oBAClC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;oBAC5C,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;iBACnD,EACD,UAAU,EACV,IAAI,CAAC,OAAO,CAAC,YAAY,CAC1B,CAAC;aACH;iBAAM;gBAGL,MAAM,KAAK,GAAG,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,KAAK,KAAI,EAAE,CAAC;gBAC9B,IAAI,cAAc,EAAE;oBACjB,KAAa,CAAC,OAAO,GAAG,cAAc,CAAC;iBACzC;gBACD,UAAU,GAAoB,mBAAmB,CAAC,EAAE,CAClD,KAAK,EACL,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;oBACzE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW;oBACxB,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC;wBAC5E,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc;wBAC3B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAChC;oBACE,GAAG;oBACH,GAAG;oBACH,KAAK,EAAE,IAAoB;oBAC3B,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;oBAClC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;oBAC5C,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;iBACnD,EACD,UAAU,EACV,IAAI,CAAC,OAAO,CAAC,YAAY,CAC1B,CAAC;aACH;YACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;YACvD,OAAO,UAAU,CAAC;SACnB;QACD,IAAI,QAAQ,CAAC;QAEb,IACE,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAE,IAAY,CAAC,SAAS,CAAC;YAChD,CAAC,IAAI,CAAC,YAAY,EAAE,IAAK,IAAI,CAAC,aAAa,CAAC,SAAkC,CAAC,eAAe,CAAC,EAC/F;YACA,QAAQ,GAAG,GAAG,CAAC;SAChB;aAAM;YACL,QAAQ,GAAG,GAAG,CAAC;SAChB;QACD,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE;YACd,OAAO,UAAU,CAAC;SACnB;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChF,MAAM,KAAK,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC;QAC5B,UAAU,GAAoB,mBAAmB,CAAC,EAAE,CAClD,KAAK,EACL,IAAI,CAAC,KAAK,CAAC,SAAS,EACpB;YACE,GAAG;YACH,GAAG;YACH,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;YAClC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;YAC5C,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;SACnD,EACD,UAAU,EACV,IAAI,CAAC,OAAO,CAAC,YAAY,CAC1B,CAAC;QACF,IAAI,CAAC,IAAA,mBAAU,EAAC,KAAK,CAAC,EAAE;YACtB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;SAC/C;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,mBAAmB;QACjB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAID,mBAAmB;QACjB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAID,kBAAkB;QAChB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAMD,gBAAgB,CAAC,GAAW,EAAE,GAAW;QACvC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE;YAC3B,OAAO,KAAK,CAAC;SACd;QACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE;YACjD,OAAO,KAAK,CAAC;SACd;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,KAAK,MAAM,EAAE;YAClD,OAAO,KAAK,CAAC;SACd;aAAM,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,KAAK,QAAQ,EAAE;YAE3D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBAC5B,OAAO,KAAK,CAAC;aACd;SACF;aAAM,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,KAAK,MAAM,EAAE;YAEzD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBAC3B,OAAO,KAAK,CAAC;aACd;SACF;QAOD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACtC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;IACjC,CAAC;IAMD,sBAAsB,CAAC,GAAW,EAAE,GAAW;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEvD,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBACjC,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;oBAC7C,OAAO,KAAK,CAAC;iBACd;aACF;iBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBACrC,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;oBAC7C,OAAO,KAAK,CAAC;iBACd;aACF;iBAAM;gBACL,OAAO,KAAK,CAAC;aACd;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO,KAAK,CAAC;aACd;YACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE;gBACnC,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,KAAK,KAAK,EAAE;oBAC/C,OAAO,IAAI,CAAC;iBACb;qBAAM,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,KAAK,QAAQ,EAAE;oBACzD,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBACjC,OAAO,IAAI,CAAC;qBACb;iBACF;qBAAM,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,KAAK,KAAK,EAAE;oBACtD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBAC9B,OAAO,IAAI,CAAC;qBACb;iBACF;gBACD,OAAO,KAAK,CAAC;aACd;YACD,OAAO,MAAM,CAAC,UAAU,CAAC;SAC1B;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAKD,YAAY,CAAC,GAAW,EAAE,GAAW;QACnC,IAAI,KAAK,CAAC;QACV,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YAC3B,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SAC5D;aAAM;YACL,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACvC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;SACrF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,gBAAgB,CAAC,GAAW,EAAE,GAAW,EAAE,mBAAyC;QAClF,IAAI,QAAQ,GAAqB,eAAe,CAAC;QACjD,IAAI,mBAAmB,EAAE;YACvB,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;SACvF;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;YACjD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;SACrF;IAEH,CAAC;IAED,WAAW,CAAC,GAAW,EAAE,GAAW,EAAE,cAA+B;QAEnE,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE;YACpD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;SACzE;IACH,CAAC;IAMD,YAAY,CAAC,GAAW,EAAE,GAAW;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE9C,MAAM,KAAK,GAAG,IAAA,2BAAa,EAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,kBAAO,CAAC,CAAC,KAAK,CAAC;QAErE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;QAE3D,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;YAC/B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY;YACrC,OAAO,EAAE,IAAA,kBAAS,EAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC,CAAC,CAAC,IAAA,kBAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;gBAC9C,CAAC,CAAE,KAAK,CAAC,KAAK,CAAC,IAAe;YAChC,KAAK,EAAE,IAAA,kBAAS,EAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,kBAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,IAAI,CAAC,IAAe;YAC5G,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU;YACjC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;YAC7B,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU;YACjC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;YACnC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;YAC/B,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAoB;YAC3C,YAAY,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,KAAK;YACnC,SAAS,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,MAAM;YAC9B,YAAY;YACZ,WAAW,EAAE,IAAA,kBAAS,EAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBACxC,CAAC,CAAC,IAAA,kBAAO,EAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;gBAClD,CAAC,CAAE,KAAK,CAAC,KAAK,CAAC,MAA4B;YAC7C,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;YACtC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;YACpC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS;YAGjC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW;YAGrC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;YAC9B,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;YACpC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;SAC7C,CAAC;IACJ,CAAC;IAOD,eAAe,CAAC,WAAoB,EAAE,WAAoB;QACxD,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClF,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChF,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACZ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aACzE,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CACjE,CAAC;IACN,CAAC;IAOD,WAAW,CAAC,WAAoB,EAAE,WAAoB;QACpD,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChF,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACZ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aACzE,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CACjE,CAAC;IACN,CAAC;IAKD,uBAAuB;QACrB,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACxD,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC;QAC7E,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;aAClC,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACZ,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CACjE,CAAC;IACN,CAAC;IAKD,oBAAoB;QAClB,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;aAClC,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACZ,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;aAC3B,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CACjE,CAAC;IACN,CAAC;IAKD,YAAY,CAAC,QAAwC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,IAAA,gBAAO,EAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;SAC1F;QACD,IAAI,IAAA,gBAAO,EAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE;YAChE,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;SAC3F;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAGD,YAAY;;QACV,IAAI,CAAA,MAAA,MAAA,IAAI,CAAC,YAAY,CAAC,MAAM,0CAAE,MAAM,0CAAE,MAAM,IAAG,CAAC,EAAE;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;YAC/C,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9D,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9D,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9D,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9D,MAAM,CAAC,OAAO,CAAC,CAAC,CAAY,EAAE,EAAE;gBAC9B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEpD,CAAC,CAAC,CAAC;YACH,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAE,EAAE;gBACrC,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAgB,EAAE,EAAE;oBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxD,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;wBAC9B,OAAO,GAAG,IAAI,CAAC;qBAChB;gBACH,CAAC,CAAC,CAAC;gBACH,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC;YACF,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAE,EAAE;gBACrC,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAgB,EAAE,EAAE;oBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxD,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;wBAC9B,OAAO,GAAG,IAAI,CAAC;qBAChB;gBACH,CAAC,CAAC,CAAC;gBACH,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC;YAEF,MAAM,uBAAuB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;gBACvD,IAAI,YAAY,CAAC;gBACjB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAgB,EAAE,EAAE;oBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxD,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;wBAC5D,YAAY,GAAG,KAAK,CAAC;qBACtB;gBACH,CAAC,CAAC,CAAC;gBACH,OAAO,YAAY,CAAC;YACtB,CAAC,CAAC;YACF,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,KAAiB,EAAmC,EAAE;gBACxG,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC9C,IAAI,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;gBACvC,IAAI,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;gBACvC,IAAI,KAAK,EAAE;oBACT,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7D,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC1D,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC3D;gBAED,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,KAAK,GAAG,EAAE;oBAChD,OAAO,EAAE,CAAC;iBACX;gBAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC1C,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;YACF,IAAI,SAAS,GAAG,EAAE,CAAC;YAEnB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,WAAW,EAAE;oBACf,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE;wBACrC,MAAM,cAAc,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;wBAC3C,IAAI,cAAc,EAAE;4BAClB,MAAM,KAAK,GAA0B,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BACnE,IAAI,KAAK,EAAE;gCACT,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;gCACpD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,aAAa,YAAY,OAAO,EAAE;iCAEvE;qCAAM;oCAEL,MAAM,YAAY,GAAG,GAAG,aAAa,EAAE,CAAC;oCACxC,IAAI,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;qCAEzC;yCAAM;wCACL,SAAS,IAAI,YAAY,CAAC;qCAC3B;iCACF;gCACD,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,EAAE;oCACnC,SAAS,IAAI,IAAI,CAAC;iCACnB;6BACF;iCAAM;gCACL,SAAS,IAAI,IAAI,CAAC;6BACnB;yBACF;qBACF;oBACD,SAAS,IAAI,IAAI,CAAC;iBACnB;aACF;YACD,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAGD,oBAAoB;;QAClB,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,YAAY,CAAC,MAAM,0CAAE,MAAM,CAAA,EAAE;YACrC,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,OAAO,EAAE,CAAC;SACX;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,CAAC,CAAY,EAAE,EAAE;YAC9B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpD,CAAC,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAE,EAAE;YACrC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAgB,EAAE,EAAE;gBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;oBAC9B,OAAO,GAAG,IAAI,CAAC;iBAChB;YACH,CAAC,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QACF,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAE,EAAE;YACrC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAgB,EAAE,EAAE;gBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;oBAC9B,OAAO,GAAG,IAAI,CAAC;iBAChB;YACH,CAAC,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,uBAAuB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACvD,IAAI,YAAY,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAgB,EAAE,EAAE;gBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;oBAC5D,YAAY,GAAG,KAAK,CAAC;iBACtB;YACH,CAAC,CAAC,CAAC;YACH,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC;QAEF,MAAM,aAAa,GAAiB,EAAE,CAAC;QAEvC,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,WAAW,EAAE;gBACf,MAAM,WAAW,GAAe,EAAE,CAAC;gBACnC,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE;oBACrC,MAAM,cAAc,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBAC3C,IAAI,cAAc,EAAE;wBAClB,MAAM,KAAK,GAA0B,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACnE,IAAI,KAAK,EAAE;4BACT,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BACxC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;yBAC5B;qBACF;iBACF;gBACD,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACjC;SACF;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,IAA2E;QACnG,OAAO,0BAAW,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAGD,eAAe,CAAC,GAAW,EAAE,GAAW;QACtC,IAAI,YAAY,CAAC;QACjB,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,MAAM,EAAE;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9C,YAAY,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,kBAAkB,CAAC;SAC3C;aAAM;YACL,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAClD,YAAY,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,KAAI,IAAI,CAAC,YAAY,CAAC;SAC1D;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,eAAe,CAAC,GAAW,EAAE,GAAW;QACtC,IAAI,YAAY,CAAC;QACjB,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,MAAM,EAAE;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9C,YAAY,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,kBAAkB,CAAC;SAC3C;aAAM;YACL,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAClD,YAAY,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC;SACrC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,kBAAkB;QAChB,OAAQ,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,aAA8B,CAAC,IAAI,CAAC,CAAC,MAAkB,EAAE,EAAE;YAC9F,IACE,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC;gBACrE,MAAM,CAAC,MAA4B,CAAC,eAAe,EACpD;gBACA,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB;;QAErB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CACvC,MAAA,MAAA,IAAI,CAAC,YAAY,CAAC,KAAK,0CAAE,OAAO,0CAAE,GAAG,EACrC,MAAA,MAAA,IAAI,CAAC,YAAY,CAAC,KAAK,0CAAE,OAAO,0CAAE,GAAG,CACtC,CAAC;QACF,OAAO,CAAA,MAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,WAAW,EAAE,0CAAG,CAAC,CAAC,0CAAE,IAAI,MAAK,OAAO;YACpD,CAAC,CAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAW,CAAC,mBAAmB;YAC3D,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAOD,kBAAkB,CAAC,GAAW,EAAE,GAAW;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhD,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE;YAC1D,OAAO,IAAI,CAAC;SACb;QACD,IACE,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG;YACzB,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM;YAC/B,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI;YAC3B,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,EAC7B;YACA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mBAAmB,CAAC,GAAW,EAAE,GAAW;QAC1C,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,WAAW,EAAE;gBACf,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;gBAC7B,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAMD,SAAS;QACP,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3C,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;IACvB,CAAC;IAMD,aAAa,CAAC,GAAW,EAAE,GAAW;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;SACjC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CACtC,KAAK,EACL,IAAI,mBAAU,EAAE,CAAC,GAAG,CAClB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAC/B,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAC9B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAC5B,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAC9B,CACF,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SAChC;QAED,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;IACvB,CAAC;IAMD,kBAAkB,CAAC,SAAoB;QACrC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEhE,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,EAAE;YACjC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;SACjD;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC;YAC7C,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;YACnC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;SAClC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CACtC,KAAK,EACL,IAAI,mBAAU,EAAE,CAAC,GAAG,CAClB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAC/B,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAC9B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAC5B,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAC9B,CACF,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAElC,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,EAAE;YACjC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SAChC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,YAAY;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3C,OAAO,CAAC,CAAC;IACX,CAAC;IAKD,cAAc,CAAC,OAAe,WAAW;QACvC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC,CAAC;YACpF,OAAO;SACR;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACpC,IAAI,KAAK,EAAE;YACT,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5D,IAAI,YAAY,IAAI,IAAI,CAAC,WAAW,IAAI,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC1E,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACjD,OAAO,MAAM,CAAC;aACf;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAC9C,KAAK,EACL,IAAI,mBAAU,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CACjH,CAAC;YACF,MAAM,MAAM,GAAI,SAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;SACf;QACD,OAAO,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA/5GD,8BA+5GC","file":"BaseTable.js","sourcesContent":["import * as columnStyleContents from '../body-helper/style';\nimport * as headerStyleContents from '../header-helper/style';\nimport { importStyle } from './style';\nimport * as style from '../tools/style';\nimport {\n type CellAddress,\n type CellRange,\n type TableEventHandlersEventArgumentMap,\n type TableEventHandlersReturnMap,\n type TableKeyboardOptions,\n type DropDownMenuHighlightInfo,\n type MenuListItem,\n type WidthModeDef,\n type ICustomRender,\n type ICellHeaderPaths,\n type HeaderData,\n type FullExtendStyle,\n type FieldDef,\n type ColumnTypeOption,\n type SortState,\n type IPagination,\n type ICustomLayout,\n type CellInfo,\n type CellStyle,\n type MenuInstanceType,\n type DropDownMenuOptions,\n type FieldFormat,\n type FieldData,\n type MaybePromiseOrUndefined,\n type MousePointerCellEvent,\n type DropDownMenuEventInfo,\n type HierarchyState,\n type FieldKeyDef,\n type CellLocation,\n type LayoutObjectId,\n type HeightModeDef,\n type ITableThemeDefine,\n InteractionState\n} from '../ts-types';\nimport type { ColumnIconOption } from '../ts-types';\nimport { event, style as utilStyle } from '../tools/helper';\n\nimport { TABLE_EVENT_TYPE } from './TABLE_EVENT_TYPE';\nimport { EventHandler } from '../event/EventHandler';\nimport { EventTarget } from '../event/EventTarget';\nimport { NumberMap } from '../tools/NumberMap';\nimport { Rect } from '../tools/Rect';\nimport type { TableTheme } from '../themes/theme';\nimport { throttle2 } from '../tools/util';\nimport themes from '../themes';\nimport { Env } from '../tools/env';\nimport { Scenegraph } from '../scenegraph/scenegraph';\nimport { StateManager } from '../state/state';\nimport { EventManager } from '../event/event';\nimport { BodyHelper } from '../body-helper/body-helper';\nimport { HeaderHelper } from '../header-helper/header-helper';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport { TooltipHandler } from '../components/tooltip/TooltipHandler';\nimport type { CachedDataSource, DataSource } from '../data';\nimport { AABBBounds, isNumber, isBoolean, isFunction, type ITextSize, isValid } from '@visactor/vutils';\nimport { textMeasure } from '../scenegraph/utils/text-measure';\nimport { getProp } from '../scenegraph/utils/get-prop';\nimport type {\n ColumnData,\n ColumnDefine,\n ColumnsDefine,\n ImageColumnDefine,\n IndicatorData\n} from '../ts-types/list-table/layout-map/api';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { IconCache } from '../plugins/icons';\nimport {\n _applyColWidthLimits,\n _getScrollableVisibleRect,\n _getTargetFrozenColAt,\n _getTargetFrozenRowAt,\n _setDataSource,\n _setRecords,\n _toPxWidth,\n createRootElement,\n getStyleTheme,\n updateRootElementPadding\n} from './tableHelper';\nimport { MenuHandler } from '../components/menu/dom/MenuHandler';\nimport type { BaseTableAPI, BaseTableConstructorOptions, IBaseTableProtected } from '../ts-types/base-table';\nimport { FocusInput } from './FouseInput';\nimport { defaultPixelRatio } from '../tools/pixel-ratio';\nimport { createLegend } from '../components/legend/create-legend';\nimport { DataSet } from '@visactor/vdataset';\nimport { Title } from '../components/title/title';\nimport type { Chart } from '../scenegraph/graphic/chart';\nimport { setBatchRenderChartCount } from '../scenegraph/graphic/contributions/chart-render-helper';\nimport { isLeftOrRightAxis, isTopOrBottomAxis } from '../layout/chart-helper/get-axis-config';\nconst { toBoxArray } = utilStyle;\nconst { isTouchEvent } = event;\nconst rangeReg = /^\\$(\\d+)\\$(\\d+)$/;\nimportStyle();\n\nconst EMPTY_STYLE = {};\nexport abstract class BaseTable extends EventTarget implements BaseTableAPI {\n internalProps: IBaseTableProtected;\n showFrozenIcon = true;\n showSort = true;\n padding: { top: number; left: number; right: number; bottom: number };\n globalDropDownMenu?: MenuListItem[];\n //画布绘制单元格的区域 不包括整体边框frame,所以比canvas的width和height要小一点(canvas的width包括了frame)\n tableNoFrameWidth: number;\n tableNoFrameHeight: number;\n tableX: number;\n tableY: number;\n _widthMode: WidthModeDef;\n _heightMode: HeightModeDef;\n _autoFillWidth: boolean;\n _autoFillHeight: boolean;\n customRender?: ICustomRender;\n\n canvasWidth?: number;\n canvasHeight?: number;\n\n _vDataSet: DataSet;\n scenegraph: Scenegraph;\n stateManager?: StateManager;\n eventManager?: EventManager;\n _pixelRatio: number;\n\n // bottomFrozenRowCount: number = 0;\n // rightFrozenColCount: number = 0;\n\n static get EVENT_TYPE(): typeof TABLE_EVENT_TYPE {\n return TABLE_EVENT_TYPE;\n }\n /**\n * 用户配置的options 只读 勿直接修改\n */\n readonly options: BaseTableConstructorOptions;\n\n version = \"0.16.3\";\n\n pagination?: IPagination | undefined;\n\n /**\n * constructor\n *\n * @constructor\n * @param options Constructor options\n */\n // eslint-disable-next-line default-param-last\n id = `VTable${Date.now()}`;\n\n headerStyleCache: any;\n bodyStyleCache: any;\n container: HTMLElement;\n isReleased: boolean = false;\n\n constructor(container: HTMLElement, options: BaseTableConstructorOptions = {}) {\n super();\n if (!container && options.mode !== 'node') {\n throw new Error(\"vtable's container is undefined\");\n }\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n // frozenRowCount = 0,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth,\n widthMode = 'standard',\n heightMode = 'standard',\n autoFillWidth = false,\n autoFillHeight = false,\n keyboardOptions,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n dragHeaderMode,\n // showHeader,\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n customRender,\n pixelRatio = defaultPixelRatio,\n renderChartAsync,\n renderChartAsyncBatchCount,\n\n mode,\n modeParams,\n canvasWidth,\n canvasHeight,\n overscrollBehavior,\n limitMinWidth\n } = options;\n this.container = container;\n this.options = options;\n this.options.container = container;\n this._widthMode = widthMode;\n this._heightMode = heightMode;\n this._autoFillWidth = autoFillWidth;\n this._autoFillHeight = autoFillHeight;\n this.customRender = customRender;\n this.padding = { top: 0, right: 0, left: 0, bottom: 0 };\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n\n this.tableNoFrameWidth = 0;\n this.tableNoFrameHeight = 0;\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n\n const internalProps = (this.internalProps = {} as IBaseTableProtected);\n // style.initDocument(scrollBar);\n // showHeader !== undefined && (this.showHeader = showHeader);\n // scrollBar !== undefined && (this.scrollBar = scrollBar);\n showFrozenIcon !== undefined && (this.showFrozenIcon = showFrozenIcon);\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n\n if (Env.mode !== 'node') {\n internalProps.element = createRootElement(this.padding);\n internalProps.focusControl = new FocusInput(this, internalProps.element);\n internalProps.canvas = document.createElement('canvas');\n internalProps.element.appendChild(internalProps.canvas);\n internalProps.context = internalProps.canvas.getContext('2d')!;\n }\n\n internalProps.handler = new EventHandler();\n internalProps.pixelRatio = pixelRatio;\n internalProps.frozenColCount = frozenColCount;\n\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight; // defaultHeaderRowHeight没有设置取defaultRowHeight\n\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n\n internalProps.keyboardOptions = keyboardOptions;\n\n internalProps.columnResizeMode = columnResizeMode;\n internalProps.dragHeaderMode = dragHeaderMode;\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n internalProps._rowHeightsMap = new NumberMap();\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n internalProps._widthResizedColMap = new Set();\n\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n\n internalProps.calcWidthContext = {\n _: internalProps,\n get full(): number {\n if (Env.mode === 'node') {\n return canvasWidth / (pixelRatio ?? 1);\n }\n return this._.canvas.width / ((this._.context as any).pixelRatio ?? window.devicePixelRatio);\n }\n // get em(): number {\n // return getFontSize(this._.context, this._.theme.font).width;\n // }\n };\n\n internalProps.cellTextOverflows = {};\n internalProps.focusedTable = false;\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT); //原来在listTable文件中\n\n if (container) {\n //先清空\n container.innerHTML = '';\n container.appendChild(internalProps.element);\n this._updateSize();\n } else {\n this._updateSize();\n }\n\n this.options = options;\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n internalProps.bodyHelper = new BodyHelper(this);\n internalProps.headerHelper = new HeaderHelper(this);\n\n internalProps.autoWrapText = options.autoWrapText;\n\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? internalProps.colCount;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n this._vDataSet = new DataSet();\n this.scenegraph = new Scenegraph(this);\n this.stateManager = new StateManager(this);\n this.eventManager = new EventManager(this);\n\n if (options.legends) {\n internalProps.legends = createLegend(options.legends, this);\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n\n //原有的toolTip提示框处理,主要在文字绘制不全的时候 出来全文本提示信息 需要加个字段设置是否有效\n internalProps.tooltip = Object.assign(\n {\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html') {\n internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine);\n }\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n Array.isArray(options.menu?.dropDownMenuHighlight) &&\n this.setDropDownMenuHighlight(options.menu?.dropDownMenuHighlight);\n\n // 全局下拉菜单\n Array.isArray(options.menu?.defaultHeaderMenuItems) &&\n (this.globalDropDownMenu = options.menu.defaultHeaderMenuItems);\n\n if (internalProps.menu.renderMode === 'html') {\n internalProps.menuHandler = new MenuHandler(this);\n }\n\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n\n internalProps.stick = { changedCells: [] };\n\n internalProps.customMergeCell = options.customMergeCell;\n }\n /** 节流绘制 */\n throttleInvalidate = throttle2(this.render.bind(this), 200);\n /**\n * Get table container.\n * @returns {HTMLElement} table container\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n /**\n * 获取表格创建的DOM根节点\n */\n getElement(): HTMLElement {\n return this.internalProps.element;\n }\n /**\n * 获取canvas\n */\n get canvas(): HTMLCanvasElement {\n return this.internalProps.canvas;\n }\n\n resize() {\n this._updateSize();\n if (this.internalProps.legends) {\n this.internalProps.legends.resize();\n }\n if (this.internalProps.title) {\n this.internalProps.title.resize();\n }\n // this.stateManager.checkFrozen();\n this.scenegraph.resize();\n }\n\n /**\n * Get the number of rows.\n */\n get rowCount(): number {\n return this.internalProps.rowCount;\n }\n /**\n * Set the number of rows.\n */\n set rowCount(rowCount: number) {\n this.internalProps.rowCount = rowCount;\n }\n /**\n * Get the number of columns.\n */\n get colCount(): number {\n return this.internalProps.colCount ?? 0;\n }\n /**\n * Set the number of columns.\n */\n set colCount(colCount: number) {\n this.internalProps.colCount = colCount;\n }\n /**\n * 注意 这个值和options.frozenColCount 不一样!options.frozenColCount是用户实际设置的; 这里获取的值是调整过:frozen的列过宽时 frozeCount为0\n */\n get frozenColCount(): number {\n return this.internalProps.layoutMap?.frozenColCount ?? this.internalProps.frozenColCount ?? 0;\n }\n /**\n * Set the number of frozen columns.\n */\n set frozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n // 纠正frozenColCount的值;\n if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n this.internalProps.frozenColCount = 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /** 设置冻结的行数 */\n setFrozenColCount(frozenColCount: number) {\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n //纠正frozenColCount的值\n if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n this.internalProps.frozenColCount = 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /**\n * 和setFrozenColCount一样的逻辑 但保留options.frozenColCount不赋新值\n * 当冻结列的宽度过宽时调用该函数\n */\n _setFrozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n this.internalProps.frozenColCount = frozenColCount;\n }\n /**\n * 计算完前置状态后 重新计算判断列宽是否过大\n */\n _resetFrozenColCount() {\n if (this.options.frozenColCount) {\n if (this.tableNoFrameWidth - this.getColsWidth(0, this.options.frozenColCount - 1) <= 120) {\n this._setFrozenColCount(0);\n } else if (this.frozenColCount !== this.options.frozenColCount) {\n this._setFrozenColCount(this.options.frozenColCount); //frozenColCount从0恢复到原有的frozenColCount\n }\n }\n }\n /**\n * Get the number of frozen rows.\n */\n get frozenRowCount(): number {\n return this.internalProps.layoutMap?.frozenRowCount ?? this.internalProps.frozenRowCount ?? 0;\n }\n /**\n * Set the number of frozen rows.\n */\n set frozenRowCount(frozenRowCount: number) {\n this.internalProps.frozenRowCount = frozenRowCount;\n // this.options.frozenRowCount = frozenRowCount;\n }\n\n get rightFrozenColCount(): number {\n return this.internalProps.layoutMap?.rightFrozenColCount ?? this.internalProps.rightFrozenColCount ?? 0;\n }\n\n set rightFrozenColCount(rightFrozenColCount: number) {\n this.scenegraph.dealWidthRightFrozen(rightFrozenColCount);\n }\n\n get bottomFrozenRowCount(): number {\n return this.internalProps.layoutMap?.bottomFrozenRowCount ?? this.internalProps.bottomFrozenRowCount ?? 0;\n }\n\n set bottomFrozenRowCount(bottomFrozenRowCount: number) {\n this.scenegraph.dealWidthBottomFrozen(bottomFrozenRowCount);\n }\n\n /**\n * Get the default row height.\n *\n */\n get defaultRowHeight(): number {\n return this.internalProps.defaultRowHeight;\n }\n /**\n * Set the default row height.\n */\n set defaultRowHeight(defaultRowHeight: number) {\n this.internalProps.defaultRowHeight = defaultRowHeight;\n this.options.defaultRowHeight = defaultRowHeight;\n }\n /**\n * Get the default row height.\n *\n */\n get defaultHeaderRowHeight(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderRowHeight;\n }\n /**\n * Set the default row height.\n */\n set defaultHeaderRowHeight(defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight;\n this.options.defaultHeaderRowHeight = defaultHeaderRowHeight;\n }\n /**\n * Get the default column width.\n */\n get defaultColWidth(): number {\n return this.internalProps.defaultColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultColWidth(defaultColWidth: number) {\n this.internalProps.defaultColWidth = defaultColWidth;\n this.options.defaultColWidth = defaultColWidth;\n }\n /**\n * Get the default column width.\n */\n get defaultHeaderColWidth(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultHeaderColWidth(defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderColWidth = defaultHeaderColWidth;\n this.options.defaultHeaderColWidth = defaultHeaderColWidth;\n }\n /**\n * Get the columns width. 但这个可能和看到的宽度不一致 获取某一列的宽度请使用接口 getColWidth(1) 这个接口会根据maxWidth minWidth进行调整\n */\n get colWidthsMap(): NumberMap<string | number> {\n return this.internalProps._colWidthsMap;\n }\n /**\n * Set the columns width.\n */\n set colWidthsMap(colWidthsMap: NumberMap<string | number>) {\n this.internalProps._colWidthsMap = colWidthsMap;\n }\n /**\n * Get every colomn's content width. not care actual column width\n */\n get colContentWidthsMap(): NumberMap<string | number> {\n return this.internalProps._colContentWidthsMap;\n }\n /**\n * Set every colomn's content width.\n */\n set colContentWidthsMap(colContentWidthsMap: NumberMap<string | number>) {\n this.internalProps._colContentWidthsMap = colContentWidthsMap;\n }\n /**\n * Get the range columns width.\n */\n get _colRangeWidthsMap(): Map<string, number> {\n return this.internalProps._colRangeWidthsMap;\n }\n /**\n * Set the range columns width.\n */\n set _colRangeWidthsMap(_colRangeWidthsMap: Map<string, number>) {\n this.internalProps._colRangeWidthsMap = _colRangeWidthsMap;\n }\n /**\n * Get the range rows height.\n */\n get _rowRangeHeightsMap(): Map<string, number> {\n return this.internalProps._rowRangeHeightsMap;\n }\n /**\n * Set the range rows height.\n */\n set _rowRangeHeightsMap(_rowRangeHeightsMap: Map<string, number>) {\n this.internalProps._rowRangeHeightsMap = _rowRangeHeightsMap;\n }\n /**\n * Get the columns width.\n */\n get rowHeightsMap(): NumberMap<number> {\n return this.internalProps._rowHeightsMap;\n }\n /**\n * Set the columns width.\n */\n set rowHeightsMap(rowHeightsMap: NumberMap<number>) {\n this.internalProps._rowHeightsMap = rowHeightsMap;\n }\n /**\n * Get the columns width limit.\n */\n get colWidthsLimit(): {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n } {\n return this.internalProps._colWidthsLimit;\n }\n /**\n * Set the columns width limit.\n */\n set colWidthsLimit(colWidthsLimit: {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n }) {\n this.internalProps._colWidthsLimit = colWidthsLimit;\n }\n get keyboardOptions(): TableKeyboardOptions | null {\n return this.internalProps.keyboardOptions ?? null;\n }\n set keyboardOptions(keyboardOptions: TableKeyboardOptions | null) {\n this.internalProps.keyboardOptions = keyboardOptions ?? undefined;\n }\n\n get widthMode(): WidthModeDef {\n return this._widthMode;\n }\n set widthMode(widthMode: WidthModeDef) {\n if (widthMode !== this._widthMode) {\n this._widthMode = widthMode;\n this.options.widthMode = widthMode;\n }\n }\n get heightMode(): HeightModeDef {\n return this._heightMode;\n }\n set heightMode(heightMode: HeightModeDef) {\n if (heightMode !== this._heightMode) {\n this._heightMode = heightMode;\n this.options.heightMode = heightMode;\n }\n }\n get autoFillWidth(): boolean {\n return this._autoFillWidth;\n }\n set autoFillWidth(autoFillWidth: boolean) {\n if (autoFillWidth !== this._autoFillWidth) {\n this._autoFillWidth = autoFillWidth;\n }\n }\n get autoFillHeight(): boolean {\n return this._autoFillHeight;\n }\n set autoFillHeight(autoFillHeight: boolean) {\n if (autoFillHeight !== this._autoFillHeight) {\n this._autoFillHeight = autoFillHeight;\n }\n }\n /**\n * 根据设置的列宽配置 计算列宽值\n * @param {string|number} width width definition\n * @returns {number} the pixels of width\n */\n _colWidthDefineToPxWidth(width: string | number): number {\n if (width === 'auto') {\n // hack for defaultWidht support 'auto'\n return 0;\n }\n return _toPxWidth(this, width);\n }\n\n /**\n * 获取列宽的最大最小限制\n * @param {number} col number of column\n * @returns {object|null} the column width limits\n * @private\n */\n private _getColWidthLimits(col: number): {\n min?: undefined;\n minDef?: undefined;\n max?: undefined;\n maxDef?: undefined;\n } | null {\n const limit = this.colWidthsLimit[col];\n if (!limit) {\n return null;\n }\n\n const result: {\n min?: number;\n max?: number;\n minDef?: string | number;\n maxDef?: string | number;\n } = {};\n\n if (limit.min) {\n result.min = _toPxWidth(this, limit.min);\n result.minDef = limit.min;\n }\n if (limit.max) {\n result.max = _toPxWidth(this, limit.max);\n result.maxDef = limit.max;\n }\n return result as never;\n }\n\n _adjustColWidth(col: number, orgWidth: number): number {\n const limits = this._getColWidthLimits(col);\n return Math.max(_applyColWidthLimits(limits, orgWidth), 0);\n }\n\n /**\n * 设置像数比\n * @param pixelRatio\n */\n setPixelRatio(pixelRatio: number) {\n this.internalProps.pixelRatio = pixelRatio;\n this.scenegraph.setPixelRatio(pixelRatio);\n }\n /**\n * 窗口尺寸发生变化 或者像数比变化\n * @return {void}\n */\n _updateSize(): void {\n //清除样式并获取大小\n const { padding } = this;\n\n let widthP = 0;\n let heightP = 0;\n\n if (Env.mode === 'browser') {\n const element = this.getElement();\n\n const width1 = element.parentElement?.offsetWidth ?? 1 - 1;\n const height1 = element.parentElement?.offsetHeight ?? 1 - 1;\n\n element.style.width = (width1 && `${width1 - padding.left - padding.right}px`) || '0px';\n element.style.height = (height1 && `${height1 - padding.top - padding.bottom}px`) || '0px';\n\n const { canvas } = this.internalProps;\n widthP = canvas.parentElement?.offsetWidth ?? 1 - 1;\n heightP = canvas.parentElement?.offsetHeight ?? 1 - 1;\n\n //style 与 width,height相同\n if (this?.scenegraph?.stage) {\n this.scenegraph.stage.resize(widthP, heightP);\n } else {\n canvas.style.width = '';\n canvas.style.height = '';\n canvas.width = widthP;\n canvas.height = heightP;\n\n canvas.style.width = `${widthP}px`;\n canvas.style.height = `${heightP}px`;\n }\n } else if (Env.mode === 'node') {\n widthP = this.canvasWidth - 1;\n heightP = this.canvasHeight - 1;\n }\n\n const width = Math.floor(widthP - style.getScrollBarSize(this.getTheme().scrollStyle));\n const height = Math.floor(heightP - style.getScrollBarSize(this.getTheme().scrollStyle));\n\n if (this.internalProps.theme?.frameStyle) {\n //考虑表格整体边框的问题\n const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n this.tableX = (lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0);\n this.tableY = (lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0);\n this.tableNoFrameWidth =\n width - ((lineWidths[1] ?? 0) + (shadowWidths[1] ?? 0)) - ((lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0));\n this.tableNoFrameHeight =\n height - ((lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0)) - ((lineWidths[2] ?? 0) + (shadowWidths[2] ?? 0));\n }\n }\n\n get rowHierarchyType(): 'grid' | 'tree' {\n return 'grid';\n }\n\n // /**\n // * Set all column width.\n // * @param {number[]} widths The column widths\n // * @return {void}\n // */\n // setColWidths(widths: number[]): void {\n // widths.forEach((value, index) => this.setColWidth(index, value));\n // }\n /**\n * 获取指定列范围的总宽度\n * @param startCol\n * @param endCol\n * @returns\n */\n getColsWidth(startCol: number, endCol: number): number {\n endCol = Math.min(endCol, this.colCount - 1); // endCol最大为this.colCount - 1,超过会导致width计算为NaN\n //通过缓存获取指定范围列宽\n const cachedColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol}`);\n if (cachedColWidth !== null && cachedColWidth !== undefined) {\n return cachedColWidth;\n }\n\n //特殊处理 先尝试获取startCol->endCol-1的行高\n const cachedLowerColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol - 1}`);\n if (cachedLowerColWidth !== null && cachedLowerColWidth !== undefined) {\n // const width = this.colWidthsMap.get(endCol);\n // let adjustW;\n // if (width) {\n // adjustW =\n // this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(endCol, this._colWidthDefineToPxWidth(width));\n // } else {\n // use default column width if no width in colWidthsMap\n const adjustW = this.getColWidth(endCol);\n // }\n const addWidth = cachedLowerColWidth + adjustW;\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0 && !Number.isNaN(addWidth)) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(addWidth));\n }\n return Math.round(addWidth);\n }\n\n let w = 0;\n for (let col = startCol; col <= endCol; col++) {\n w += this.getColWidth(col);\n }\n\n // this.colWidthsMap.each(startCol, endCol, (width, col) => {\n // // adaptive模式下,不受max min配置影响,直接使用width\n // w +=\n // (this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(col, this._colWidthDefineToPxWidth(width))) - this.getColWidth(col);\n // });\n // for (let col = startCol; col <= endCol; col++) {\n // if (this.colWidthsMap.has(col)) {\n // continue;\n // }\n // const adj = this._adjustColWidth(col, this.internalProps.defaultColWidth as number);\n // if (adj !== this.internalProps.defaultColWidth) {\n // w += adj - (this.internalProps.defaultColWidth as number);\n // }\n // }\n\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(w));\n }\n return Math.round(w);\n }\n /**\n * 获取某一行的高度\n * @param row\n * @returns\n */\n getRowHeight(row: number): number {\n // return (\n // this.rowHeightsMap.get(row) ||\n // (this.isColumnHeader(0, row) || this.isCornerHeader(0, row)\n // ? Array.isArray(this.defaultHeaderRowHeight)\n // ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n // : this.defaultHeaderRowHeight\n // : this.internalProps.defaultRowHeight)\n // );\n if (this.rowHeightsMap.get(row)) {\n return this.rowHeightsMap.get(row);\n }\n const defaultHeight = this.getDefaultRowHeight(row);\n if (isNumber(defaultHeight)) {\n return defaultHeight;\n }\n return this.defaultRowHeight;\n }\n\n getDefaultRowHeight(row: number) {\n if (this.isColumnHeader(0, row) || this.isCornerHeader(0, row)) {\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n if (this.isBottomFrozenRow(this.rowHeaderLevelCount, row)) {\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[\n this.columnHeaderLevelCount > 0 ? this.columnHeaderLevelCount - this.bottomFrozenRowCount : 0\n ] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n return this.internalProps.defaultRowHeight;\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setRowHeight(row: number, height: number, clearCache?: boolean): void {\n this.rowHeightsMap.put(row, Math.round(height));\n // 清楚影响缓存\n if (clearCache) {\n this._clearRowRangeHeightsMap(row);\n }\n }\n /**\n * 获取指定行范围的总高度\n * @param startCol\n * @param endCol\n * @returns\n */\n getRowsHeight(startRow: number, endRow: number): number {\n //通过缓存获取指定范围行高\n const cachedRowHeight = this._rowRangeHeightsMap.get(`$${startRow}$${endRow}`);\n if (cachedRowHeight !== null && cachedRowHeight !== undefined) {\n return cachedRowHeight;\n }\n //特殊处理 先尝试获取startRow->endRow-1的行高\n const cachedLowerRowHeight = this._rowRangeHeightsMap.get(`$${startRow}$${endRow - 1}`);\n if (cachedLowerRowHeight !== null && cachedLowerRowHeight !== undefined) {\n const height = Math.round(\n cachedLowerRowHeight +\n (this.rowHeightsMap.get(endRow) ??\n (this.isColumnHeader(0, endRow) || this.isCornerHeader(0, endRow)\n ? Array.isArray(this.defaultHeaderRowHeight) && isNumber(this.defaultHeaderRowHeight[endRow])\n ? (this.defaultHeaderRowHeight[endRow] as number)\n : isNumber(this.defaultHeaderRowHeight)\n ? (this.defaultHeaderRowHeight as number)\n : this.internalProps.defaultRowHeight\n : this.internalProps.defaultRowHeight))\n );\n if (startRow >= 0 && endRow >= 0) {\n this._rowRangeHeightsMap.set(`$${startRow}$${endRow}`, Math.round(height));\n }\n return height;\n }\n\n let h = 0;\n // for (let i = startRow; i <= endRow; i++) {\n // h +=\n // this.rowHeightsMap.get(i) ||\n // (this.isColumnHeader(0, i) || this.isCornerHeader(0, i)\n // ? Array.isArray(this.defaultHeaderRowHeight)\n // ? this.defaultHeaderRowHeight[i] ?? this.internalProps.defaultRowHeight\n // : this.defaultHeaderRowHeight\n // : this.internalProps.defaultRowHeight);\n // }\n // autoRowHeight || all rows in header, use accumulation\n if (\n this.heightMode === 'standard' &&\n !this.autoFillHeight &&\n this.internalProps.layoutMap &&\n endRow >= this.columnHeaderLevelCount &&\n !this.bottomFrozenRowCount &&\n !this.hasAutoImageColumn()\n ) {\n for (let i = startRow; i < this.columnHeaderLevelCount; i++) {\n // part in header\n h += this.getRowHeight(i);\n }\n // part in body\n h += this.defaultRowHeight * (endRow - Math.max(this.columnHeaderLevelCount, startRow) + 1);\n } else {\n for (let i = startRow; i <= endRow; i++) {\n h += this.getRowHeight(i);\n }\n }\n if (startRow >= 0 && endRow >= 0 && h > 0) {\n this._rowRangeHeightsMap.set(`$${startRow}$${endRow}`, Math.round(h));\n }\n // }\n return Math.round(h);\n }\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n getColWidthDefined(col: number): string | number {\n const { layoutMap } = this.internalProps;\n // const ctx = _getInitContext.call(table);\n if (this.widthMode === 'autoWidth') {\n return 'auto';\n }\n const { width } = layoutMap?.getColumnWidthDefined(col) ?? {};\n if (typeof width === 'number' && width <= 0) {\n // adaptive模式下,宽度可能为0\n return 0;\n } else if (width) {\n return width;\n } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n if (this.isPivotTable()) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n }\n return this.defaultColWidth;\n }\n return this.defaultColWidth;\n }\n\n // setColWidthDefined(col: number, width: number) {\n // const { layoutMap } = this.internalProps;\n // const widthData = layoutMap?.getColumnWidthDefined(col) ?? {};\n // widthData.width = width;\n // }\n\n getColWidthDefinedNumber(col: number): number {\n const width = this.getColWidthDefined(col);\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n // getColWidthDefine(col: number): string | number {\n // const width = this.colWidthsMap.get(col);\n // if (typeof width === 'number' && width <= 0) {\n // // adaptive模式下,宽度可能为0\n // return 0;\n // } else if (width) {\n // return width;\n // } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // }\n // return this.defaultColWidth;\n // }\n\n /**\n * 根据列号 获取该列宽度\n * @param {number} col column index\n * @return {number} column width\n */\n getColWidth(col: number): number {\n // const width = this.getColWidthDefine(col);\n const width =\n this.colWidthsMap.get(col) ??\n (col < this.rowHeaderLevelCount\n ? Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n : this.defaultHeaderColWidth\n : this.defaultColWidth);\n if (\n (this.widthMode === 'adaptive' && typeof width === 'number') ||\n ((this as any).transpose && typeof width === 'number')\n ) {\n // adaptive模式下,colWidthsMap存储的都是像素数值,此时max min配置失效,直接返回像素值\n // transpose模式下,不受原有列max min配置影响,直接返回像素值\n return this._colWidthDefineToPxWidth(width);\n }\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setColWidth(col: number, width: string | number, clearCache?: boolean, skipCheckFrozen?: boolean): void {\n this.colWidthsMap.put(col, typeof width === 'number' ? Math.round(width) : width);\n // 清楚影响缓存\n if (clearCache) {\n this._clearColRangeWidthsMap(col);\n }\n\n // 检查冻结情况\n if (!skipCheckFrozen) {\n this.stateManager.checkFrozen();\n }\n }\n\n /**\n * 清空含有指定col的缓存\n * @param col\n */\n _clearColRangeWidthsMap(col?: number): void {\n if (typeof col !== 'number') {\n this._colRangeWidthsMap.clear();\n } else {\n const keys = this._colRangeWidthsMap.keys();\n for (const key of keys) {\n const reg = rangeReg.exec(key);\n if (reg) {\n const start = Number(reg[1]);\n const end = Number(reg[2]);\n if (col >= start && col <= end) {\n this._colRangeWidthsMap.delete(key);\n }\n }\n }\n }\n }\n /**\n * 清空含有指定row的缓存\n * @param row\n */\n _clearRowRangeHeightsMap(row?: number): void {\n if (typeof row !== 'number') {\n this._rowRangeHeightsMap.clear();\n } else {\n const keys = this._rowRangeHeightsMap.keys();\n for (const key of keys) {\n const reg = rangeReg.exec(key);\n if (reg) {\n const start = Number(reg[1]);\n const end = Number(reg[2]);\n if (row >= start && row <= end) {\n this._rowRangeHeightsMap.delete(key);\n }\n }\n }\n }\n }\n /**\n * 获取某一列内容的宽度 不关乎该列列宽值有多少\n * @param col\n * @returns\n */\n _getColContentWidth(col: number): number {\n return Number(this.colContentWidthsMap.get(col));\n }\n _setColContentWidth(col: number, width: string | number): void {\n this.colContentWidthsMap.put(col, width);\n }\n /**\n * 获取所有列的总高度\n * @returns\n */\n getAllRowsHeight(): number {\n if (this.internalProps.rowCount <= 0) {\n return 0;\n }\n const h = this.getRowsHeight(0, this.internalProps.rowCount - 1);\n return h;\n }\n /**\n * 获取所有行的总宽度\n * @returns\n */\n getAllColsWidth(): number {\n if (this.internalProps.colCount <= 0) {\n return 0;\n }\n const w = this.getColsWidth(0, this.internalProps.colCount - 1);\n return w;\n }\n\n /**\n * 根据列号 获取列宽最大值\n * @param {number} col column index\n * @return {number} column max width\n */\n getMaxColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let max = (obj && obj.max) ?? Infinity;\n if (typeof max === 'string') {\n max = _toPxWidth(this, max);\n }\n return max;\n }\n /**\n * 根据列号 设置列宽最大值\n * @param {number} col column index\n * @param {number} maxwidth column max width\n * @return {void}\n */\n setMaxColWidth(col: number, maxwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.max = maxwidth;\n }\n /**\n * 根据列号 获取列宽最小值\n * @param {number} col column index\n * @return {number} column min width\n */\n getMinColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let min = (obj && obj.min) ?? 0;\n if (typeof min === 'string') {\n min = _toPxWidth(this, min);\n }\n return min;\n }\n /**\n * 根据列号 设置列宽最小值\n * @param {number} col column index\n * @param {number} minwidth column min width\n * @return {void}\n */\n setMinColWidth(col: number, minwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.min = minwidth;\n }\n /**\n * 获取单元格的范围 返回值为Rect类型。不考虑是否为合并单元格的情况,坐标从0开始\n * @param {number} col column index\n * @param {number} row row index\n * @returns {Rect}\n */\n getCellRect(col: number, row: number): Rect {\n const isFrozenCell = this.isFrozenCell(col, row);\n\n let absoluteLeft;\n const width = this.getColWidth(col);\n if (isFrozenCell && isFrozenCell.col) {\n if (this.isRightFrozenColumn(col, row)) {\n absoluteLeft = this.tableNoFrameWidth - (this.getColsWidth(col, this.colCount - 1) ?? 0);\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n absoluteLeft += this.scrollLeft;\n }\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n }\n\n let absoluteTop;\n const height = this.getRowHeight(row);\n if (isFrozenCell && isFrozenCell.row) {\n if (this.isBottomFrozenRow(col, row)) {\n absoluteLeft = this.tableNoFrameHeight - (this.getRowsHeight(row, this.rowCount - 1) ?? 0);\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n absoluteTop += this.scrollTop;\n }\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定单元格【按合并后的区域】的rect 整表坐标系中(即相对于单元格[0,0]左上角来算的)\n * @param col\n * @param row\n * @returns\n */\n getMergeCellRect(col: number, row: number): Rect {\n const cellRange = this.getCellRange(col, row);\n const absoluteLeft = this.getColsWidth(0, cellRange.start.col - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n const width = this.getColsWidth(cellRange.start.col, cellRange.end.col);\n const absoluteTop = this.getRowsHeight(0, cellRange.start.row - 1) || 0;\n const height = this.getRowsHeight(cellRange.start.row, cellRange.end.row);\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取的位置是相对表格显示界面的左上角 情况滚动情况 如单元格已经滚出表格上方 则这个单元格的y将为负值\n * @param {number} col index of column, of the cell\n * @param {number} row index of row, of the cell\n * @returns {Rect} the rect of the cell.\n */\n getCellRelativeRect(col: number, row: number): Rect {\n return this._toRelativeRect(this.getCellRect(col, row));\n }\n /**\n * 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型 可以传入单元格范围或者具体某个单元格 返回值是包括合并单元格的较大区域\n * @returns {Rect}\n */\n getCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n if ((<CellRange>range).start) {\n return this._toRelativeRect(\n this.getCellsRect(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n )\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n return this._toRelativeRect(\n this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row)\n );\n }\n /**\n * 即仅视觉看到的位置 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型\n * @returns {Rect} the visiable rect of the cell.可见矩形部分\n */\n getVisibleCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n let cellRange: CellRange;\n if ((<CellRange>range).start) {\n cellRange = <CellRange>range;\n } else {\n cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n }\n return this._getVisiableRect(this.getCellRangeRelativeRect(range), cellRange);\n }\n /**\n * 调整relativeRectObj 计算可见部分的rect\n * @param relativeRectObj\n * @returns\n */\n _getVisiableRect(relativeRectObj: Rect, cellRange: CellRange): Rect {\n const targetLeft =\n cellRange.start.col >= this.frozenColCount\n ? Math.max(relativeRectObj.left, this.frozenColCount >= 1 ? this.getColsWidth(0, this.frozenColCount - 1) : 0)\n : relativeRectObj.left;\n const targetRight = Math.min(relativeRectObj.right, this.tableNoFrameWidth);\n const rect = relativeRectObj.copy();\n rect.left = targetLeft;\n rect.right = targetRight;\n\n const targetTop =\n cellRange.start.row >= this.frozenRowCount\n ? Math.max(relativeRectObj.top, this.frozenRowCount >= 1 ? this.getRowsHeight(0, this.frozenRowCount - 1) : 0)\n : relativeRectObj.top;\n const targetBottom = Math.min(relativeRectObj.bottom, this.tableNoFrameHeight);\n rect.top = targetTop;\n rect.bottom = targetBottom;\n return rect;\n }\n /**\n * 获取指定行列区域的Rect\n * @param {number} startCol\n * @param {number} startRow\n * @param {number} endCol\n * @param {number} endRow\n * @returns {Rect}\n */\n getCellsRect(startCol: number, startRow: number, endCol: number, endRow: number): Rect {\n const isFrozenStartCell = this.isFrozenCell(startCol, startRow);\n const isFrozenEndCell = this.isFrozenCell(endCol, endRow);\n\n let absoluteLeft = this.getColsWidth(0, startCol - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n let width = this.getColsWidth(startCol, endCol);\n if (isFrozenStartCell && isFrozenStartCell.col) {\n const scrollLeft = this.scrollLeft;\n absoluteLeft += scrollLeft;\n if (!isFrozenEndCell || !isFrozenEndCell.col) {\n width -= scrollLeft;\n width = Math.max(width, this.getColsWidth(startCol, this.frozenColCount - 1));\n }\n }\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let height = this.getRowsHeight(startRow, endRow);\n if (isFrozenStartCell && isFrozenStartCell.row) {\n const scrollTop = this.scrollTop;\n absoluteTop += scrollTop;\n if (!isFrozenEndCell || !isFrozenEndCell.row) {\n height -= scrollTop;\n height = Math.max(height, this.getRowsHeight(startRow, this.frozenRowCount - 1));\n }\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定区域的宽度\n * @param startCol\n * @param startRow\n * @param endCol\n * @param endRow\n * @returns\n */\n getCellsRectWidth(startCol: number, startRow: number, endCol: number, endRow: number): number {\n const isFrozenStartCell = this.isFrozenCell(startCol, startRow);\n const isFrozenEndCell = this.isFrozenCell(endCol, endRow);\n let width = this.getColsWidth(startCol, endCol);\n if (isFrozenStartCell && isFrozenStartCell.col) {\n const scrollLeft = this.scrollLeft;\n if (!isFrozenEndCell || !isFrozenEndCell.col) {\n width -= scrollLeft;\n width = Math.max(width, this.getColsWidth(startCol, this.frozenColCount - 1));\n }\n }\n return width;\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的rect范围\n * @param range\n * @returns\n */\n getCellRangeRect(range: CellRange | CellAddress): Rect {\n if ((<CellRange>range).start) {\n return this.getCellsRect(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n return this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的宽度\n * @param range\n * @returns\n */\n getCellRangeRectWidth(range: CellRange | CellAddress): number {\n if ((<CellRange>range).start) {\n return this.getCellsRectWidth(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n return this.getCellsRectWidth(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /** 判断某个单元格个是否在冻结行或冻结列中 */\n isFrozenCell(\n col: number,\n row: number\n ): {\n row: boolean;\n col: boolean;\n } | null {\n const isFrozenRow = this.isFrozenRow(row) || this.isBottomFrozenRow(row);\n const isFrozenCol = this.isFrozenColumn(col) || this.isRightFrozenColumn(col);\n if (isFrozenRow || isFrozenCol) {\n return {\n row: isFrozenRow,\n col: isFrozenCol\n };\n }\n return null;\n }\n /**\n * 根据y值计算所在行\n * @param absoluteY\n * @returns\n */\n getRowAt(absoluteY: number): { top: number; row: number; bottom: number; height: number } {\n const frozen = _getTargetFrozenRowAt(this, absoluteY);\n if (frozen) {\n return frozen;\n }\n let row = this.getTargetRowAt(absoluteY);\n if (!row) {\n row = {\n top: -1,\n row: -1,\n bottom: -1,\n height: -1\n };\n }\n return row;\n }\n /**\n * 根据x值计算所在列\n * @param absoluteX\n * @returns\n */\n getColAt(absoluteX: number): { left: number; col: number; right: number; width: number } {\n const frozen = _getTargetFrozenColAt(this, absoluteX);\n if (frozen) {\n return frozen;\n }\n let col = this.getTargetColAt(absoluteX);\n if (!col) {\n col = {\n left: -1,\n col: -1,\n right: -1,\n width: 1\n };\n }\n return col;\n }\n /**\n * 根据坐标值获取行列位置,index和rect范围\n * @param absoluteX\n * @param absoluteY\n * @returns\n */\n getCellAt(absoluteX: number, absoluteY: number): CellAddress {\n const rowInfo = this.getRowAt(absoluteY);\n const { row, top, bottom, height } = rowInfo;\n const colInfo = this.getColAt(absoluteX);\n const { col, left, right, width } = colInfo;\n const rect = {\n left,\n right,\n top,\n bottom,\n width,\n height\n };\n return {\n row,\n col,\n rect\n };\n }\n /**\n * 检查行列号是否正确\n * @param col\n * @param row\n * @returns\n */\n _checkRowCol(col: number, row: number) {\n if (col >= 0 && col < this.colCount && row >= 0 && row < this.rowCount) {\n return true;\n }\n return false;\n }\n /**\n * 指定的行列如果在可视范围内,则不进行逻辑处理;如果不在可视范围需要滚动一定距离能将其显示出来\n * @param {number} col The column index.\n * @param {number} row The row index\n * @return {void}\n */\n _makeVisibleCell(col: number, row: number): void {\n if (this._checkRowCol(col, row)) {\n const isFrozenCell = this.isFrozenCell(col, row);\n if (isFrozenCell && isFrozenCell.col && isFrozenCell.row) {\n return;\n }\n const rect = this.getCellRect(col, row);\n const visibleRect = _getScrollableVisibleRect(this);\n if (visibleRect.contains(rect)) {\n return;\n }\n if (!isFrozenCell || !isFrozenCell.col) {\n if (this.getColsWidth(0, this.frozenColCount - 1) + rect.width > this.canvas.width) {\n // do nothing\n // 防止点击左右跳动\n } else if (rect.left < visibleRect.left) {\n this.scrollLeft -= visibleRect.left - rect.left;\n } else if (visibleRect.right < rect.right) {\n this.scrollLeft -= visibleRect.right - rect.right;\n }\n }\n if (!isFrozenCell || !isFrozenCell.row) {\n if (this.getRowsHeight(0, this.frozenRowCount - 1) + rect.height > this.canvas.height) {\n // do nothing\n } else if (rect.top < visibleRect.top) {\n this.scrollTop -= visibleRect.top - rect.top;\n } else if (visibleRect.bottom < rect.bottom) {\n this.scrollTop -= visibleRect.bottom - rect.bottom;\n }\n }\n }\n }\n\n /**\n * 重绘表格(同步绘制)\n */\n render(): void {\n this.scenegraph.renderSceneGraph();\n }\n /**\n * 异步重绘表格\n */\n renderAsync(): Promise<void> {\n this.scenegraph.updateNextFrame();\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve();\n }, 0);\n });\n }\n /**\n * 转换成视觉相对table左上角的坐标 如滚动超出表格上方 y将为负值\n * @param absoluteRect\n * @returns\n */\n _toRelativeRect(absoluteRect: Rect): Rect {\n const rect = absoluteRect.copy();\n const visibleRect = this.getVisibleRect();\n rect.offsetLeft(this.tableX - visibleRect.left);\n rect.offsetTop(this.tableY - visibleRect.top);\n return rect;\n }\n\n /**\n * 想象一张可以任意大的表格,呈现在我们眼前的只是其中一部分,那这个部分怎么来描述。\n * 如有滚动情况 scrollLeft为100,也就是往右滚动了100(左侧隐藏100)。_getVisibleRect获取到的Rect{_left: 100, _top: 0, _width: 1460, _height: 685}\n * @param table\n * @returns\n */\n getVisibleRect(): Rect {\n const { scrollTop, scrollLeft } = this;\n const width = this.tableNoFrameWidth;\n const height = this.tableNoFrameHeight;\n return new Rect(scrollLeft, scrollTop, width, height);\n }\n /**\n * 获取网格中完全可见的可滚动行数。不包括表头及冻结的行\n * @returns {number}\n */\n get visibleRowCount(): number {\n const { frozenRowCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleTop =\n frozenRowCount > 0 ? visibleRect.top + this.getRowsHeight(0, frozenRowCount - 1) : visibleRect.top;\n\n const initRow = this.getTargetRowAt(visibleTop);\n if (!initRow) {\n return 0;\n }\n const startRow = Math.max(initRow.top >= visibleTop ? initRow.row : initRow.row + 1, frozenRowCount);\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let count = 0;\n const { rowCount } = this;\n for (let row = startRow; row < rowCount; row++) {\n const height = this.getRowHeight(row);\n const bottom = absoluteTop + height;\n if (visibleRect.bottom < bottom) {\n break;\n }\n count++;\n absoluteTop = bottom;\n }\n return count;\n }\n /** 获取表格body部分的显示单元格范围 */\n getBodyVisibleCellRange() {\n const { scrollTop, scrollLeft } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const frozenColsWidth = this.getFrozenColsWidth();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row\n : this.rowCount - 1;\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col\n : this.colCount - 1;\n if (colEnd < 0 || rowEnd < 0) {\n return null;\n }\n return { rowStart, colStart, rowEnd, colEnd };\n }\n /** 获取表格body部分的显示行号范围 */\n getBodyVisibleRowRange() {\n const { scrollTop } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row\n : this.rowCount - 1;\n if (rowEnd < 0) {\n return null;\n }\n return { rowStart, rowEnd };\n }\n /** 获取表格body部分的显示列号范围 */\n getBodyVisibleColRange() {\n const { scrollLeft } = this;\n const frozenColsWidth = this.getFrozenColsWidth();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);\n\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col\n : this.colCount - 1;\n if (colEnd < 0) {\n return null;\n }\n return { colStart, colEnd };\n }\n /**\n * 获取表格中完全可见的可滚动列数。不包括表头及冻结的列\n * @returns {number}\n */\n get visibleColCount(): number {\n const { frozenColCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleLeft =\n frozenColCount > 0 ? visibleRect.left + this.getColsWidth(0, frozenColCount - 1) : visibleRect.left;\n\n const initCol = this.getTargetColAt(visibleLeft);\n if (!initCol) {\n return 0;\n }\n const startCol = Math.max(initCol.left >= visibleLeft ? initCol.col : initCol.col + 1, frozenColCount);\n let absoluteLeft = this.getColsWidth(0, startCol - 1);\n let count = 0;\n const { colCount } = this;\n for (let col = startCol; col < colCount; col++) {\n const width = this.getColWidth(col);\n const right = absoluteLeft + width;\n if (visibleRect.right < right) {\n break;\n }\n count++;\n absoluteLeft = right;\n }\n return count;\n }\n\n get scrollTop(): number {\n return this.stateManager.scroll.verticalBarPos;\n }\n set scrollTop(scrollTop: number) {\n this.stateManager.setScrollTop(scrollTop);\n }\n\n get scrollLeft(): number {\n return this.stateManager.scroll.horizontalBarPos;\n }\n set scrollLeft(scrollLeft: number) {\n this.stateManager.setScrollLeft(scrollLeft);\n }\n\n getScrollLeft() {\n return this.scrollLeft;\n }\n getScrollTop() {\n return this.scrollTop;\n }\n setScrollLeft(num: number) {\n this.scrollLeft = Math.ceil(num);\n }\n setScrollTop(num: number) {\n this.scrollTop = Math.ceil(num);\n }\n /**\n * 获取有省略文字的的单元格文本内容\n * cellTextOverflows存储了无法显示全文本的value,供toolTip使用\n * @param {number} col column index.\n * @param {number} row row index\n * @return {string | null}\n */\n getCellOverflowText(col: number, row: number): string | null {\n return this.scenegraph.getCellOverflowText(col, row);\n }\n /**\n * 添加析构逻辑\n * @param releaseObj\n */\n addReleaseObj(releaseObj: { release: () => void }): void {\n if (!releaseObj || !releaseObj.release || typeof releaseObj.release !== 'function') {\n throw new Error('not releaseObj!');\n }\n const releaseList = (this.internalProps.releaseList = this.internalProps.releaseList || []);\n releaseList.push(releaseObj);\n }\n private dispose() {\n this.release();\n }\n /**\n * Dispose the table instance.\n * @returns {void}\n */\n release(): void {\n const internalProps = this.internalProps;\n internalProps.tooltipHandler?.release?.();\n internalProps.menuHandler?.release?.();\n IconCache.clearAll();\n\n super.release?.();\n internalProps.handler?.release?.();\n // internalProps.scrollable?.release?.();\n internalProps.focusControl?.release?.();\n internalProps.legends?.release();\n internalProps.title?.release();\n internalProps.layoutMap.release();\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n\n this.scenegraph.stage.release();\n this.scenegraph.proxy.release();\n\n const { parentElement } = internalProps.element;\n if (parentElement) {\n parentElement.removeChild(internalProps.element);\n }\n\n this.isReleased = true;\n }\n\n fireListeners<TYPE extends keyof TableEventHandlersEventArgumentMap>(\n type: TYPE,\n event: TableEventHandlersEventArgumentMap[TYPE]\n ): TableEventHandlersReturnMap[TYPE][] {\n return super.fireListeners(type, event);\n }\n\n /**\n * 更新options 目前只支持全量更新\n * @param options\n */\n updateOption(options: BaseTableConstructorOptions) {\n (this.options as BaseTable['options']) = options;\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n // frozenRowCount = 0,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth = 80,\n keyboardOptions,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n dragHeaderMode,\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n pixelRatio,\n widthMode,\n heightMode,\n autoFillWidth,\n autoFillHeight,\n customRender,\n renderChartAsync,\n renderChartAsyncBatchCount,\n overscrollBehavior,\n limitMinWidth\n } = options;\n if (pixelRatio && pixelRatio !== this.internalProps.pixelRatio) {\n this.internalProps.pixelRatio = pixelRatio;\n }\n // 更新padding\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n\n // 更新hover/click状态\n\n // 更新基础组件显示状态\n // (showHeader!=undefined) &&(this.showHeader = showHeader);\n // (showFrozenIcon!=undefined) &&(this.showFrozenIcon = showFrozenIcon);\n // (showSort!=undefined) &&(this.showSort = showSort);\n // style.initDocument(scrollBar);\n // this.showHeader = typeof showHeader === 'boolean' ? showHeader : true;\n // this.scrollBar = typeof scrollBar === 'boolean' ? scrollBar : true;\n this.showFrozenIcon = typeof showFrozenIcon === 'boolean' ? showFrozenIcon : true;\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n\n this.widthMode = widthMode ?? 'standard';\n this.heightMode = heightMode ?? 'standard';\n this.autoFillWidth = autoFillWidth ?? false;\n this.autoFillHeight = autoFillHeight ?? false;\n this.customRender = customRender;\n // 更新protectedSpace\n const internalProps: IBaseTableProtected = this.internalProps;\n if (Env.mode !== 'node') {\n updateRootElementPadding(internalProps.element, this.padding);\n }\n // internalProps.rowCount = rowCount;\n // internalProps.colCount = colCount;\n internalProps.frozenColCount = frozenColCount;\n // internalProps.frozenRowCount = frozenRowCount;\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight;\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n internalProps.keyboardOptions = keyboardOptions;\n\n internalProps.columnResizeMode = columnResizeMode;\n internalProps.dragHeaderMode = dragHeaderMode;\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n internalProps.cellTextOverflows = {};\n internalProps._rowHeightsMap = new NumberMap();\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n\n internalProps._widthResizedColMap = new Set();\n\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n this.scenegraph.updateStageBackground();\n // this._updateSize();\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n //是否统一设置为多行文本\n internalProps.autoWrapText = options.autoWrapText;\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? internalProps.colCount;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n this._vDataSet = new DataSet();\n internalProps.legends?.release();\n internalProps.title?.release();\n internalProps.layoutMap.release();\n this.scenegraph.clearCells();\n this.stateManager.updateOptionSetState();\n\n this._updateSize();\n // this.stateManager = new StateManager(this);\n // this.eventManager = new EventManager(this);\n this.eventManager.updateEventBinder();\n if (options.legends) {\n internalProps.legends = createLegend(options.legends, this);\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n // if (options.title) {\n // internalProps.title = new Title(options.title, this);\n // this.scenegraph.tableGroup.setAttributes({\n // x: this.tableX,\n // y: this.tableY\n // });\n // }\n internalProps.tooltip = Object.assign(\n {\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html' && !internalProps.tooltipHandler) {\n internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine);\n }\n\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n if (internalProps.menu.renderMode === 'html' && !internalProps.menuHandler) {\n internalProps.menuHandler = new MenuHandler(this);\n }\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.clearColWidthCache();\n this.clearRowHeightCache();\n }\n /**\n * 重新创建场景树并重新渲染\n */\n renderWithRecreateCells() {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.refreshHeader();\n this.scenegraph.clearCells();\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n /**\n * 获取固定行总高\n * @returns\n */\n getFrozenRowsHeight(): number {\n const height = this.getRowsHeight(0, this.frozenRowCount - 1);\n return height;\n }\n /**\n * 获取固定列总宽\n * @returns\n */\n getFrozenColsWidth(): number {\n const w = this.getColsWidth(0, this.frozenColCount - 1);\n return w;\n }\n /**\n * 获取底部冻结固定列总宽\n * @returns\n */\n getBottomFrozenRowsHeight(): number {\n if (this.bottomFrozenRowCount > 0) {\n const height = this.getRowsHeight(this.rowCount - this.bottomFrozenRowCount, this.rowCount - 1);\n return height;\n }\n return 0;\n }\n /**\n * 获取右侧冻结固定列总宽\n * @returns\n */\n getRightFrozenColsWidth(): number {\n if (this.rightFrozenColCount > 0) {\n const width = this.getColsWidth(this.colCount - this.rightFrozenColCount, this.colCount - 1);\n return width;\n }\n return 0;\n }\n /**\n * 获取实际绘制范围的宽高,而非可绘制画布大小\n * @param table\n * @returns\n */\n getDrawRange(): Rect {\n //考虑表格整体边框的问题\n // const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n // const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n const width = Math.min(this.tableNoFrameWidth, this.getAllColsWidth());\n const height = Math.min(this.tableNoFrameHeight, this.getAllRowsHeight());\n // Math.max(lineWidths[3] ?? 0, shadowWidths[3] ?? 0),\n // Math.max(lineWidths[1] ?? 0, shadowWidths[1] ?? 0),\n return new Rect(this.tableX, this.tableY, width, height);\n }\n\n /** @private 将鼠标坐标值 转换成表格坐标系中的坐标位置\n * isAddScroll默认为true 返回的xy 加上了scrollX和scrollY。如滚动后通过该方法计算出的坐标值是未滚动时的坐标\n */\n _getMouseAbstractPoint(\n evt: TouchEvent | MouseEvent | undefined,\n isAddScroll = true\n ): { x: number; y: number; inTable: boolean } {\n const table = this;\n let e: MouseEvent | Touch;\n if (!evt) {\n return { inTable: false, x: undefined, y: undefined };\n }\n if (isTouchEvent(evt)) {\n e = evt.changedTouches[0];\n } else {\n e = evt;\n }\n const clientX = e.clientX || e.pageX + window.scrollX;\n const clientY = e.clientY || e.pageY + window.scrollY;\n const rect = table.internalProps.canvas.getBoundingClientRect();\n let inTable = true;\n if (rect.right <= clientX) {\n inTable = false;\n }\n if (rect.bottom <= clientY) {\n inTable = false;\n }\n\n const currentWidth = rect.width;\n const originWidth = this.canvas.offsetWidth || currentWidth;\n const widthRatio = currentWidth / originWidth;\n\n const currentHeight = rect.height;\n const originHeight = this.canvas.offsetHeight || currentHeight;\n const heightRatio = currentHeight / originHeight;\n\n const x = (clientX - rect.left) / widthRatio + (isAddScroll ? table.scrollLeft : 0);\n const y = (clientY - rect.top) / heightRatio + (isAddScroll ? table.scrollTop : 0);\n return { x, y, inTable };\n }\n getTheme() {\n return this.internalProps.theme;\n }\n\n /**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetColAt(absoluteX: number): { col: number; left: number; right: number; width: number } | null {\n if (absoluteX === 0) {\n return { left: 0, col: 0, right: 0, width: 0 };\n }\n const findBefore = (\n startCol: number,\n startRight: number\n ): {\n left: number;\n col: number;\n right: number;\n width: number;\n } | null => {\n let right = startRight;\n for (let col = startCol; col >= 0; col--) {\n const width = this.getColWidth(col);\n const left = right - width;\n if (Math.round(left) <= Math.round(absoluteX) && Math.round(absoluteX) < Math.round(right)) {\n return {\n left,\n col,\n right,\n width\n };\n }\n right = left;\n }\n return null;\n };\n const findAfter = (\n startCol: number,\n startRight: number\n ): {\n left: number;\n col: number;\n right: number;\n width: number;\n } | null => {\n let left = startRight - this.getColWidth(startCol);\n const { colCount } = this.internalProps;\n for (let col = startCol; col < colCount; col++) {\n const width = this.getColWidth(col);\n const right = left + width;\n if (Math.round(left) <= Math.round(absoluteX) && Math.round(absoluteX) < Math.round(right)) {\n return {\n left,\n col,\n right,\n width\n };\n }\n left = right;\n }\n return null;\n };\n //计算这个位置处是第几行\n const candCol = this.computeTargetColByX(absoluteX);\n const right = this.getColsWidth(0, candCol);\n if (absoluteX >= right) {\n return findAfter(candCol, right);\n }\n return findBefore(candCol, right);\n }\n /**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetRowAt(absoluteY: number): { row: number; top: number; bottom: number; height: number } | null {\n if (absoluteY === 0) {\n return { top: 0, row: 0, bottom: 0, height: 0 };\n }\n\n const findBefore = (\n startRow: number,\n startBottom: number\n ): {\n top: number;\n row: number;\n bottom: number;\n height: number;\n } | null => {\n let bottom = startBottom;\n for (let row = startRow; row >= 0; row--) {\n const height = this.getRowHeight(row);\n const top = bottom - height;\n if (Math.round(top) <= Math.round(absoluteY) && Math.round(absoluteY) < Math.round(bottom)) {\n return {\n top,\n row,\n bottom,\n height\n };\n }\n bottom = top;\n }\n return null;\n };\n const findAfter = (\n startRow: number,\n startBottom: number\n ): {\n top: number;\n row: number;\n bottom: number;\n height: number;\n } | null => {\n let top = startBottom - this.getRowHeight(startRow);\n const { rowCount } = this.internalProps;\n for (let row = startRow; row < rowCount; row++) {\n const height = this.getRowHeight(row);\n const bottom = top + height;\n if (Math.round(top) <= Math.round(absoluteY) && Math.round(absoluteY) < Math.round(bottom)) {\n return {\n top,\n row,\n bottom,\n height\n };\n }\n top = bottom;\n }\n return null;\n };\n // const candRow = Math.min(\n // Math.ceil(absoluteY / this.internalProps.defaultRowHeight),\n // this.rowCount - 1\n // );\n //计算这个位置处是第几行\n const candRow = this.computeTargetRowByY(absoluteY);\n const bottom = this.getRowsHeight(0, candRow);\n if (absoluteY >= bottom) {\n return findAfter(candRow, bottom);\n }\n return findBefore(candRow, bottom);\n }\n /**\n * 根据y值(包括了scroll的)计算所在行\n * @param this\n * @param absoluteY 左边y值,包含了scroll滚动距离\n * @returns\n */\n private computeTargetRowByY(absoluteY: number): number {\n //此方式效率太低,借助缓存,或者大约计算出一个值\n // this.rowHeightsMap.each(0, this.rowCount - 1, (height: number, row: number): boolean | void => {\n // h += height || this.internalProps.defaultRowHeight;\n // if (h > absoluteY) {\n // targetRow = row;\n // return false;\n // }\n // });\n //使用二分法计算出row\n if (this._rowRangeHeightsMap.get(`$0$${this.rowCount - 1}`)) {\n let startRow = 0;\n let endRow = this.rowCount - 1;\n while (endRow - startRow > 1) {\n const midRow = Math.floor((startRow + endRow) / 2);\n if (absoluteY < this._rowRangeHeightsMap.get(`$0$${midRow}`)) {\n endRow = midRow;\n } else if (absoluteY > this._rowRangeHeightsMap.get(`$0$${midRow}`)) {\n startRow = midRow;\n } else {\n return midRow;\n }\n }\n return endRow;\n // if (this._rowRangeHeightsMap.get[`$0$${endRow}`] === absoluteY) return endRow;\n // if (this._rowRangeHeightsMap.get[`$0$${startRow}`] === absoluteY) return startRow;\n }\n //否则使用defaultRowHeight大约计算一个row\n return Math.min(Math.ceil(absoluteY / this.internalProps.defaultRowHeight), this.rowCount - 1);\n }\n /**\n * 根据x值(包括了scroll的)计算所在列 主要借助colRangeWidthsMap缓存来提高计算效率\n * @param this\n * @param absoluteX 左边x值,包含了scroll滚动距离\n * @returns\n */\n private computeTargetColByX(absoluteX: number): number {\n //使用二分法计算出col\n if (this._colRangeWidthsMap.get(`$0$${this.colCount - 1}`)) {\n let startCol = 0;\n let endCol = this.colCount - 1;\n while (endCol - startCol > 1) {\n const midCol = Math.floor((startCol + endCol) / 2);\n if (absoluteX < this._colRangeWidthsMap.get(`$0$${midCol}`)) {\n endCol = midCol;\n } else if (absoluteX > this._colRangeWidthsMap.get(`$0$${midCol}`)) {\n startCol = midCol;\n } else {\n return midCol;\n }\n }\n return endCol;\n }\n //否则使用defaultColWidth大约计算一个col\n return Math.min(Math.ceil(absoluteX / this.internalProps.defaultColWidth), this.colCount - 1);\n }\n /**\n * 清除选中单元格\n */\n clearSelected() {\n this.stateManager.updateSelectPos(-1, -1);\n }\n /**\n * 选中单元格 和鼠标选中单元格效果一致\n * @param col\n * @param row\n */\n selectCell(col: number, row: number) {\n this.stateManager.updateSelectPos(col, row);\n this.stateManager.endSelectCells();\n }\n /**\n * 选中单元格区域,可设置多个区域同时选中\n * @param cellRanges: CellRange[]\n */\n selectCells(cellRanges: CellRange[]) {\n const { scrollLeft, scrollTop } = this;\n cellRanges.forEach((cellRange: CellRange, index: number) => {\n if (cellRange.start.col === cellRange.end.col && cellRange.start.row === cellRange.end.row) {\n this.stateManager.updateSelectPos(cellRange.start.col, cellRange.start.row, false, index >= 1);\n } else {\n this.stateManager.updateSelectPos(cellRange.start.col, cellRange.start.row, false, index >= 1);\n this.stateManager.updateInteractionState(InteractionState.grabing);\n this.stateManager.updateSelectPos(cellRange.end.col, cellRange.end.row, false, index >= 1);\n }\n this.stateManager.endSelectCells(false);\n this.stateManager.updateInteractionState(InteractionState.default);\n });\n // 选择后 会自动滚动到所选区域最后一行一列的位置 这里再设置回滚动前位置\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n abstract isListTable(): boolean;\n abstract isPivotTable(): boolean;\n abstract isPivotChart(): boolean;\n\n protected abstract _getSortFuncFromHeaderOption(\n columns: ColumnsDefine | undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: string) => 0 | 1 | -1) | undefined;\n abstract setRecords(records: Array<any>, sort?: SortState | SortState[]): void;\n abstract refreshHeader(): void;\n abstract refreshRowColCount(): void;\n abstract getHierarchyState(col: number, row: number): HierarchyState | null;\n abstract toggleHierarchyState(col: number, row: number): void;\n abstract _hasHierarchyTreeHeader(): boolean;\n abstract getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo;\n abstract moveHeaderPosition(source: CellAddress, target: CellAddress): boolean;\n /** @private */\n // abstract getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData;\n abstract getRecordShowIndexByCell(col: number, row: number): number;\n abstract getCellOriginRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellRawRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellValue(col: number, row: number): FieldData;\n abstract getCellOriginValue(col: number, row: number): FieldData;\n abstract getCellRawValue(col: number, row: number): FieldData;\n\n abstract getTableIndexByRecordIndex(recordIndex: number): number;\n abstract getTableIndexByField(field: FieldDef): number;\n abstract getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress;\n /**\n * 更新页码\n * @param pagination 要修改页码的信息\n */\n abstract updatePagination(pagination: IPagination): void;\n get allowFrozenColCount(): number {\n return this.internalProps.allowFrozenColCount;\n }\n\n /**\n * Get the number of cols that are row header.\n */\n get rowHeaderLevelCount(): number {\n return this.internalProps.layoutMap.rowHeaderLevelCount;\n }\n /**\n * Get the number of rows that are col header.\n */\n get columnHeaderLevelCount(): number {\n return this.internalProps.layoutMap.columnHeaderLevelCount;\n }\n /**\n * Get the records.\n */\n get records(): any {\n return this.internalProps.records;\n }\n /**\n * Get the data source.\n */\n get dataSource(): DataSource | CachedDataSource {\n return this.internalProps.dataSource;\n }\n /**\n * Set the data source from given\n */\n set dataSource(dataSource: DataSource | CachedDataSource) {\n // 清空单元格内容\n this.scenegraph.clearCells();\n _setDataSource(this, dataSource);\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n /**\n * Get the autoWrapText.\n */\n get autoWrapText(): boolean {\n return this.internalProps.autoWrapText;\n }\n /**\n * Set the autoWrapText\n */\n set autoWrapText(autoWrapText: boolean) {\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n }\n updateAutoWrapText(autoWrapText: boolean) {\n if (this.internalProps.autoWrapText === autoWrapText) {\n return;\n }\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n // if (this.heightMode === 'autoHeight' || this.heightMode === 'adaptive') {\n this.scenegraph.clearCells();\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.scenegraph.createSceneGraph();\n this.render();\n // }\n }\n\n /**\n * 获取当前使用的主题\n */\n get theme(): TableTheme {\n return this.internalProps.theme;\n }\n set theme(theme: TableTheme) {\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.options.theme = theme;\n }\n /**\n * 设置主题\n */\n updateTheme(theme: ITableThemeDefine) {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.options.theme = theme;\n this.scenegraph.updateStageBackground();\n this.scenegraph.clearCells();\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getBodyField(col: number, row: number): FieldDef | undefined {\n return this.internalProps.layoutMap.getBody(col, row).field;\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getBodyColumnDefine(col: number, row: number): ColumnDefine {\n // TODO: 暂时修复透视表报错\n const body = this.internalProps.layoutMap.getBody(col, row);\n return body?.define;\n }\n\n getBodyColumnType(col: number, row: number): ColumnTypeOption {\n const cellType = this.internalProps.layoutMap.getBody(col, row).cellType;\n return getProp('cellType', { cellType }, col, row, this);\n }\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getHeaderField(col: number, row: number): FieldDef {\n return this.internalProps.layoutMap.getHeaderField(col, row);\n }\n getHeaderFieldKey(col: number, row: number): FieldDef {\n return this.internalProps.layoutMap.getHeaderFieldKey(col, row);\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getHeaderDefine(col: number, row: number): ColumnDefine {\n const hd = this.internalProps.layoutMap.getHeader(col, row);\n return hd?.define;\n }\n getCellLocation(col: number, row: number): CellLocation {\n const hdType = this.internalProps.layoutMap.getCellLocation(col, row);\n return hdType;\n }\n /**\n * 获取行列表头的路径\n * @param col\n * @param row\n * @returns 返回结构{\n colHeaderPaths?: any[];\n rowHeaderPaths?: any[];\n}\n */\n getCellHeaderPaths(col: number, row: number): ICellHeaderPaths {\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n return cellHeaderPaths;\n }\n /**\n * Get the headers define of the given column.\n * @param {number} col The column index.\n * @return {*} The array of header define object.\n */\n getHeadersDefine(col: number, row: number): ColumnDefine[] {\n const headers = [];\n while (true) {\n const header = this.getHeaderDefine(col, row);\n if (header && (header.field || header.columns)) {\n headers.push(header);\n } else {\n break;\n }\n\n row++;\n }\n\n return headers;\n }\n _getHeaderLayoutMap(col: number, row: number): HeaderData {\n return this.internalProps.layoutMap.getHeader(col, row);\n }\n _getBodyLayoutMap(col: number, row: number): ColumnData | IndicatorData {\n return this.internalProps.layoutMap.getBody(col, row);\n }\n /** 获取绘制画布的canvas上下文 */\n getContext(): CanvasRenderingContext2D {\n return this.internalProps.context;\n }\n /**\n * 根据行列号获取整条数据记录\n * @param {number} col col index.\n * @param {number} row row index.\n * @return {object} record.\n */\n getRecordByCell(col: number, row: number): MaybePromiseOrUndefined {\n if (this.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n return this.internalProps.dataSource?.get(this.getRecordShowIndexByCell(col, row));\n }\n /** @deprecated 请使用getRecordByCell */\n getRecordByRowCol(col: number, row: number) {\n return this.getRecordByCell(col, row);\n }\n\n /**\n * 根据数据的索引获取应该显示在body的第几行\n * @param {number} index The record index.\n */\n getRecordStartRowByRecordIndex(index: number): number {\n return this.internalProps.layoutMap.getRecordStartRowByRecordIndex(index);\n }\n /**\n * 根据给定的排序状态 获取对应的表格单元格信息\n * @param sortState\n * @returns\n */\n _getHeaderCellBySortState(sortState: SortState): CellAddress | undefined {\n const { layoutMap } = this.internalProps;\n let hd;\n if (sortState.fieldKey) {\n hd = layoutMap.headerObjects.find((col: any) => col && col.fieldKey === sortState.fieldKey);\n } else {\n hd = layoutMap.headerObjects.find((col: any) => col && col.field === sortState.field);\n }\n if (hd) {\n const headercell = layoutMap.getHeaderCellAdressById(hd.id as number);\n return headercell;\n }\n return undefined;\n }\n\n /**\n * 获取给定单元格的范围 如果是合并单元格,则返回合并单元格的范围\n */\n getCellRange(col: number, row: number): CellRange {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (customMerge && customMerge.range && customMerge.text) {\n return customMerge.range;\n }\n }\n return this.internalProps.layoutMap.getCellRange(col, row);\n }\n\n getCustomMerge(col: number, row: number) {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (customMerge && customMerge.range && customMerge.text) {\n if (customMerge.style) {\n const styleClass = this.internalProps.bodyHelper.getStyleClass('text');\n const style = customMerge.style;\n const fullStyle = <FullExtendStyle>columnStyleContents.of(\n style,\n this.theme.bodyStyle,\n {\n col,\n row,\n table: this,\n value: customMerge.text,\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText\n );\n customMerge.style = fullStyle;\n }\n return customMerge;\n }\n }\n return undefined;\n }\n\n /**\n * 判断两个单元格是否是属于同一个合并区域\n * @param col\n * @param row\n * @param targetCol\n * @param targetRow\n * @returns\n */\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n return this.internalProps.layoutMap.isCellRangeEqual(col, row, targetCol, targetRow);\n }\n /**\n * 根据行列号获取布局id\n * @param col\n * @param row\n * @returns\n */\n _getLayoutCellId(col: number, row: number): LayoutObjectId {\n return this.internalProps.layoutMap.getCellId(col, row);\n }\n /**\n * 获取表头的描述信息\n * @param col\n * @param row\n * @returns\n */\n getHeaderDescription(col: number, row: number): string | undefined {\n const field = this._getHeaderLayoutMap(col, row);\n const fieldDef = field?.define;\n const description = fieldDef?.description ?? field?.description;\n if (typeof description === 'function') {\n const arg: CellInfo = {\n col,\n row,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row)\n };\n return description(arg);\n }\n return description;\n }\n\n setDropDownMenuHighlight(cells: DropDownMenuHighlightInfo[]): void {\n this.stateManager.setDropDownMenuHighlight(cells);\n }\n _dropDownMenuIsHighlight(colNow: number, rowNow: number, index: number): boolean {\n return this.stateManager.dropDownMenuIsHighlight(colNow, rowNow, index);\n }\n\n /** 判断单元格是否属于表头部分 */\n isHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap && this.internalProps.layoutMap.isHeader(col, row);\n }\n /** 判断单元格是否属于列表头部分 */\n isColumnHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isColumnHeader(col, row);\n }\n /** 判断单元格是否属于行表头部分 */\n isRowHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isRowHeader(col, row);\n }\n /** 判断单元格是否属于角表头部分 */\n isCornerHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isCornerHeader(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenColumn(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isLeftFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenColumn(col, row);\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isRightFrozenColumn(col, row);\n }\n\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenRow(col, row);\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isTopFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenRow(col, row);\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isBottomFrozenRow(col, row);\n }\n /** 获取单元格的基本信息 目前主要组织单元格信息给事件传递给用户的参数使用 */\n getCellInfo(col: number, row: number): Omit<MousePointerCellEvent, 'target'> {\n const colDef = this.isHeader(col, row) ? this.getHeaderDefine(col, row) : this.getBodyColumnDefine(col, row);\n return {\n col,\n row,\n field: this.getHeaderField(col, row),\n cellHeaderPaths: this.internalProps.layoutMap.getCellHeaderPaths(col, row),\n title: colDef?.title,\n cellType: colDef?.cellType ? (typeof colDef.cellType === 'string' ? colDef.cellType : 'progressbar') : 'text',\n originData: this.getCellOriginRecord(col, row),\n cellRange: this.getCellRangeRelativeRect({ col, row }),\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n scaleRatio: this.canvas.getBoundingClientRect().width / this.canvas.offsetWidth\n };\n }\n /** @private */\n _hasField(field: FieldDef, col: number, row: number): boolean {\n if (field == null) {\n return false;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return false;\n }\n const index = table.getRecordShowIndexByCell(col, row);\n return table.internalProps.dataSource.hasField(index, field);\n }\n /**\n * 获取单元格的样式 内部逻辑使用 获取到的样式并不是计算后的\n * @param col\n * @param row\n * @returns\n */\n _getCellStyle(col: number, row: number): FullExtendStyle {\n const { layoutMap } = this.internalProps;\n const isHeader = layoutMap.isHeader(col, row);\n if (isHeader) {\n let cacheStyle = this.headerStyleCache.get(`${col}-${row}`);\n if (cacheStyle) {\n return cacheStyle;\n }\n const hd = layoutMap.getHeader(col, row);\n\n let paddingForAxis;\n if (this.isPivotChart() && isTopOrBottomAxis(col, row, layoutMap as PivotHeaderLayoutMap)) {\n // get chart padding for axis cell\n const chartColumn = layoutMap.getBody(col, this.rowHeaderLevelCount);\n const padding = (chartColumn.style as any)?.padding ?? this.theme.bodyStyle.padding;\n paddingForAxis = padding;\n } else if (this.isPivotChart() && isLeftOrRightAxis(col, row, layoutMap as PivotHeaderLayoutMap)) {\n // get chart padding for axis cell\n const chartColumn = layoutMap.getBody(this.columnHeaderLevelCount, row);\n const padding = (chartColumn.style as any)?.padding ?? this.theme.bodyStyle.padding;\n paddingForAxis = padding;\n }\n\n if (\n (!hd || hd.isEmpty) &&\n (layoutMap.isLeftBottomCorner(col, row) ||\n layoutMap.isRightBottomCorner(col, row) ||\n layoutMap.isCornerHeader(col, row) ||\n layoutMap.isRightTopCorner(col, row))\n ) {\n return EMPTY_STYLE;\n }\n\n const styleClass = this.internalProps.headerHelper.getStyleClass(hd?.headerType || 'text');\n if (layoutMap.isBottomFrozenRow(col, row) && this.theme.bottomFrozenStyle) {\n cacheStyle = <FullExtendStyle>headerStyleContents.of(\n paddingForAxis ? { padding: paddingForAxis } : {},\n this.theme.bottomFrozenStyle,\n {\n col,\n row,\n table: this as BaseTableAPI,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText\n );\n } else if (layoutMap.isRightFrozenColumn(col, row) && this.theme.rightFrozenStyle) {\n cacheStyle = <FullExtendStyle>headerStyleContents.of(\n paddingForAxis ? { padding: paddingForAxis } : {},\n this.theme.rightFrozenStyle,\n {\n col,\n row,\n table: this as BaseTableAPI,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText\n );\n } else {\n // const styleClass = hd.headerType.StyleClass; //BaseHeader文件\n // const { style } = hd;\n const style = hd?.style || {};\n if (paddingForAxis) {\n (style as any).padding = paddingForAxis;\n }\n cacheStyle = <FullExtendStyle>headerStyleContents.of(\n style,\n layoutMap.isColumnHeader(col, row) || layoutMap.isBottomFrozenRow(col, row)\n ? this.theme.headerStyle\n : layoutMap.isRowHeader(col, row) || layoutMap.isRightFrozenColumn(col, row)\n ? this.theme.rowHeaderStyle\n : this.theme.cornerHeaderStyle,\n {\n col,\n row,\n table: this as BaseTableAPI,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText\n );\n }\n this.headerStyleCache.set(`${col}-${row}`, cacheStyle);\n return cacheStyle;\n }\n let cacheKey;\n //如果是主体部分,获取相应的style\n if (\n (this.isListTable() && !(this as any).transpose) ||\n (this.isPivotTable() && (this.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol)\n ) {\n cacheKey = col;\n } else {\n cacheKey = row;\n }\n let cacheStyle = this.bodyStyleCache.get(cacheKey);\n if (cacheStyle) {\n return cacheStyle;\n }\n const column = layoutMap.getBody(col, row);\n // const styleClass = column?.cellType?.StyleClass; //BaseColumn文件\n const styleClass = this.internalProps.bodyHelper.getStyleClass(column.cellType);\n const style = column?.style;\n cacheStyle = <FullExtendStyle>columnStyleContents.of(\n style,\n this.theme.bodyStyle,\n {\n col,\n row,\n table: this,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText\n );\n if (!isFunction(style)) {\n this.bodyStyleCache.set(cacheKey, cacheStyle);\n }\n return cacheStyle;\n }\n clearCellStyleCache() {\n this.headerStyleCache.clear();\n }\n /**\n * 清除行高度缓存对象\n */\n clearRowHeightCache() {\n this.internalProps._rowHeightsMap.clear();\n this._clearRowRangeHeightsMap();\n }\n /**\n * 清除列宽度缓存对象\n */\n clearColWidthCache() {\n this.internalProps._colWidthsMap.clear();\n this._clearColRangeWidthsMap();\n }\n /**\n * 该列是否可调整列宽\n * @param col\n * @returns\n */\n _canResizeColumn(col: number, row: number): boolean {\n if (!(col >= 0 && row >= 0)) {\n return false;\n }\n if (this.isCellRangeEqual(col, row, col + 1, row)) {\n return false;\n }\n\n if (this.internalProps.columnResizeMode === 'none') {\n return false;\n } else if (this.internalProps.columnResizeMode === 'header') {\n // 判断表头\n if (!this.isHeader(col, row)) {\n return false;\n }\n } else if (this.internalProps.columnResizeMode === 'body') {\n // 判断内容\n if (this.isHeader(col, row)) {\n return false;\n }\n }\n\n // if (this.rightFrozenColCount && col >= this.colCount - this.rightFrozenColCount - 1) {\n // // right frozen columns can not resize temply\n // return false;\n // }\n\n const limit = this.colWidthsLimit[col];\n if (!limit || !limit.min || !limit.max) {\n return true;\n }\n return limit.max !== limit.min;\n }\n /**\n * 选中位置是否可拖拽调整位置\n * @param col\n * @returns\n */\n _canDragHeaderPosition(col: number, row: number): boolean {\n if (this.isHeader(col, row) && this.stateManager.isSelected(col, row)) {\n const selectRange = this.stateManager.select.ranges[0];\n //判断是否整行或者整列选中\n if (this.isColumnHeader(col, row)) {\n if (selectRange.end.row !== this.rowCount - 1) {\n return false;\n }\n } else if (this.isRowHeader(col, row)) {\n if (selectRange.end.col !== this.colCount - 1) {\n return false;\n }\n } else {\n return false;\n }\n const define = this.getHeaderDefine(col, row);\n if (!define) {\n return false;\n }\n if (define.dragHeader === undefined) {\n if (this.internalProps.dragHeaderMode === 'all') {\n return true;\n } else if (this.internalProps.dragHeaderMode === 'column') {\n if (this.isColumnHeader(col, row)) {\n return true;\n }\n } else if (this.internalProps.dragHeaderMode === 'row') {\n if (this.isRowHeader(col, row)) {\n return true;\n }\n }\n return false;\n }\n return define.dragHeader;\n }\n return false;\n }\n\n /**\n * 获取某个单元格所配置的所有图标\n */\n getCellIcons(col: number, row: number): ColumnIconOption[] {\n let icons;\n if (this.isHeader(col, row)) {\n icons = this.internalProps.headerHelper.getIcons(col, row);\n } else {\n const cellValue = this.getCellValue(col, row);\n const dataValue = this.getCellOriginValue(col, row);\n const ctx = this.internalProps.context;\n icons = this.internalProps.bodyHelper.getIcons(col, row, cellValue, dataValue, ctx);\n }\n return icons;\n }\n\n /** 指定某个单元格显示下拉菜单【内容可以自定义为menu数组或者dom】 */\n showDropDownMenu(col: number, row: number, dropDownMenuOptions?: DropDownMenuOptions) {\n let menuType: MenuInstanceType = 'dropdown-menu';\n if (dropDownMenuOptions) {\n menuType = Array.isArray(dropDownMenuOptions.content) ? 'dropdown-menu' : 'container';\n }\n if (this.internalProps.menu.renderMode === 'html') {\n this.stateManager.menu.isShow = true;\n this.internalProps.menuHandler._bindToCell(col, row, menuType, dropDownMenuOptions);\n }\n // this.stateManager.showDropDownMenu(col,row,) //最好和这个保持一致\n }\n /** 暂时只支持全局设置了tooltip.renderMode='html',调用该接口才有效 */\n showTooltip(col: number, row: number, tooltipOptions?: TooltipOptions) {\n // this.drawHoverIconTooltip();\n if (this.internalProps.tooltip.renderMode === 'html') {\n this.internalProps.tooltipHandler._bindToCell(col, row, tooltipOptions);\n }\n }\n /**\n * 获取某个单元格的样式 供业务方调用\n * @param col\n * @param row\n */\n getCellStyle(col: number, row: number): CellStyle {\n const actStyle = this._getCellStyle(col, row);\n\n const theme = getStyleTheme(actStyle, this, col, row, getProp).theme;\n\n const { autoWrapText, lineClamp, textOverflow } = actStyle;\n\n return {\n textAlign: theme.text.textAlign,\n textBaseline: theme.text.textBaseline,\n bgColor: isBoolean(theme.group.fill)\n ? getProp('bgColor', actStyle, col, row, this)\n : (theme.group.fill as string),\n color: isBoolean(theme.text.fill) ? getProp('color', actStyle, col, row, this) : (theme.text.fill as string),\n fontFamily: theme.text.fontFamily,\n fontSize: theme.text.fontSize,\n fontWeight: theme.text.fontWeight,\n fontVariant: theme.text.fontVariant,\n fontStyle: theme.text.fontStyle,\n lineHeight: theme.text.lineHeight as number,\n autoWrapText: autoWrapText ?? false,\n lineClamp: lineClamp ?? 'auto',\n textOverflow,\n borderColor: isBoolean(theme.group.stroke)\n ? getProp('borderColor', actStyle, col, row, this)\n : (theme.group.stroke as string | string[]),\n borderLineWidth: theme.group.lineWidth,\n borderLineDash: theme.group.lineDash,\n underline: !!theme.text.underline,\n // underlineColor: theme.text.underlineColor,\n // underlineDash: theme.text.underlineDash,\n lineThrough: !!theme.text.lineThrough,\n // lineThroughColor: theme.text.lineThroughColor,\n // lineThroughDash: (theme.text as any).lineThroughDash\n padding: theme._vtable.padding,\n underlineWidth: theme.text.underline,\n lineThroughLineWidth: theme.text.lineThrough\n };\n }\n /**\n * 获取所有body单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllBodyCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: this.columnHeaderLevelCount };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: 0, row: 0 };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有列表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllColumnHeaderCells(): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: 0 };\n const end = { col: this.colCount - 1, row: this.columnHeaderLevelCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有行表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllRowHeaderCells(): CellInfo[][] {\n const start = { col: 0, row: this.columnHeaderLevelCount };\n const end = { col: this.rowHeaderLevelCount - 1, row: this.rowCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 滚动到具体某个单元格位置\n * @param cellAddr 要滚动到的单元格位置\n */\n scrollToCell(cellAddr: { col?: number; row?: number }) {\n const drawRange = this.getDrawRange();\n if (isValid(cellAddr.col) && cellAddr.col >= this.frozenColCount) {\n const frozenWidth = this.getFrozenColsWidth();\n const left = this.getColsWidth(0, cellAddr.col - 1);\n this.scrollLeft = Math.min(left - frozenWidth, this.getAllColsWidth() - drawRange.width);\n }\n if (isValid(cellAddr.row) && cellAddr.row >= this.frozenRowCount) {\n const frozenHeight = this.getFrozenRowsHeight();\n const top = this.getRowsHeight(0, cellAddr.row - 1);\n this.scrollTop = Math.min(top - frozenHeight, this.getAllRowsHeight() - drawRange.height);\n }\n this.render();\n }\n\n /**获取选中区域的内容 作为复制内容 */\n getCopyValue(): string | null {\n if (this.stateManager.select?.ranges?.length > 0) {\n const ranges = this.stateManager.select.ranges;\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n const getCopyCellValue = (col: number, row: number, range?: CellRange): string | Promise<string> | void => {\n const cellRange = this.getCellRange(col, row);\n let copyStartCol = cellRange.start.col;\n let copyStartRow = cellRange.start.row;\n if (range) {\n const rangeMinCol = Math.min(range.start.col, range.end.col);\n const rangeMinRow = Math.min(range.start.row, range.end.row);\n copyStartCol = Math.max(rangeMinCol, cellRange.start.col);\n copyStartRow = Math.max(rangeMinRow, cellRange.start.row);\n }\n\n if (copyStartCol !== col || copyStartRow !== row) {\n return '';\n }\n\n const value = this.getCellValue(col, row);\n return value;\n };\n let copyValue = '';\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const copyCellValue = getCopyCellValue(c, r, range);\n if (typeof Promise !== 'undefined' && copyCellValue instanceof Promise) {\n //无法获取异步数据\n } else {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const strCellValue = `${copyCellValue}`;\n if (/^\\[object .*\\]$/.exec(strCellValue)) {\n //object 对象忽略掉\n } else {\n copyValue += strCellValue;\n }\n }\n if (c < range.end.col || c < maxCol) {\n copyValue += '\\t';\n }\n } else {\n copyValue += '\\t';\n }\n }\n }\n copyValue += '\\n';\n }\n }\n return copyValue;\n }\n return '';\n }\n\n /**获取选中区域的每个单元格详情 */\n getSelectedCellInfos(): CellInfo[][] | null {\n if (!this.stateManager.select?.ranges) {\n return null;\n }\n\n const ranges = this.stateManager.select.ranges;\n if (!ranges.length) {\n return [];\n }\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n\n const cellInfoArray: CellInfo[][] = [];\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n const cellInfoRow: CellInfo[] = [];\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const cellInfo = this.getCellInfo(c, r);\n cellInfoRow.push(cellInfo);\n }\n }\n }\n cellInfoArray.push(cellInfoRow);\n }\n }\n return cellInfoArray;\n }\n /** 计算字体的宽度接口 */\n measureText(text: string, font: { fontSize: number; fontWeight: string | number; fontFamily: string }): ITextSize {\n return textMeasure.measureText(text, font);\n }\n\n /** 获取单元格上定义的自定义渲染配置 */\n getCustomRender(col: number, row: number): ICustomRender {\n let customRender;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customRender = define?.headerCustomRender;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customRender = define?.customRender || this.customRender;\n }\n return customRender;\n }\n /** 获取单元格上定义的自定义布局元素配置 */\n getCustomLayout(col: number, row: number): ICustomLayout {\n let customLayout;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customLayout = define?.headerCustomLayout;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customLayout = define?.customLayout;\n }\n return customLayout;\n }\n\n hasAutoImageColumn() {\n return (this.internalProps.layoutMap.columnObjects as ColumnData[]).find((column: ColumnData) => {\n if (\n (column.cellType === 'image' || typeof column.cellType === 'function') &&\n (column.define as ImageColumnDefine).imageAutoSizing\n ) {\n return true;\n }\n return false;\n });\n }\n /** 获取当前hover单元格的图表实例。这个方法hover实时获取有点缺陷:鼠标hover到单元格上触发了 chart.ts中的activate方法 但此时this.stateManager.hover?.cellPos?.col还是-1 */\n _getActiveChartInstance() {\n // 根据hover的单元格位置 获取单元格实例 拿到chart图元\n const cellGroup = this.scenegraph.getCell(\n this.stateManager.hover?.cellPos?.col,\n this.stateManager.hover?.cellPos?.row\n );\n return cellGroup?.getChildren()?.[0]?.type === 'chart'\n ? (cellGroup.getChildren()[0] as Chart).activeChartInstance\n : null;\n }\n\n /**\n * 判断单元格是否在显示区域\n * @param col\n * @param row\n */\n cellIsInVisualView(col: number, row: number) {\n const drawRange = this.getDrawRange();\n const rect = this.getCellRelativeRect(col, row);\n\n if (col < this.frozenColCount && row < this.frozenRowCount) {\n return true;\n }\n if (\n rect.top >= drawRange.top &&\n rect.bottom <= drawRange.bottom &&\n rect.left >= drawRange.left &&\n rect.right <= drawRange.right\n ) {\n return true;\n }\n return false;\n }\n\n getCustomMergeValue(col: number, row: number): string | undefined {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.getCustomMerge(col, row);\n if (customMerge) {\n const { text } = customMerge;\n return text;\n }\n }\n return undefined;\n }\n\n /**\n * 导出表格中当前可视区域的图片\n * @returns base64图片\n */\n exportImg() {\n const c = this.scenegraph.stage.toCanvas();\n return c.toDataURL();\n }\n\n /**\n * 导出某个单元格图片\n * @returns base64图片\n */\n exportCellImg(col: number, row: number) {\n const isInView = this.cellIsInVisualView(col, row);\n const { scrollTop, scrollLeft } = this;\n if (!isInView) {\n this.scrollToCell({ col, row });\n }\n const cellRect = this.getCellRelativeRect(col, row);\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX,\n cellRect.bottom + this.tableY\n )\n );\n if (!isInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n // return c.toDataURL('image/jpeg', 0.5);\n return c.toDataURL();\n }\n\n /**\n * 导出某一片区域的图片\n * @returns base64图片\n */\n exportCellRangeImg(cellRange: CellRange) {\n const { scrollTop, scrollLeft } = this;\n const minCol = Math.min(cellRange.start.col, cellRange.end.col);\n const minRow = Math.min(cellRange.start.row, cellRange.end.row);\n const maxCol = Math.max(cellRange.start.col, cellRange.end.col);\n const maxRow = Math.max(cellRange.start.row, cellRange.end.row);\n const isInView = this.cellIsInVisualView(minCol, minRow);\n const isMaxCellInView = this.cellIsInVisualView(maxCol, maxRow);\n // 判断如果超出可视区域 做移动\n if (!isInView || !isMaxCellInView) {\n this.scrollToCell({ col: minCol, row: minRow });\n }\n\n const cellRect = this.getCellRangeRelativeRect({\n start: { col: minCol, row: minRow },\n end: { col: maxCol, row: maxRow }\n });\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX,\n cellRect.bottom + this.tableY\n )\n );\n const base64Image = c.toDataURL();\n // 前面做的移动需要再复原\n if (!isInView || !isMaxCellInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n return base64Image;\n }\n\n exportCanvas() {\n const c = this.scenegraph.stage.toCanvas();\n return c;\n }\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer(type: string = 'image/png') {\n if (this.options.mode !== 'node') {\n console.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n this.render();\n const stage = this.scenegraph.stage;\n if (stage) {\n const contentWidth = this.tableX + this.getAllColsWidth();\n const contentHeight = this.tableY + this.getAllRowsHeight();\n if (contentWidth >= this.canvasWidth && contentHeight >= this.canvasHeight) {\n stage.render();\n const buffer = stage.window.getImageBuffer(type);\n return buffer;\n }\n const newCanvas = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(0, 0, Math.min(this.canvasWidth, contentWidth), Math.min(this.canvasHeight, contentHeight))\n );\n const buffer = (newCanvas as any).toBuffer(type);\n return buffer;\n }\n console.error(new ReferenceError(`stage is not defined`));\n\n return null;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/BaseTable.ts"],"names":[],"mappings":"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","file":"BaseTable.js","sourcesContent":["import * as columnStyleContents from '../body-helper/style';\nimport * as headerStyleContents from '../header-helper/style';\nimport { importStyle } from './style';\nimport * as style from '../tools/style';\nimport {\n type CellAddress,\n type CellRange,\n type TableEventHandlersEventArgumentMap,\n type TableEventHandlersReturnMap,\n type TableKeyboardOptions,\n type DropDownMenuHighlightInfo,\n type MenuListItem,\n type WidthModeDef,\n type ICustomRender,\n type ICellHeaderPaths,\n type HeaderData,\n type FullExtendStyle,\n type FieldDef,\n type ColumnTypeOption,\n type SortState,\n type IPagination,\n type ICustomLayout,\n type CellInfo,\n type CellStyle,\n type MenuInstanceType,\n type DropDownMenuOptions,\n type FieldFormat,\n type FieldData,\n type MaybePromiseOrUndefined,\n type MousePointerCellEvent,\n type DropDownMenuEventInfo,\n type HierarchyState,\n type FieldKeyDef,\n type CellLocation,\n type LayoutObjectId,\n type HeightModeDef,\n type ITableThemeDefine,\n InteractionState\n} from '../ts-types';\nimport type { ColumnIconOption } from '../ts-types';\nimport { event, style as utilStyle } from '../tools/helper';\n\nimport { TABLE_EVENT_TYPE } from './TABLE_EVENT_TYPE';\nimport { EventHandler } from '../event/EventHandler';\nimport { EventTarget } from '../event/EventTarget';\nimport { NumberMap } from '../tools/NumberMap';\nimport { Rect } from '../tools/Rect';\nimport type { TableTheme } from '../themes/theme';\nimport { throttle2 } from '../tools/util';\nimport themes from '../themes';\nimport { Env } from '../tools/env';\nimport { Scenegraph } from '../scenegraph/scenegraph';\nimport { StateManager } from '../state/state';\nimport { EventManager } from '../event/event';\nimport { BodyHelper } from '../body-helper/body-helper';\nimport { HeaderHelper } from '../header-helper/header-helper';\nimport type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';\nimport { TooltipHandler } from '../components/tooltip/TooltipHandler';\nimport type { CachedDataSource, DataSource } from '../data';\nimport { AABBBounds, isNumber, isBoolean, isFunction, type ITextSize, isValid } from '@visactor/vutils';\nimport { textMeasure } from '../scenegraph/utils/text-measure';\nimport { getProp } from '../scenegraph/utils/get-prop';\nimport type {\n ColumnData,\n ColumnDefine,\n ColumnsDefine,\n ImageColumnDefine,\n IndicatorData\n} from '../ts-types/list-table/layout-map/api';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { IconCache } from '../plugins/icons';\nimport {\n _applyColWidthLimits,\n _getScrollableVisibleRect,\n _getTargetFrozenColAt,\n _getTargetFrozenRowAt,\n _setDataSource,\n _setRecords,\n _toPxWidth,\n createRootElement,\n getStyleTheme,\n updateRootElementPadding\n} from './tableHelper';\nimport { MenuHandler } from '../components/menu/dom/MenuHandler';\nimport type { BaseTableAPI, BaseTableConstructorOptions, IBaseTableProtected } from '../ts-types/base-table';\nimport { FocusInput } from './FouseInput';\nimport { defaultPixelRatio } from '../tools/pixel-ratio';\nimport { createLegend } from '../components/legend/create-legend';\nimport { DataSet } from '@visactor/vdataset';\nimport { Title } from '../components/title/title';\nimport type { Chart } from '../scenegraph/graphic/chart';\nimport { setBatchRenderChartCount } from '../scenegraph/graphic/contributions/chart-render-helper';\nimport { isLeftOrRightAxis, isTopOrBottomAxis } from '../layout/chart-helper/get-axis-config';\nconst { toBoxArray } = utilStyle;\nconst { isTouchEvent } = event;\nconst rangeReg = /^\\$(\\d+)\\$(\\d+)$/;\nimportStyle();\n\nconst EMPTY_STYLE = {};\nexport abstract class BaseTable extends EventTarget implements BaseTableAPI {\n internalProps: IBaseTableProtected;\n showFrozenIcon = true;\n showSort = true;\n padding: { top: number; left: number; right: number; bottom: number };\n globalDropDownMenu?: MenuListItem[];\n //画布绘制单元格的区域 不包括整体边框frame,所以比canvas的width和height要小一点(canvas的width包括了frame)\n tableNoFrameWidth: number;\n tableNoFrameHeight: number;\n tableX: number;\n tableY: number;\n _widthMode: WidthModeDef;\n _heightMode: HeightModeDef;\n _autoFillWidth: boolean;\n _autoFillHeight: boolean;\n customRender?: ICustomRender;\n\n canvasWidth?: number;\n canvasHeight?: number;\n\n _vDataSet: DataSet;\n scenegraph: Scenegraph;\n stateManager?: StateManager;\n eventManager?: EventManager;\n _pixelRatio: number;\n\n // bottomFrozenRowCount: number = 0;\n // rightFrozenColCount: number = 0;\n\n static get EVENT_TYPE(): typeof TABLE_EVENT_TYPE {\n return TABLE_EVENT_TYPE;\n }\n /**\n * 用户配置的options 只读 勿直接修改\n */\n readonly options: BaseTableConstructorOptions;\n\n version = \"0.16.4-alpha.0\";\n\n pagination?: IPagination | undefined;\n\n /**\n * constructor\n *\n * @constructor\n * @param options Constructor options\n */\n // eslint-disable-next-line default-param-last\n id = `VTable${Date.now()}`;\n\n headerStyleCache: any;\n bodyStyleCache: any;\n container: HTMLElement;\n isReleased: boolean = false;\n\n constructor(container: HTMLElement, options: BaseTableConstructorOptions = {}) {\n super();\n if (!container && options.mode !== 'node') {\n throw new Error(\"vtable's container is undefined\");\n }\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n // frozenRowCount = 0,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth,\n widthMode = 'standard',\n heightMode = 'standard',\n autoFillWidth = false,\n autoFillHeight = false,\n keyboardOptions,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n dragHeaderMode,\n // showHeader,\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n customRender,\n pixelRatio = defaultPixelRatio,\n renderChartAsync,\n renderChartAsyncBatchCount,\n\n mode,\n modeParams,\n canvasWidth,\n canvasHeight,\n overscrollBehavior,\n limitMinWidth\n } = options;\n this.container = container;\n this.options = options;\n this.options.container = container;\n this._widthMode = widthMode;\n this._heightMode = heightMode;\n this._autoFillWidth = autoFillWidth;\n this._autoFillHeight = autoFillHeight;\n this.customRender = customRender;\n this.padding = { top: 0, right: 0, left: 0, bottom: 0 };\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n\n this.tableNoFrameWidth = 0;\n this.tableNoFrameHeight = 0;\n this.canvasWidth = canvasWidth;\n this.canvasHeight = canvasHeight;\n\n const internalProps = (this.internalProps = {} as IBaseTableProtected);\n // style.initDocument(scrollBar);\n // showHeader !== undefined && (this.showHeader = showHeader);\n // scrollBar !== undefined && (this.scrollBar = scrollBar);\n showFrozenIcon !== undefined && (this.showFrozenIcon = showFrozenIcon);\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n\n if (Env.mode !== 'node') {\n internalProps.element = createRootElement(this.padding);\n internalProps.focusControl = new FocusInput(this, internalProps.element);\n internalProps.canvas = document.createElement('canvas');\n internalProps.element.appendChild(internalProps.canvas);\n internalProps.context = internalProps.canvas.getContext('2d')!;\n }\n\n internalProps.handler = new EventHandler();\n internalProps.pixelRatio = pixelRatio;\n internalProps.frozenColCount = frozenColCount;\n\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight; // defaultHeaderRowHeight没有设置取defaultRowHeight\n\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n\n internalProps.keyboardOptions = keyboardOptions;\n\n internalProps.columnResizeMode = columnResizeMode;\n internalProps.dragHeaderMode = dragHeaderMode;\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n internalProps._rowHeightsMap = new NumberMap();\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n internalProps._widthResizedColMap = new Set();\n\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n\n internalProps.calcWidthContext = {\n _: internalProps,\n get full(): number {\n if (Env.mode === 'node') {\n return canvasWidth / (pixelRatio ?? 1);\n }\n return this._.canvas.width / ((this._.context as any).pixelRatio ?? window.devicePixelRatio);\n }\n // get em(): number {\n // return getFontSize(this._.context, this._.theme.font).width;\n // }\n };\n\n internalProps.cellTextOverflows = {};\n internalProps.focusedTable = false;\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT); //原来在listTable文件中\n\n if (container) {\n //先清空\n container.innerHTML = '';\n container.appendChild(internalProps.element);\n this._updateSize();\n } else {\n this._updateSize();\n }\n\n this.options = options;\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n internalProps.bodyHelper = new BodyHelper(this);\n internalProps.headerHelper = new HeaderHelper(this);\n\n internalProps.autoWrapText = options.autoWrapText;\n\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? internalProps.colCount;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n this._vDataSet = new DataSet();\n this.scenegraph = new Scenegraph(this);\n this.stateManager = new StateManager(this);\n this.eventManager = new EventManager(this);\n\n if (options.legends) {\n internalProps.legends = createLegend(options.legends, this);\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n\n //原有的toolTip提示框处理,主要在文字绘制不全的时候 出来全文本提示信息 需要加个字段设置是否有效\n internalProps.tooltip = Object.assign(\n {\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html') {\n internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine);\n }\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n Array.isArray(options.menu?.dropDownMenuHighlight) &&\n this.setDropDownMenuHighlight(options.menu?.dropDownMenuHighlight);\n\n // 全局下拉菜单\n Array.isArray(options.menu?.defaultHeaderMenuItems) &&\n (this.globalDropDownMenu = options.menu.defaultHeaderMenuItems);\n\n if (internalProps.menu.renderMode === 'html') {\n internalProps.menuHandler = new MenuHandler(this);\n }\n\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n\n internalProps.stick = { changedCells: [] };\n\n internalProps.customMergeCell = options.customMergeCell;\n }\n /** 节流绘制 */\n throttleInvalidate = throttle2(this.render.bind(this), 200);\n /**\n * Get table container.\n * @returns {HTMLElement} table container\n */\n getContainer(): HTMLElement {\n return this.container;\n }\n /**\n * 获取表格创建的DOM根节点\n */\n getElement(): HTMLElement {\n return this.internalProps.element;\n }\n /**\n * 获取canvas\n */\n get canvas(): HTMLCanvasElement {\n return this.internalProps.canvas;\n }\n\n resize() {\n this._updateSize();\n if (this.internalProps.legends) {\n this.internalProps.legends.resize();\n }\n if (this.internalProps.title) {\n this.internalProps.title.resize();\n }\n // this.stateManager.checkFrozen();\n this.scenegraph.resize();\n }\n\n /**\n * Get the number of rows.\n */\n get rowCount(): number {\n return this.internalProps.rowCount;\n }\n /**\n * Set the number of rows.\n */\n set rowCount(rowCount: number) {\n this.internalProps.rowCount = rowCount;\n }\n /**\n * Get the number of columns.\n */\n get colCount(): number {\n return this.internalProps.colCount ?? 0;\n }\n /**\n * Set the number of columns.\n */\n set colCount(colCount: number) {\n this.internalProps.colCount = colCount;\n }\n /**\n * 注意 这个值和options.frozenColCount 不一样!options.frozenColCount是用户实际设置的; 这里获取的值是调整过:frozen的列过宽时 frozeCount为0\n */\n get frozenColCount(): number {\n return this.internalProps.layoutMap?.frozenColCount ?? this.internalProps.frozenColCount ?? 0;\n }\n /**\n * Set the number of frozen columns.\n */\n set frozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n // 纠正frozenColCount的值;\n if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n this.internalProps.frozenColCount = 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /** 设置冻结的行数 */\n setFrozenColCount(frozenColCount: number) {\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n // const oldFrozenColCount = this.internalProps.frozenColCount;\n this.internalProps.frozenColCount = frozenColCount;\n this.options.frozenColCount = frozenColCount;\n //纠正frozenColCount的值\n if (this.tableNoFrameWidth - this.getColsWidth(0, frozenColCount - 1) <= 120) {\n this.internalProps.frozenColCount = 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n }\n /**\n * 和setFrozenColCount一样的逻辑 但保留options.frozenColCount不赋新值\n * 当冻结列的宽度过宽时调用该函数\n */\n _setFrozenColCount(frozenColCount: number) {\n // 此情况将frozenColCount设为0(显示效果一致)\n if (frozenColCount >= this.colCount) {\n frozenColCount = 0;\n }\n this.internalProps.frozenColCount = frozenColCount;\n }\n /**\n * 计算完前置状态后 重新计算判断列宽是否过大\n */\n _resetFrozenColCount() {\n if (this.options.frozenColCount) {\n if (this.tableNoFrameWidth - this.getColsWidth(0, this.options.frozenColCount - 1) <= 120) {\n this._setFrozenColCount(0);\n } else if (this.frozenColCount !== this.options.frozenColCount) {\n this._setFrozenColCount(this.options.frozenColCount); //frozenColCount从0恢复到原有的frozenColCount\n }\n }\n }\n /**\n * Get the number of frozen rows.\n */\n get frozenRowCount(): number {\n return this.internalProps.layoutMap?.frozenRowCount ?? this.internalProps.frozenRowCount ?? 0;\n }\n /**\n * Set the number of frozen rows.\n */\n set frozenRowCount(frozenRowCount: number) {\n this.internalProps.frozenRowCount = frozenRowCount;\n // this.options.frozenRowCount = frozenRowCount;\n }\n\n get rightFrozenColCount(): number {\n return this.internalProps.layoutMap?.rightFrozenColCount ?? this.internalProps.rightFrozenColCount ?? 0;\n }\n\n set rightFrozenColCount(rightFrozenColCount: number) {\n this.scenegraph.dealWidthRightFrozen(rightFrozenColCount);\n }\n\n get bottomFrozenRowCount(): number {\n return this.internalProps.layoutMap?.bottomFrozenRowCount ?? this.internalProps.bottomFrozenRowCount ?? 0;\n }\n\n set bottomFrozenRowCount(bottomFrozenRowCount: number) {\n this.scenegraph.dealWidthBottomFrozen(bottomFrozenRowCount);\n }\n\n /**\n * Get the default row height.\n *\n */\n get defaultRowHeight(): number {\n return this.internalProps.defaultRowHeight;\n }\n /**\n * Set the default row height.\n */\n set defaultRowHeight(defaultRowHeight: number) {\n this.internalProps.defaultRowHeight = defaultRowHeight;\n this.options.defaultRowHeight = defaultRowHeight;\n }\n /**\n * Get the default row height.\n *\n */\n get defaultHeaderRowHeight(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderRowHeight;\n }\n /**\n * Set the default row height.\n */\n set defaultHeaderRowHeight(defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight;\n this.options.defaultHeaderRowHeight = defaultHeaderRowHeight;\n }\n /**\n * Get the default column width.\n */\n get defaultColWidth(): number {\n return this.internalProps.defaultColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultColWidth(defaultColWidth: number) {\n this.internalProps.defaultColWidth = defaultColWidth;\n this.options.defaultColWidth = defaultColWidth;\n }\n /**\n * Get the default column width.\n */\n get defaultHeaderColWidth(): (number | 'auto') | (number | 'auto')[] {\n return this.internalProps.defaultHeaderColWidth;\n }\n /**\n * Set the default column width.\n */\n set defaultHeaderColWidth(defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[]) {\n this.internalProps.defaultHeaderColWidth = defaultHeaderColWidth;\n this.options.defaultHeaderColWidth = defaultHeaderColWidth;\n }\n /**\n * Get the columns width. 但这个可能和看到的宽度不一致 获取某一列的宽度请使用接口 getColWidth(1) 这个接口会根据maxWidth minWidth进行调整\n */\n get colWidthsMap(): NumberMap<string | number> {\n return this.internalProps._colWidthsMap;\n }\n /**\n * Set the columns width.\n */\n set colWidthsMap(colWidthsMap: NumberMap<string | number>) {\n this.internalProps._colWidthsMap = colWidthsMap;\n }\n /**\n * Get every colomn's content width. not care actual column width\n */\n get colContentWidthsMap(): NumberMap<string | number> {\n return this.internalProps._colContentWidthsMap;\n }\n /**\n * Set every colomn's content width.\n */\n set colContentWidthsMap(colContentWidthsMap: NumberMap<string | number>) {\n this.internalProps._colContentWidthsMap = colContentWidthsMap;\n }\n /**\n * Get the range columns width.\n */\n get _colRangeWidthsMap(): Map<string, number> {\n return this.internalProps._colRangeWidthsMap;\n }\n /**\n * Set the range columns width.\n */\n set _colRangeWidthsMap(_colRangeWidthsMap: Map<string, number>) {\n this.internalProps._colRangeWidthsMap = _colRangeWidthsMap;\n }\n /**\n * Get the range rows height.\n */\n get _rowRangeHeightsMap(): Map<string, number> {\n return this.internalProps._rowRangeHeightsMap;\n }\n /**\n * Set the range rows height.\n */\n set _rowRangeHeightsMap(_rowRangeHeightsMap: Map<string, number>) {\n this.internalProps._rowRangeHeightsMap = _rowRangeHeightsMap;\n }\n /**\n * Get the columns width.\n */\n get rowHeightsMap(): NumberMap<number> {\n return this.internalProps._rowHeightsMap;\n }\n /**\n * Set the columns width.\n */\n set rowHeightsMap(rowHeightsMap: NumberMap<number>) {\n this.internalProps._rowHeightsMap = rowHeightsMap;\n }\n /**\n * Get the columns width limit.\n */\n get colWidthsLimit(): {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n } {\n return this.internalProps._colWidthsLimit;\n }\n /**\n * Set the columns width limit.\n */\n set colWidthsLimit(colWidthsLimit: {\n //存储各列的宽度限制\n [col: number]: {\n max?: string | number;\n min?: string | number;\n };\n }) {\n this.internalProps._colWidthsLimit = colWidthsLimit;\n }\n get keyboardOptions(): TableKeyboardOptions | null {\n return this.internalProps.keyboardOptions ?? null;\n }\n set keyboardOptions(keyboardOptions: TableKeyboardOptions | null) {\n this.internalProps.keyboardOptions = keyboardOptions ?? undefined;\n }\n\n get widthMode(): WidthModeDef {\n return this._widthMode;\n }\n set widthMode(widthMode: WidthModeDef) {\n if (widthMode !== this._widthMode) {\n this._widthMode = widthMode;\n this.options.widthMode = widthMode;\n }\n }\n get heightMode(): HeightModeDef {\n return this._heightMode;\n }\n set heightMode(heightMode: HeightModeDef) {\n if (heightMode !== this._heightMode) {\n this._heightMode = heightMode;\n this.options.heightMode = heightMode;\n }\n }\n get autoFillWidth(): boolean {\n return this._autoFillWidth;\n }\n set autoFillWidth(autoFillWidth: boolean) {\n if (autoFillWidth !== this._autoFillWidth) {\n this._autoFillWidth = autoFillWidth;\n }\n }\n get autoFillHeight(): boolean {\n return this._autoFillHeight;\n }\n set autoFillHeight(autoFillHeight: boolean) {\n if (autoFillHeight !== this._autoFillHeight) {\n this._autoFillHeight = autoFillHeight;\n }\n }\n /**\n * 根据设置的列宽配置 计算列宽值\n * @param {string|number} width width definition\n * @returns {number} the pixels of width\n */\n _colWidthDefineToPxWidth(width: string | number): number {\n if (width === 'auto') {\n // hack for defaultWidht support 'auto'\n return 0;\n }\n return _toPxWidth(this, width);\n }\n\n /**\n * 获取列宽的最大最小限制\n * @param {number} col number of column\n * @returns {object|null} the column width limits\n * @private\n */\n private _getColWidthLimits(col: number): {\n min?: undefined;\n minDef?: undefined;\n max?: undefined;\n maxDef?: undefined;\n } | null {\n const limit = this.colWidthsLimit[col];\n if (!limit) {\n return null;\n }\n\n const result: {\n min?: number;\n max?: number;\n minDef?: string | number;\n maxDef?: string | number;\n } = {};\n\n if (limit.min) {\n result.min = _toPxWidth(this, limit.min);\n result.minDef = limit.min;\n }\n if (limit.max) {\n result.max = _toPxWidth(this, limit.max);\n result.maxDef = limit.max;\n }\n return result as never;\n }\n\n _adjustColWidth(col: number, orgWidth: number): number {\n const limits = this._getColWidthLimits(col);\n return Math.max(_applyColWidthLimits(limits, orgWidth), 0);\n }\n\n /**\n * 设置像数比\n * @param pixelRatio\n */\n setPixelRatio(pixelRatio: number) {\n this.internalProps.pixelRatio = pixelRatio;\n this.scenegraph.setPixelRatio(pixelRatio);\n }\n /**\n * 窗口尺寸发生变化 或者像数比变化\n * @return {void}\n */\n _updateSize(): void {\n //清除样式并获取大小\n const { padding } = this;\n\n let widthP = 0;\n let heightP = 0;\n\n if (Env.mode === 'browser') {\n const element = this.getElement();\n\n const width1 = element.parentElement?.offsetWidth ?? 1 - 1;\n const height1 = element.parentElement?.offsetHeight ?? 1 - 1;\n\n element.style.width = (width1 && `${width1 - padding.left - padding.right}px`) || '0px';\n element.style.height = (height1 && `${height1 - padding.top - padding.bottom}px`) || '0px';\n\n const { canvas } = this.internalProps;\n widthP = canvas.parentElement?.offsetWidth ?? 1 - 1;\n heightP = canvas.parentElement?.offsetHeight ?? 1 - 1;\n\n //style 与 width,height相同\n if (this?.scenegraph?.stage) {\n this.scenegraph.stage.resize(widthP, heightP);\n } else {\n canvas.style.width = '';\n canvas.style.height = '';\n canvas.width = widthP;\n canvas.height = heightP;\n\n canvas.style.width = `${widthP}px`;\n canvas.style.height = `${heightP}px`;\n }\n } else if (Env.mode === 'node') {\n widthP = this.canvasWidth - 1;\n heightP = this.canvasHeight - 1;\n }\n\n const width = Math.floor(widthP - style.getScrollBarSize(this.getTheme().scrollStyle));\n const height = Math.floor(heightP - style.getScrollBarSize(this.getTheme().scrollStyle));\n\n if (this.internalProps.theme?.frameStyle) {\n //考虑表格整体边框的问题\n const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n this.tableX = (lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0);\n this.tableY = (lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0);\n this.tableNoFrameWidth =\n width - ((lineWidths[1] ?? 0) + (shadowWidths[1] ?? 0)) - ((lineWidths[3] ?? 0) + (shadowWidths[3] ?? 0));\n this.tableNoFrameHeight =\n height - ((lineWidths[0] ?? 0) + (shadowWidths[0] ?? 0)) - ((lineWidths[2] ?? 0) + (shadowWidths[2] ?? 0));\n }\n }\n\n get rowHierarchyType(): 'grid' | 'tree' {\n return 'grid';\n }\n\n // /**\n // * Set all column width.\n // * @param {number[]} widths The column widths\n // * @return {void}\n // */\n // setColWidths(widths: number[]): void {\n // widths.forEach((value, index) => this.setColWidth(index, value));\n // }\n /**\n * 获取指定列范围的总宽度\n * @param startCol\n * @param endCol\n * @returns\n */\n getColsWidth(startCol: number, endCol: number): number {\n endCol = Math.min(endCol, this.colCount - 1); // endCol最大为this.colCount - 1,超过会导致width计算为NaN\n //通过缓存获取指定范围列宽\n const cachedColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol}`);\n if (cachedColWidth !== null && cachedColWidth !== undefined) {\n return cachedColWidth;\n }\n\n //特殊处理 先尝试获取startCol->endCol-1的行高\n const cachedLowerColWidth = this._colRangeWidthsMap.get(`$${startCol}$${endCol - 1}`);\n if (cachedLowerColWidth !== null && cachedLowerColWidth !== undefined) {\n // const width = this.colWidthsMap.get(endCol);\n // let adjustW;\n // if (width) {\n // adjustW =\n // this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(endCol, this._colWidthDefineToPxWidth(width));\n // } else {\n // use default column width if no width in colWidthsMap\n const adjustW = this.getColWidth(endCol);\n // }\n const addWidth = cachedLowerColWidth + adjustW;\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0 && !Number.isNaN(addWidth)) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(addWidth));\n }\n return Math.round(addWidth);\n }\n\n let w = 0;\n for (let col = startCol; col <= endCol; col++) {\n w += this.getColWidth(col);\n }\n\n // this.colWidthsMap.each(startCol, endCol, (width, col) => {\n // // adaptive模式下,不受max min配置影响,直接使用width\n // w +=\n // (this.widthMode === 'adaptive' || (this as any).transpose\n // ? Number(width)\n // : this._adjustColWidth(col, this._colWidthDefineToPxWidth(width))) - this.getColWidth(col);\n // });\n // for (let col = startCol; col <= endCol; col++) {\n // if (this.colWidthsMap.has(col)) {\n // continue;\n // }\n // const adj = this._adjustColWidth(col, this.internalProps.defaultColWidth as number);\n // if (adj !== this.internalProps.defaultColWidth) {\n // w += adj - (this.internalProps.defaultColWidth as number);\n // }\n // }\n\n // 合法地址存入缓存\n if (startCol >= 0 && endCol >= 0) {\n this._colRangeWidthsMap.set(`$${startCol}$${endCol}`, Math.round(w));\n }\n return Math.round(w);\n }\n /**\n * 获取某一行的高度\n * @param row\n * @returns\n */\n getRowHeight(row: number): number {\n // return (\n // this.rowHeightsMap.get(row) ||\n // (this.isColumnHeader(0, row) || this.isCornerHeader(0, row)\n // ? Array.isArray(this.defaultHeaderRowHeight)\n // ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n // : this.defaultHeaderRowHeight\n // : this.internalProps.defaultRowHeight)\n // );\n if (this.rowHeightsMap.get(row)) {\n return this.rowHeightsMap.get(row);\n }\n const defaultHeight = this.getDefaultRowHeight(row);\n if (isNumber(defaultHeight)) {\n return defaultHeight;\n }\n return this.defaultRowHeight;\n }\n\n getDefaultRowHeight(row: number) {\n if (this.isColumnHeader(0, row) || this.isCornerHeader(0, row)) {\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[row] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n if (this.isBottomFrozenRow(this.rowHeaderLevelCount, row)) {\n return Array.isArray(this.defaultHeaderRowHeight)\n ? this.defaultHeaderRowHeight[\n this.columnHeaderLevelCount > 0 ? this.columnHeaderLevelCount - this.bottomFrozenRowCount : 0\n ] ?? this.internalProps.defaultRowHeight\n : this.defaultHeaderRowHeight;\n }\n return this.internalProps.defaultRowHeight;\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setRowHeight(row: number, height: number, clearCache?: boolean): void {\n this.rowHeightsMap.put(row, Math.round(height));\n // 清楚影响缓存\n if (clearCache) {\n this._clearRowRangeHeightsMap(row);\n }\n }\n /**\n * 获取指定行范围的总高度\n * @param startCol\n * @param endCol\n * @returns\n */\n getRowsHeight(startRow: number, endRow: number): number {\n //通过缓存获取指定范围行高\n const cachedRowHeight = this._rowRangeHeightsMap.get(`$${startRow}$${endRow}`);\n if (cachedRowHeight !== null && cachedRowHeight !== undefined) {\n return cachedRowHeight;\n }\n //特殊处理 先尝试获取startRow->endRow-1的行高\n const cachedLowerRowHeight = this._rowRangeHeightsMap.get(`$${startRow}$${endRow - 1}`);\n if (cachedLowerRowHeight !== null && cachedLowerRowHeight !== undefined) {\n const height = Math.round(\n cachedLowerRowHeight +\n (this.rowHeightsMap.get(endRow) ??\n (this.isColumnHeader(0, endRow) || this.isCornerHeader(0, endRow)\n ? Array.isArray(this.defaultHeaderRowHeight) && isNumber(this.defaultHeaderRowHeight[endRow])\n ? (this.defaultHeaderRowHeight[endRow] as number)\n : isNumber(this.defaultHeaderRowHeight)\n ? (this.defaultHeaderRowHeight as number)\n : this.internalProps.defaultRowHeight\n : this.internalProps.defaultRowHeight))\n );\n if (startRow >= 0 && endRow >= 0) {\n this._rowRangeHeightsMap.set(`$${startRow}$${endRow}`, Math.round(height));\n }\n return height;\n }\n\n let h = 0;\n // for (let i = startRow; i <= endRow; i++) {\n // h +=\n // this.rowHeightsMap.get(i) ||\n // (this.isColumnHeader(0, i) || this.isCornerHeader(0, i)\n // ? Array.isArray(this.defaultHeaderRowHeight)\n // ? this.defaultHeaderRowHeight[i] ?? this.internalProps.defaultRowHeight\n // : this.defaultHeaderRowHeight\n // : this.internalProps.defaultRowHeight);\n // }\n // autoRowHeight || all rows in header, use accumulation\n if (\n this.heightMode === 'standard' &&\n !this.autoFillHeight &&\n this.internalProps.layoutMap &&\n endRow >= this.columnHeaderLevelCount &&\n !this.bottomFrozenRowCount &&\n !this.hasAutoImageColumn()\n ) {\n for (let i = startRow; i < this.columnHeaderLevelCount; i++) {\n // part in header\n h += this.getRowHeight(i);\n }\n // part in body\n h += this.defaultRowHeight * (endRow - Math.max(this.columnHeaderLevelCount, startRow) + 1);\n } else {\n for (let i = startRow; i <= endRow; i++) {\n h += this.getRowHeight(i);\n }\n }\n if (startRow >= 0 && endRow >= 0 && h > 0) {\n this._rowRangeHeightsMap.set(`$${startRow}$${endRow}`, Math.round(h));\n }\n // }\n return Math.round(h);\n }\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n getColWidthDefined(col: number): string | number {\n const { layoutMap } = this.internalProps;\n // const ctx = _getInitContext.call(table);\n if (this.widthMode === 'autoWidth') {\n return 'auto';\n }\n const { width } = layoutMap?.getColumnWidthDefined(col) ?? {};\n if (typeof width === 'number' && width <= 0) {\n // adaptive模式下,宽度可能为0\n return 0;\n } else if (width) {\n return width;\n } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n if (this.isPivotTable()) {\n return Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n : this.defaultHeaderColWidth;\n }\n return this.defaultColWidth;\n }\n return this.defaultColWidth;\n }\n\n // setColWidthDefined(col: number, width: number) {\n // const { layoutMap } = this.internalProps;\n // const widthData = layoutMap?.getColumnWidthDefined(col) ?? {};\n // widthData.width = width;\n // }\n\n getColWidthDefinedNumber(col: number): number {\n const width = this.getColWidthDefined(col);\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n\n /**\n * 根据列号获取列宽定义\n * @param {number} col column number\n * @returns {string|number} width definition\n * @private\n */\n // getColWidthDefine(col: number): string | number {\n // const width = this.colWidthsMap.get(col);\n // if (typeof width === 'number' && width <= 0) {\n // // adaptive模式下,宽度可能为0\n // return 0;\n // } else if (width) {\n // return width;\n // } else if (this.isRowHeader(col, 0) || this.isCornerHeader(col, 0)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // } else if (this.isRightFrozenColumn(col, this.columnHeaderLevelCount)) {\n // return Array.isArray(this.defaultHeaderColWidth)\n // ? this.defaultHeaderColWidth[this.rowHeaderLevelCount - this.rightFrozenColCount] ?? this.defaultColWidth\n // : this.defaultHeaderColWidth;\n // }\n // return this.defaultColWidth;\n // }\n\n /**\n * 根据列号 获取该列宽度\n * @param {number} col column index\n * @return {number} column width\n */\n getColWidth(col: number): number {\n // const width = this.getColWidthDefine(col);\n const width =\n this.colWidthsMap.get(col) ??\n (col < this.rowHeaderLevelCount\n ? Array.isArray(this.defaultHeaderColWidth)\n ? this.defaultHeaderColWidth[col] ?? this.defaultColWidth\n : this.defaultHeaderColWidth\n : this.defaultColWidth);\n if (\n (this.widthMode === 'adaptive' && typeof width === 'number') ||\n ((this as any).transpose && typeof width === 'number')\n ) {\n // adaptive模式下,colWidthsMap存储的都是像素数值,此时max min配置失效,直接返回像素值\n // transpose模式下,不受原有列max min配置影响,直接返回像素值\n return this._colWidthDefineToPxWidth(width);\n }\n return this._adjustColWidth(col, this._colWidthDefineToPxWidth(width));\n }\n /**\n * 设置某一行的高度\n * @param row\n * @returns\n */\n _setColWidth(col: number, width: string | number, clearCache?: boolean, skipCheckFrozen?: boolean): void {\n this.colWidthsMap.put(col, typeof width === 'number' ? Math.round(width) : width);\n // 清楚影响缓存\n if (clearCache) {\n this._clearColRangeWidthsMap(col);\n }\n\n // 检查冻结情况\n if (!skipCheckFrozen) {\n this.stateManager.checkFrozen();\n }\n }\n\n /**\n * 清空含有指定col的缓存\n * @param col\n */\n _clearColRangeWidthsMap(col?: number): void {\n if (typeof col !== 'number') {\n this._colRangeWidthsMap.clear();\n } else {\n const keys = this._colRangeWidthsMap.keys();\n for (const key of keys) {\n const reg = rangeReg.exec(key);\n if (reg) {\n const start = Number(reg[1]);\n const end = Number(reg[2]);\n if (col >= start && col <= end) {\n this._colRangeWidthsMap.delete(key);\n }\n }\n }\n }\n }\n /**\n * 清空含有指定row的缓存\n * @param row\n */\n _clearRowRangeHeightsMap(row?: number): void {\n if (typeof row !== 'number') {\n this._rowRangeHeightsMap.clear();\n } else {\n const keys = this._rowRangeHeightsMap.keys();\n for (const key of keys) {\n const reg = rangeReg.exec(key);\n if (reg) {\n const start = Number(reg[1]);\n const end = Number(reg[2]);\n if (row >= start && row <= end) {\n this._rowRangeHeightsMap.delete(key);\n }\n }\n }\n }\n }\n /**\n * 获取某一列内容的宽度 不关乎该列列宽值有多少\n * @param col\n * @returns\n */\n _getColContentWidth(col: number): number {\n return Number(this.colContentWidthsMap.get(col));\n }\n _setColContentWidth(col: number, width: string | number): void {\n this.colContentWidthsMap.put(col, width);\n }\n /**\n * 获取所有列的总高度\n * @returns\n */\n getAllRowsHeight(): number {\n if (this.internalProps.rowCount <= 0) {\n return 0;\n }\n const h = this.getRowsHeight(0, this.internalProps.rowCount - 1);\n return h;\n }\n /**\n * 获取所有行的总宽度\n * @returns\n */\n getAllColsWidth(): number {\n if (this.internalProps.colCount <= 0) {\n return 0;\n }\n const w = this.getColsWidth(0, this.internalProps.colCount - 1);\n return w;\n }\n\n /**\n * 根据列号 获取列宽最大值\n * @param {number} col column index\n * @return {number} column max width\n */\n getMaxColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let max = (obj && obj.max) ?? Infinity;\n if (typeof max === 'string') {\n max = _toPxWidth(this, max);\n }\n return max;\n }\n /**\n * 根据列号 设置列宽最大值\n * @param {number} col column index\n * @param {number} maxwidth column max width\n * @return {void}\n */\n setMaxColWidth(col: number, maxwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.max = maxwidth;\n }\n /**\n * 根据列号 获取列宽最小值\n * @param {number} col column index\n * @return {number} column min width\n */\n getMinColWidth(col: number): number {\n const obj = this.colWidthsLimit[col];\n let min = (obj && obj.min) ?? 0;\n if (typeof min === 'string') {\n min = _toPxWidth(this, min);\n }\n return min;\n }\n /**\n * 根据列号 设置列宽最小值\n * @param {number} col column index\n * @param {number} minwidth column min width\n * @return {void}\n */\n setMinColWidth(col: number, minwidth: string | number): void {\n const obj = this.colWidthsLimit[col] || (this.colWidthsLimit[col] = {});\n obj.min = minwidth;\n }\n /**\n * 获取单元格的范围 返回值为Rect类型。不考虑是否为合并单元格的情况,坐标从0开始\n * @param {number} col column index\n * @param {number} row row index\n * @returns {Rect}\n */\n getCellRect(col: number, row: number): Rect {\n const isFrozenCell = this.isFrozenCell(col, row);\n\n let absoluteLeft;\n const width = this.getColWidth(col);\n if (isFrozenCell && isFrozenCell.col) {\n if (this.isRightFrozenColumn(col, row)) {\n absoluteLeft = this.tableNoFrameWidth - (this.getColsWidth(col, this.colCount - 1) ?? 0);\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n absoluteLeft += this.scrollLeft;\n }\n } else {\n absoluteLeft = this.getColsWidth(0, col - 1) || 0;\n }\n\n let absoluteTop;\n const height = this.getRowHeight(row);\n if (isFrozenCell && isFrozenCell.row) {\n if (this.isBottomFrozenRow(col, row)) {\n absoluteLeft = this.tableNoFrameHeight - (this.getRowsHeight(row, this.rowCount - 1) ?? 0);\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n absoluteTop += this.scrollTop;\n }\n } else {\n absoluteTop = this.getRowsHeight(0, row - 1);\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定单元格【按合并后的区域】的rect 整表坐标系中(即相对于单元格[0,0]左上角来算的)\n * @param col\n * @param row\n * @returns\n */\n getMergeCellRect(col: number, row: number): Rect {\n const cellRange = this.getCellRange(col, row);\n const absoluteLeft = this.getColsWidth(0, cellRange.start.col - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n const width = this.getColsWidth(cellRange.start.col, cellRange.end.col);\n const absoluteTop = this.getRowsHeight(0, cellRange.start.row - 1) || 0;\n const height = this.getRowsHeight(cellRange.start.row, cellRange.end.row);\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取的位置是相对表格显示界面的左上角 情况滚动情况 如单元格已经滚出表格上方 则这个单元格的y将为负值\n * @param {number} col index of column, of the cell\n * @param {number} row index of row, of the cell\n * @returns {Rect} the rect of the cell.\n */\n getCellRelativeRect(col: number, row: number): Rect {\n return this._toRelativeRect(this.getCellRect(col, row));\n }\n /**\n * 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型 可以传入单元格范围或者具体某个单元格 返回值是包括合并单元格的较大区域\n * @returns {Rect}\n */\n getCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n if ((<CellRange>range).start) {\n return this._toRelativeRect(\n this.getCellsRect(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n )\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n return this._toRelativeRect(\n this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row)\n );\n }\n /**\n * 即仅视觉看到的位置 获取的位置是相对表格显示界面的左上角\n * @param {number} range :CellRange | CellAddress 类型\n * @returns {Rect} the visiable rect of the cell.可见矩形部分\n */\n getVisibleCellRangeRelativeRect(range: CellRange | CellAddress): Rect {\n let cellRange: CellRange;\n if ((<CellRange>range).start) {\n cellRange = <CellRange>range;\n } else {\n cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n }\n return this._getVisiableRect(this.getCellRangeRelativeRect(range), cellRange);\n }\n /**\n * 调整relativeRectObj 计算可见部分的rect\n * @param relativeRectObj\n * @returns\n */\n _getVisiableRect(relativeRectObj: Rect, cellRange: CellRange): Rect {\n const targetLeft =\n cellRange.start.col >= this.frozenColCount\n ? Math.max(relativeRectObj.left, this.frozenColCount >= 1 ? this.getColsWidth(0, this.frozenColCount - 1) : 0)\n : relativeRectObj.left;\n const targetRight = Math.min(relativeRectObj.right, this.tableNoFrameWidth);\n const rect = relativeRectObj.copy();\n rect.left = targetLeft;\n rect.right = targetRight;\n\n const targetTop =\n cellRange.start.row >= this.frozenRowCount\n ? Math.max(relativeRectObj.top, this.frozenRowCount >= 1 ? this.getRowsHeight(0, this.frozenRowCount - 1) : 0)\n : relativeRectObj.top;\n const targetBottom = Math.min(relativeRectObj.bottom, this.tableNoFrameHeight);\n rect.top = targetTop;\n rect.bottom = targetBottom;\n return rect;\n }\n /**\n * 获取指定行列区域的Rect\n * @param {number} startCol\n * @param {number} startRow\n * @param {number} endCol\n * @param {number} endRow\n * @returns {Rect}\n */\n getCellsRect(startCol: number, startRow: number, endCol: number, endRow: number): Rect {\n const isFrozenStartCell = this.isFrozenCell(startCol, startRow);\n const isFrozenEndCell = this.isFrozenCell(endCol, endRow);\n\n let absoluteLeft = this.getColsWidth(0, startCol - 1) || 0; // startCol为0时,absoluteLeft计算为Nan\n let width = this.getColsWidth(startCol, endCol);\n if (isFrozenStartCell && isFrozenStartCell.col) {\n const scrollLeft = this.scrollLeft;\n absoluteLeft += scrollLeft;\n if (!isFrozenEndCell || !isFrozenEndCell.col) {\n width -= scrollLeft;\n width = Math.max(width, this.getColsWidth(startCol, this.frozenColCount - 1));\n }\n }\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let height = this.getRowsHeight(startRow, endRow);\n if (isFrozenStartCell && isFrozenStartCell.row) {\n const scrollTop = this.scrollTop;\n absoluteTop += scrollTop;\n if (!isFrozenEndCell || !isFrozenEndCell.row) {\n height -= scrollTop;\n height = Math.max(height, this.getRowsHeight(startRow, this.frozenRowCount - 1));\n }\n }\n return new Rect(Math.round(absoluteLeft), Math.round(absoluteTop), Math.round(width), Math.round(height));\n }\n /**\n * 获取指定区域的宽度\n * @param startCol\n * @param startRow\n * @param endCol\n * @param endRow\n * @returns\n */\n getCellsRectWidth(startCol: number, startRow: number, endCol: number, endRow: number): number {\n const isFrozenStartCell = this.isFrozenCell(startCol, startRow);\n const isFrozenEndCell = this.isFrozenCell(endCol, endRow);\n let width = this.getColsWidth(startCol, endCol);\n if (isFrozenStartCell && isFrozenStartCell.col) {\n const scrollLeft = this.scrollLeft;\n if (!isFrozenEndCell || !isFrozenEndCell.col) {\n width -= scrollLeft;\n width = Math.max(width, this.getColsWidth(startCol, this.frozenColCount - 1));\n }\n }\n return width;\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的rect范围\n * @param range\n * @returns\n */\n getCellRangeRect(range: CellRange | CellAddress): Rect {\n if ((<CellRange>range).start) {\n return this.getCellsRect(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n return this.getCellsRect(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /**\n * 获取行列范围range或者某个单元格所做合并大的范围range的宽度\n * @param range\n * @returns\n */\n getCellRangeRectWidth(range: CellRange | CellAddress): number {\n if ((<CellRange>range).start) {\n return this.getCellsRectWidth(\n (<CellRange>range).start.col,\n (<CellRange>range).start.row,\n (<CellRange>range).end.col,\n (<CellRange>range).end.row\n );\n }\n const cellRange = this.getCellRange((<CellAddress>range).col, (<CellAddress>range).row);\n return this.getCellsRectWidth(cellRange.start.col, cellRange.start.row, cellRange.end.col, cellRange.end.row);\n }\n /** 判断某个单元格个是否在冻结行或冻结列中 */\n isFrozenCell(\n col: number,\n row: number\n ): {\n row: boolean;\n col: boolean;\n } | null {\n const isFrozenRow = this.isFrozenRow(row) || this.isBottomFrozenRow(row);\n const isFrozenCol = this.isFrozenColumn(col) || this.isRightFrozenColumn(col);\n if (isFrozenRow || isFrozenCol) {\n return {\n row: isFrozenRow,\n col: isFrozenCol\n };\n }\n return null;\n }\n /**\n * 根据y值计算所在行\n * @param absoluteY\n * @returns\n */\n getRowAt(absoluteY: number): { top: number; row: number; bottom: number; height: number } {\n const frozen = _getTargetFrozenRowAt(this, absoluteY);\n if (frozen) {\n return frozen;\n }\n let row = this.getTargetRowAt(absoluteY);\n if (!row) {\n row = {\n top: -1,\n row: -1,\n bottom: -1,\n height: -1\n };\n }\n return row;\n }\n /**\n * 根据x值计算所在列\n * @param absoluteX\n * @returns\n */\n getColAt(absoluteX: number): { left: number; col: number; right: number; width: number } {\n const frozen = _getTargetFrozenColAt(this, absoluteX);\n if (frozen) {\n return frozen;\n }\n let col = this.getTargetColAt(absoluteX);\n if (!col) {\n col = {\n left: -1,\n col: -1,\n right: -1,\n width: 1\n };\n }\n return col;\n }\n /**\n * 根据坐标值获取行列位置,index和rect范围\n * @param absoluteX\n * @param absoluteY\n * @returns\n */\n getCellAt(absoluteX: number, absoluteY: number): CellAddress {\n const rowInfo = this.getRowAt(absoluteY);\n const { row, top, bottom, height } = rowInfo;\n const colInfo = this.getColAt(absoluteX);\n const { col, left, right, width } = colInfo;\n const rect = {\n left,\n right,\n top,\n bottom,\n width,\n height\n };\n return {\n row,\n col,\n rect\n };\n }\n /**\n * 检查行列号是否正确\n * @param col\n * @param row\n * @returns\n */\n _checkRowCol(col: number, row: number) {\n if (col >= 0 && col < this.colCount && row >= 0 && row < this.rowCount) {\n return true;\n }\n return false;\n }\n /**\n * 指定的行列如果在可视范围内,则不进行逻辑处理;如果不在可视范围需要滚动一定距离能将其显示出来\n * @param {number} col The column index.\n * @param {number} row The row index\n * @return {void}\n */\n _makeVisibleCell(col: number, row: number): void {\n if (this._checkRowCol(col, row)) {\n const isFrozenCell = this.isFrozenCell(col, row);\n if (isFrozenCell && isFrozenCell.col && isFrozenCell.row) {\n return;\n }\n const rect = this.getCellRect(col, row);\n const visibleRect = _getScrollableVisibleRect(this);\n if (visibleRect.contains(rect)) {\n return;\n }\n if (!isFrozenCell || !isFrozenCell.col) {\n if (this.getColsWidth(0, this.frozenColCount - 1) + rect.width > this.canvas.width) {\n // do nothing\n // 防止点击左右跳动\n } else if (rect.left < visibleRect.left) {\n this.scrollLeft -= visibleRect.left - rect.left;\n } else if (visibleRect.right < rect.right) {\n this.scrollLeft -= visibleRect.right - rect.right;\n }\n }\n if (!isFrozenCell || !isFrozenCell.row) {\n if (this.getRowsHeight(0, this.frozenRowCount - 1) + rect.height > this.canvas.height) {\n // do nothing\n } else if (rect.top < visibleRect.top) {\n this.scrollTop -= visibleRect.top - rect.top;\n } else if (visibleRect.bottom < rect.bottom) {\n this.scrollTop -= visibleRect.bottom - rect.bottom;\n }\n }\n }\n }\n\n /**\n * 重绘表格(同步绘制)\n */\n render(): void {\n this.scenegraph.renderSceneGraph();\n }\n /**\n * 异步重绘表格\n */\n renderAsync(): Promise<void> {\n this.scenegraph.updateNextFrame();\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve();\n }, 0);\n });\n }\n /**\n * 转换成视觉相对table左上角的坐标 如滚动超出表格上方 y将为负值\n * @param absoluteRect\n * @returns\n */\n _toRelativeRect(absoluteRect: Rect): Rect {\n const rect = absoluteRect.copy();\n const visibleRect = this.getVisibleRect();\n rect.offsetLeft(this.tableX - visibleRect.left);\n rect.offsetTop(this.tableY - visibleRect.top);\n return rect;\n }\n\n /**\n * 想象一张可以任意大的表格,呈现在我们眼前的只是其中一部分,那这个部分怎么来描述。\n * 如有滚动情况 scrollLeft为100,也就是往右滚动了100(左侧隐藏100)。_getVisibleRect获取到的Rect{_left: 100, _top: 0, _width: 1460, _height: 685}\n * @param table\n * @returns\n */\n getVisibleRect(): Rect {\n const { scrollTop, scrollLeft } = this;\n const width = this.tableNoFrameWidth;\n const height = this.tableNoFrameHeight;\n return new Rect(scrollLeft, scrollTop, width, height);\n }\n /**\n * 获取网格中完全可见的可滚动行数。不包括表头及冻结的行\n * @returns {number}\n */\n get visibleRowCount(): number {\n const { frozenRowCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleTop =\n frozenRowCount > 0 ? visibleRect.top + this.getRowsHeight(0, frozenRowCount - 1) : visibleRect.top;\n\n const initRow = this.getTargetRowAt(visibleTop);\n if (!initRow) {\n return 0;\n }\n const startRow = Math.max(initRow.top >= visibleTop ? initRow.row : initRow.row + 1, frozenRowCount);\n let absoluteTop = this.getRowsHeight(0, startRow - 1);\n let count = 0;\n const { rowCount } = this;\n for (let row = startRow; row < rowCount; row++) {\n const height = this.getRowHeight(row);\n const bottom = absoluteTop + height;\n if (visibleRect.bottom < bottom) {\n break;\n }\n count++;\n absoluteTop = bottom;\n }\n return count;\n }\n /** 获取表格body部分的显示单元格范围 */\n getBodyVisibleCellRange() {\n const { scrollTop, scrollLeft } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const frozenColsWidth = this.getFrozenColsWidth();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row\n : this.rowCount - 1;\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col\n : this.colCount - 1;\n if (colEnd < 0 || rowEnd < 0) {\n return null;\n }\n return { rowStart, colStart, rowEnd, colEnd };\n }\n /** 获取表格body部分的显示行号范围 */\n getBodyVisibleRowRange() {\n const { scrollTop } = this;\n const frozenRowsHeight = this.getFrozenRowsHeight();\n const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();\n // 计算非冻结\n const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);\n const rowEnd =\n this.getAllRowsHeight() > this.tableNoFrameHeight\n ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row\n : this.rowCount - 1;\n if (rowEnd < 0) {\n return null;\n }\n return { rowStart, rowEnd };\n }\n /** 获取表格body部分的显示列号范围 */\n getBodyVisibleColRange() {\n const { scrollLeft } = this;\n const frozenColsWidth = this.getFrozenColsWidth();\n const rightFrozenColsWidth = this.getRightFrozenColsWidth();\n // 计算非冻结\n const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);\n\n const colEnd =\n this.getAllColsWidth() > this.tableNoFrameWidth\n ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col\n : this.colCount - 1;\n if (colEnd < 0) {\n return null;\n }\n return { colStart, colEnd };\n }\n /**\n * 获取表格中完全可见的可滚动列数。不包括表头及冻结的列\n * @returns {number}\n */\n get visibleColCount(): number {\n const { frozenColCount } = this;\n const visibleRect = this.getVisibleRect();\n const visibleLeft =\n frozenColCount > 0 ? visibleRect.left + this.getColsWidth(0, frozenColCount - 1) : visibleRect.left;\n\n const initCol = this.getTargetColAt(visibleLeft);\n if (!initCol) {\n return 0;\n }\n const startCol = Math.max(initCol.left >= visibleLeft ? initCol.col : initCol.col + 1, frozenColCount);\n let absoluteLeft = this.getColsWidth(0, startCol - 1);\n let count = 0;\n const { colCount } = this;\n for (let col = startCol; col < colCount; col++) {\n const width = this.getColWidth(col);\n const right = absoluteLeft + width;\n if (visibleRect.right < right) {\n break;\n }\n count++;\n absoluteLeft = right;\n }\n return count;\n }\n\n get scrollTop(): number {\n return this.stateManager.scroll.verticalBarPos;\n }\n set scrollTop(scrollTop: number) {\n this.stateManager.setScrollTop(scrollTop);\n }\n\n get scrollLeft(): number {\n return this.stateManager.scroll.horizontalBarPos;\n }\n set scrollLeft(scrollLeft: number) {\n this.stateManager.setScrollLeft(scrollLeft);\n }\n\n getScrollLeft() {\n return this.scrollLeft;\n }\n getScrollTop() {\n return this.scrollTop;\n }\n setScrollLeft(num: number) {\n this.scrollLeft = Math.ceil(num);\n }\n setScrollTop(num: number) {\n this.scrollTop = Math.ceil(num);\n }\n /**\n * 获取有省略文字的的单元格文本内容\n * cellTextOverflows存储了无法显示全文本的value,供toolTip使用\n * @param {number} col column index.\n * @param {number} row row index\n * @return {string | null}\n */\n getCellOverflowText(col: number, row: number): string | null {\n return this.scenegraph.getCellOverflowText(col, row);\n }\n /**\n * 添加析构逻辑\n * @param releaseObj\n */\n addReleaseObj(releaseObj: { release: () => void }): void {\n if (!releaseObj || !releaseObj.release || typeof releaseObj.release !== 'function') {\n throw new Error('not releaseObj!');\n }\n const releaseList = (this.internalProps.releaseList = this.internalProps.releaseList || []);\n releaseList.push(releaseObj);\n }\n private dispose() {\n this.release();\n }\n /**\n * Dispose the table instance.\n * @returns {void}\n */\n release(): void {\n const internalProps = this.internalProps;\n internalProps.tooltipHandler?.release?.();\n internalProps.menuHandler?.release?.();\n IconCache.clearAll();\n\n super.release?.();\n internalProps.handler?.release?.();\n // internalProps.scrollable?.release?.();\n internalProps.focusControl?.release?.();\n internalProps.legends?.release();\n internalProps.title?.release();\n internalProps.layoutMap.release();\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n\n this.scenegraph.stage.release();\n this.scenegraph.proxy.release();\n\n const { parentElement } = internalProps.element;\n if (parentElement) {\n parentElement.removeChild(internalProps.element);\n }\n\n this.isReleased = true;\n }\n\n fireListeners<TYPE extends keyof TableEventHandlersEventArgumentMap>(\n type: TYPE,\n event: TableEventHandlersEventArgumentMap[TYPE]\n ): TableEventHandlersReturnMap[TYPE][] {\n return super.fireListeners(type, event);\n }\n\n /**\n * 更新options 目前只支持全量更新\n * @param options\n */\n updateOption(options: BaseTableConstructorOptions) {\n (this.options as BaseTable['options']) = options;\n const {\n // rowCount = 0,\n // colCount = 0,\n frozenColCount = 0,\n // frozenRowCount = 0,\n defaultRowHeight = 40,\n defaultHeaderRowHeight,\n defaultColWidth = 80,\n defaultHeaderColWidth = 80,\n keyboardOptions,\n // disableRowHeaderColumnResize,\n columnResizeMode,\n dragHeaderMode,\n // scrollBar,\n showFrozenIcon,\n allowFrozenColCount,\n padding,\n hover,\n menu,\n select: click,\n pixelRatio,\n widthMode,\n heightMode,\n autoFillWidth,\n autoFillHeight,\n customRender,\n renderChartAsync,\n renderChartAsyncBatchCount,\n overscrollBehavior,\n limitMinWidth\n } = options;\n if (pixelRatio && pixelRatio !== this.internalProps.pixelRatio) {\n this.internalProps.pixelRatio = pixelRatio;\n }\n // 更新padding\n if (padding) {\n if (typeof padding === 'number') {\n this.padding.top = padding;\n this.padding.left = padding;\n this.padding.bottom = padding;\n this.padding.right = padding;\n } else {\n padding.top && (this.padding.top = padding.top);\n padding.bottom && (this.padding.bottom = padding.bottom);\n padding.left && (this.padding.left = padding.left);\n padding.right && (this.padding.right = padding.right);\n }\n }\n\n // 更新hover/click状态\n\n // 更新基础组件显示状态\n // (showHeader!=undefined) &&(this.showHeader = showHeader);\n // (showFrozenIcon!=undefined) &&(this.showFrozenIcon = showFrozenIcon);\n // (showSort!=undefined) &&(this.showSort = showSort);\n // style.initDocument(scrollBar);\n // this.showHeader = typeof showHeader === 'boolean' ? showHeader : true;\n // this.scrollBar = typeof scrollBar === 'boolean' ? scrollBar : true;\n this.showFrozenIcon = typeof showFrozenIcon === 'boolean' ? showFrozenIcon : true;\n if (typeof allowFrozenColCount === 'number' && allowFrozenColCount <= 0) {\n this.showFrozenIcon = false;\n }\n\n this.widthMode = widthMode ?? 'standard';\n this.heightMode = heightMode ?? 'standard';\n this.autoFillWidth = autoFillWidth ?? false;\n this.autoFillHeight = autoFillHeight ?? false;\n this.customRender = customRender;\n // 更新protectedSpace\n const internalProps: IBaseTableProtected = this.internalProps;\n if (Env.mode !== 'node') {\n updateRootElementPadding(internalProps.element, this.padding);\n }\n // internalProps.rowCount = rowCount;\n // internalProps.colCount = colCount;\n internalProps.frozenColCount = frozenColCount;\n // internalProps.frozenRowCount = frozenRowCount;\n internalProps.defaultRowHeight = defaultRowHeight;\n internalProps.defaultHeaderRowHeight = defaultHeaderRowHeight ?? defaultRowHeight;\n internalProps.defaultColWidth = defaultColWidth;\n internalProps.defaultHeaderColWidth = defaultHeaderColWidth ?? defaultColWidth;\n internalProps.keyboardOptions = keyboardOptions;\n\n internalProps.columnResizeMode = columnResizeMode;\n internalProps.dragHeaderMode = dragHeaderMode;\n internalProps.renderChartAsync = renderChartAsync;\n setBatchRenderChartCount(renderChartAsyncBatchCount);\n internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';\n internalProps.cellTextOverflows = {};\n internalProps._rowHeightsMap = new NumberMap();\n internalProps._rowRangeHeightsMap = new Map();\n internalProps._colRangeWidthsMap = new Map();\n\n internalProps._widthResizedColMap = new Set();\n\n this.colWidthsMap = new NumberMap();\n this.colContentWidthsMap = new NumberMap();\n this.colWidthsLimit = {};\n\n internalProps.theme = themes.of(options.theme ?? themes.DEFAULT);\n this.scenegraph.updateStageBackground();\n // this._updateSize();\n //设置是否自动撑开的配置\n // internalProps.autoRowHeight = options.autoRowHeight ?? false;\n //是否统一设置为多行文本\n internalProps.autoWrapText = options.autoWrapText;\n internalProps.allowFrozenColCount = options.allowFrozenColCount ?? internalProps.colCount;\n internalProps.limitMaxAutoWidth = options.limitMaxAutoWidth ?? 450;\n internalProps.limitMinWidth =\n limitMinWidth !== null && limitMinWidth !== undefined\n ? typeof limitMinWidth === 'number'\n ? limitMinWidth\n : limitMinWidth\n ? 10\n : 0\n : 10;\n // 生成scenegraph\n this._vDataSet = new DataSet();\n internalProps.legends?.release();\n internalProps.title?.release();\n internalProps.layoutMap.release();\n this.scenegraph.clearCells();\n this.stateManager.updateOptionSetState();\n\n this._updateSize();\n // this.stateManager = new StateManager(this);\n // this.eventManager = new EventManager(this);\n this.eventManager.updateEventBinder();\n if (options.legends) {\n internalProps.legends = createLegend(options.legends, this);\n this.scenegraph.tableGroup.setAttributes({\n x: this.tableX,\n y: this.tableY\n });\n }\n // if (options.title) {\n // internalProps.title = new Title(options.title, this);\n // this.scenegraph.tableGroup.setAttributes({\n // x: this.tableX,\n // y: this.tableY\n // });\n // }\n internalProps.tooltip = Object.assign(\n {\n renderMode: 'html',\n isShowOverflowTextTooltip: false,\n confine: true\n },\n options.tooltip\n );\n if (internalProps.tooltip.renderMode === 'html' && !internalProps.tooltipHandler) {\n internalProps.tooltipHandler = new TooltipHandler(this, internalProps.tooltip.confine);\n }\n\n internalProps.menu = Object.assign(\n {\n renderMode: 'html'\n },\n options.menu\n );\n if (internalProps.menu.renderMode === 'html' && !internalProps.menuHandler) {\n internalProps.menuHandler = new MenuHandler(this);\n }\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.clearColWidthCache();\n this.clearRowHeightCache();\n }\n /**\n * 重新创建场景树并重新渲染\n */\n renderWithRecreateCells() {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.refreshHeader();\n this.scenegraph.clearCells();\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n /**\n * 获取固定行总高\n * @returns\n */\n getFrozenRowsHeight(): number {\n const height = this.getRowsHeight(0, this.frozenRowCount - 1);\n return height;\n }\n /**\n * 获取固定列总宽\n * @returns\n */\n getFrozenColsWidth(): number {\n const w = this.getColsWidth(0, this.frozenColCount - 1);\n return w;\n }\n /**\n * 获取底部冻结固定列总宽\n * @returns\n */\n getBottomFrozenRowsHeight(): number {\n if (this.bottomFrozenRowCount > 0) {\n const height = this.getRowsHeight(this.rowCount - this.bottomFrozenRowCount, this.rowCount - 1);\n return height;\n }\n return 0;\n }\n /**\n * 获取右侧冻结固定列总宽\n * @returns\n */\n getRightFrozenColsWidth(): number {\n if (this.rightFrozenColCount > 0) {\n const width = this.getColsWidth(this.colCount - this.rightFrozenColCount, this.colCount - 1);\n return width;\n }\n return 0;\n }\n /**\n * 获取实际绘制范围的宽高,而非可绘制画布大小\n * @param table\n * @returns\n */\n getDrawRange(): Rect {\n //考虑表格整体边框的问题\n // const lineWidths = toBoxArray(this.internalProps.theme.frameStyle?.borderLineWidth ?? [null]);\n // const shadowWidths = toBoxArray(this.internalProps.theme.frameStyle?.shadowBlur ?? [0]);\n const width = Math.min(this.tableNoFrameWidth, this.getAllColsWidth());\n const height = Math.min(this.tableNoFrameHeight, this.getAllRowsHeight());\n // Math.max(lineWidths[3] ?? 0, shadowWidths[3] ?? 0),\n // Math.max(lineWidths[1] ?? 0, shadowWidths[1] ?? 0),\n return new Rect(this.tableX, this.tableY, width, height);\n }\n\n /** @private 将鼠标坐标值 转换成表格坐标系中的坐标位置\n * isAddScroll默认为true 返回的xy 加上了scrollX和scrollY。如滚动后通过该方法计算出的坐标值是未滚动时的坐标\n */\n _getMouseAbstractPoint(\n evt: TouchEvent | MouseEvent | undefined,\n isAddScroll = true\n ): { x: number; y: number; inTable: boolean } {\n const table = this;\n let e: MouseEvent | Touch;\n if (!evt) {\n return { inTable: false, x: undefined, y: undefined };\n }\n if (isTouchEvent(evt)) {\n e = evt.changedTouches[0];\n } else {\n e = evt;\n }\n const clientX = e.clientX || e.pageX + window.scrollX;\n const clientY = e.clientY || e.pageY + window.scrollY;\n const rect = table.internalProps.canvas.getBoundingClientRect();\n let inTable = true;\n if (rect.right <= clientX) {\n inTable = false;\n }\n if (rect.bottom <= clientY) {\n inTable = false;\n }\n\n const currentWidth = rect.width;\n const originWidth = this.canvas.offsetWidth || currentWidth;\n const widthRatio = currentWidth / originWidth;\n\n const currentHeight = rect.height;\n const originHeight = this.canvas.offsetHeight || currentHeight;\n const heightRatio = currentHeight / originHeight;\n\n const x = (clientX - rect.left) / widthRatio + (isAddScroll ? table.scrollLeft : 0);\n const y = (clientY - rect.top) / heightRatio + (isAddScroll ? table.scrollTop : 0);\n return { x, y, inTable };\n }\n getTheme() {\n return this.internalProps.theme;\n }\n\n /**\n * 根据x获取该位置所处列值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetColAt(absoluteX: number): { col: number; left: number; right: number; width: number } | null {\n if (absoluteX === 0) {\n return { left: 0, col: 0, right: 0, width: 0 };\n }\n const findBefore = (\n startCol: number,\n startRight: number\n ): {\n left: number;\n col: number;\n right: number;\n width: number;\n } | null => {\n let right = startRight;\n for (let col = startCol; col >= 0; col--) {\n const width = this.getColWidth(col);\n const left = right - width;\n if (Math.round(left) <= Math.round(absoluteX) && Math.round(absoluteX) < Math.round(right)) {\n return {\n left,\n col,\n right,\n width\n };\n }\n right = left;\n }\n return null;\n };\n const findAfter = (\n startCol: number,\n startRight: number\n ): {\n left: number;\n col: number;\n right: number;\n width: number;\n } | null => {\n let left = startRight - this.getColWidth(startCol);\n const { colCount } = this.internalProps;\n for (let col = startCol; col < colCount; col++) {\n const width = this.getColWidth(col);\n const right = left + width;\n if (Math.round(left) <= Math.round(absoluteX) && Math.round(absoluteX) < Math.round(right)) {\n return {\n left,\n col,\n right,\n width\n };\n }\n left = right;\n }\n return null;\n };\n //计算这个位置处是第几行\n const candCol = this.computeTargetColByX(absoluteX);\n const right = this.getColsWidth(0, candCol);\n if (absoluteX >= right) {\n return findAfter(candCol, right);\n }\n return findBefore(candCol, right);\n }\n /**\n * 根据y获取该位置所处行值\n * @param table\n * @param absoluteX\n * @returns\n */\n getTargetRowAt(absoluteY: number): { row: number; top: number; bottom: number; height: number } | null {\n if (absoluteY === 0) {\n return { top: 0, row: 0, bottom: 0, height: 0 };\n }\n\n const findBefore = (\n startRow: number,\n startBottom: number\n ): {\n top: number;\n row: number;\n bottom: number;\n height: number;\n } | null => {\n let bottom = startBottom;\n for (let row = startRow; row >= 0; row--) {\n const height = this.getRowHeight(row);\n const top = bottom - height;\n if (Math.round(top) <= Math.round(absoluteY) && Math.round(absoluteY) < Math.round(bottom)) {\n return {\n top,\n row,\n bottom,\n height\n };\n }\n bottom = top;\n }\n return null;\n };\n const findAfter = (\n startRow: number,\n startBottom: number\n ): {\n top: number;\n row: number;\n bottom: number;\n height: number;\n } | null => {\n let top = startBottom - this.getRowHeight(startRow);\n const { rowCount } = this.internalProps;\n for (let row = startRow; row < rowCount; row++) {\n const height = this.getRowHeight(row);\n const bottom = top + height;\n if (Math.round(top) <= Math.round(absoluteY) && Math.round(absoluteY) < Math.round(bottom)) {\n return {\n top,\n row,\n bottom,\n height\n };\n }\n top = bottom;\n }\n return null;\n };\n // const candRow = Math.min(\n // Math.ceil(absoluteY / this.internalProps.defaultRowHeight),\n // this.rowCount - 1\n // );\n //计算这个位置处是第几行\n const candRow = this.computeTargetRowByY(absoluteY);\n const bottom = this.getRowsHeight(0, candRow);\n if (absoluteY >= bottom) {\n return findAfter(candRow, bottom);\n }\n return findBefore(candRow, bottom);\n }\n /**\n * 根据y值(包括了scroll的)计算所在行\n * @param this\n * @param absoluteY 左边y值,包含了scroll滚动距离\n * @returns\n */\n private computeTargetRowByY(absoluteY: number): number {\n //此方式效率太低,借助缓存,或者大约计算出一个值\n // this.rowHeightsMap.each(0, this.rowCount - 1, (height: number, row: number): boolean | void => {\n // h += height || this.internalProps.defaultRowHeight;\n // if (h > absoluteY) {\n // targetRow = row;\n // return false;\n // }\n // });\n //使用二分法计算出row\n if (this._rowRangeHeightsMap.get(`$0$${this.rowCount - 1}`)) {\n let startRow = 0;\n let endRow = this.rowCount - 1;\n while (endRow - startRow > 1) {\n const midRow = Math.floor((startRow + endRow) / 2);\n if (absoluteY < this._rowRangeHeightsMap.get(`$0$${midRow}`)) {\n endRow = midRow;\n } else if (absoluteY > this._rowRangeHeightsMap.get(`$0$${midRow}`)) {\n startRow = midRow;\n } else {\n return midRow;\n }\n }\n return endRow;\n // if (this._rowRangeHeightsMap.get[`$0$${endRow}`] === absoluteY) return endRow;\n // if (this._rowRangeHeightsMap.get[`$0$${startRow}`] === absoluteY) return startRow;\n }\n //否则使用defaultRowHeight大约计算一个row\n return Math.min(Math.ceil(absoluteY / this.internalProps.defaultRowHeight), this.rowCount - 1);\n }\n /**\n * 根据x值(包括了scroll的)计算所在列 主要借助colRangeWidthsMap缓存来提高计算效率\n * @param this\n * @param absoluteX 左边x值,包含了scroll滚动距离\n * @returns\n */\n private computeTargetColByX(absoluteX: number): number {\n //使用二分法计算出col\n if (this._colRangeWidthsMap.get(`$0$${this.colCount - 1}`)) {\n let startCol = 0;\n let endCol = this.colCount - 1;\n while (endCol - startCol > 1) {\n const midCol = Math.floor((startCol + endCol) / 2);\n if (absoluteX < this._colRangeWidthsMap.get(`$0$${midCol}`)) {\n endCol = midCol;\n } else if (absoluteX > this._colRangeWidthsMap.get(`$0$${midCol}`)) {\n startCol = midCol;\n } else {\n return midCol;\n }\n }\n return endCol;\n }\n //否则使用defaultColWidth大约计算一个col\n return Math.min(Math.ceil(absoluteX / this.internalProps.defaultColWidth), this.colCount - 1);\n }\n /**\n * 清除选中单元格\n */\n clearSelected() {\n this.stateManager.updateSelectPos(-1, -1);\n }\n /**\n * 选中单元格 和鼠标选中单元格效果一致\n * @param col\n * @param row\n */\n selectCell(col: number, row: number) {\n this.stateManager.updateSelectPos(col, row);\n this.stateManager.endSelectCells();\n }\n /**\n * 选中单元格区域,可设置多个区域同时选中\n * @param cellRanges: CellRange[]\n */\n selectCells(cellRanges: CellRange[]) {\n const { scrollLeft, scrollTop } = this;\n cellRanges.forEach((cellRange: CellRange, index: number) => {\n if (cellRange.start.col === cellRange.end.col && cellRange.start.row === cellRange.end.row) {\n this.stateManager.updateSelectPos(cellRange.start.col, cellRange.start.row, false, index >= 1);\n } else {\n this.stateManager.updateSelectPos(cellRange.start.col, cellRange.start.row, false, index >= 1);\n this.stateManager.updateInteractionState(InteractionState.grabing);\n this.stateManager.updateSelectPos(cellRange.end.col, cellRange.end.row, false, index >= 1);\n }\n this.stateManager.endSelectCells(false);\n this.stateManager.updateInteractionState(InteractionState.default);\n });\n // 选择后 会自动滚动到所选区域最后一行一列的位置 这里再设置回滚动前位置\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n abstract isListTable(): boolean;\n abstract isPivotTable(): boolean;\n abstract isPivotChart(): boolean;\n\n protected abstract _getSortFuncFromHeaderOption(\n columns: ColumnsDefine | undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: string) => 0 | 1 | -1) | undefined;\n abstract setRecords(records: Array<any>, sort?: SortState | SortState[]): void;\n abstract refreshHeader(): void;\n abstract refreshRowColCount(): void;\n abstract getHierarchyState(col: number, row: number): HierarchyState | null;\n abstract toggleHierarchyState(col: number, row: number): void;\n abstract _hasHierarchyTreeHeader(): boolean;\n abstract getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo;\n abstract moveHeaderPosition(source: CellAddress, target: CellAddress): boolean;\n /** @private */\n // abstract getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData;\n abstract getRecordShowIndexByCell(col: number, row: number): number;\n abstract getCellOriginRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellRawRecord(col: number, row: number): MaybePromiseOrUndefined;\n abstract getCellValue(col: number, row: number): FieldData;\n abstract getCellOriginValue(col: number, row: number): FieldData;\n abstract getCellRawValue(col: number, row: number): FieldData;\n\n abstract getTableIndexByRecordIndex(recordIndex: number): number;\n abstract getTableIndexByField(field: FieldDef): number;\n abstract getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress;\n /**\n * 更新页码\n * @param pagination 要修改页码的信息\n */\n abstract updatePagination(pagination: IPagination): void;\n get allowFrozenColCount(): number {\n return this.internalProps.allowFrozenColCount;\n }\n\n /**\n * Get the number of cols that are row header.\n */\n get rowHeaderLevelCount(): number {\n return this.internalProps.layoutMap.rowHeaderLevelCount;\n }\n /**\n * Get the number of rows that are col header.\n */\n get columnHeaderLevelCount(): number {\n return this.internalProps.layoutMap.columnHeaderLevelCount;\n }\n /**\n * Get the records.\n */\n get records(): any {\n return this.internalProps.records;\n }\n /**\n * Get the data source.\n */\n get dataSource(): DataSource | CachedDataSource {\n return this.internalProps.dataSource;\n }\n /**\n * Set the data source from given\n */\n set dataSource(dataSource: DataSource | CachedDataSource) {\n // 清空单元格内容\n this.scenegraph.clearCells();\n _setDataSource(this, dataSource);\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n /**\n * Get the autoWrapText.\n */\n get autoWrapText(): boolean {\n return this.internalProps.autoWrapText;\n }\n /**\n * Set the autoWrapText\n */\n set autoWrapText(autoWrapText: boolean) {\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n }\n updateAutoWrapText(autoWrapText: boolean) {\n if (this.internalProps.autoWrapText === autoWrapText) {\n return;\n }\n this.internalProps.autoWrapText = autoWrapText;\n this.options.autoWrapText = autoWrapText;\n // if (this.heightMode === 'autoHeight' || this.heightMode === 'adaptive') {\n this.scenegraph.clearCells();\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.scenegraph.createSceneGraph();\n this.render();\n // }\n }\n\n /**\n * 获取当前使用的主题\n */\n get theme(): TableTheme {\n return this.internalProps.theme;\n }\n set theme(theme: TableTheme) {\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.options.theme = theme;\n }\n /**\n * 设置主题\n */\n updateTheme(theme: ITableThemeDefine) {\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.internalProps.theme = themes.of(theme ?? themes.DEFAULT);\n this.options.theme = theme;\n this.scenegraph.updateStageBackground();\n this.scenegraph.clearCells();\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.render();\n }\n\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getBodyField(col: number, row: number): FieldDef | undefined {\n return this.internalProps.layoutMap.getBody(col, row).field;\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getBodyColumnDefine(col: number, row: number): ColumnDefine {\n // TODO: 暂时修复透视表报错\n const body = this.internalProps.layoutMap.getBody(col, row);\n return body?.define;\n }\n\n getBodyColumnType(col: number, row: number): ColumnTypeOption {\n const cellType = this.internalProps.layoutMap.getBody(col, row).cellType;\n return getProp('cellType', { cellType }, col, row, this);\n }\n /**\n * 根据行列号获取对应的字段名\n * @param {number} col column index.\n * @param {number} row row index.\n */\n getHeaderField(col: number, row: number): FieldDef {\n return this.internalProps.layoutMap.getHeaderField(col, row);\n }\n getHeaderFieldKey(col: number, row: number): FieldDef {\n return this.internalProps.layoutMap.getHeaderFieldKey(col, row);\n }\n /**\n * 根据行列号获取配置\n * @param {number} col column index.\n * @param {number} row row index.\n * @return {ColumnDefine} The column define object.\n */\n getHeaderDefine(col: number, row: number): ColumnDefine {\n const hd = this.internalProps.layoutMap.getHeader(col, row);\n return hd?.define;\n }\n getCellLocation(col: number, row: number): CellLocation {\n const hdType = this.internalProps.layoutMap.getCellLocation(col, row);\n return hdType;\n }\n /**\n * 获取行列表头的路径\n * @param col\n * @param row\n * @returns 返回结构{\n colHeaderPaths?: any[];\n rowHeaderPaths?: any[];\n}\n */\n getCellHeaderPaths(col: number, row: number): ICellHeaderPaths {\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n return cellHeaderPaths;\n }\n /**\n * Get the headers define of the given column.\n * @param {number} col The column index.\n * @return {*} The array of header define object.\n */\n getHeadersDefine(col: number, row: number): ColumnDefine[] {\n const headers = [];\n while (true) {\n const header = this.getHeaderDefine(col, row);\n if (header && (header.field || header.columns)) {\n headers.push(header);\n } else {\n break;\n }\n\n row++;\n }\n\n return headers;\n }\n _getHeaderLayoutMap(col: number, row: number): HeaderData {\n return this.internalProps.layoutMap.getHeader(col, row);\n }\n _getBodyLayoutMap(col: number, row: number): ColumnData | IndicatorData {\n return this.internalProps.layoutMap.getBody(col, row);\n }\n /** 获取绘制画布的canvas上下文 */\n getContext(): CanvasRenderingContext2D {\n return this.internalProps.context;\n }\n /**\n * 根据行列号获取整条数据记录\n * @param {number} col col index.\n * @param {number} row row index.\n * @return {object} record.\n */\n getRecordByCell(col: number, row: number): MaybePromiseOrUndefined {\n if (this.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n return this.internalProps.dataSource?.get(this.getRecordShowIndexByCell(col, row));\n }\n /** @deprecated 请使用getRecordByCell */\n getRecordByRowCol(col: number, row: number) {\n return this.getRecordByCell(col, row);\n }\n\n /**\n * 根据数据的索引获取应该显示在body的第几行\n * @param {number} index The record index.\n */\n getRecordStartRowByRecordIndex(index: number): number {\n return this.internalProps.layoutMap.getRecordStartRowByRecordIndex(index);\n }\n /**\n * 根据给定的排序状态 获取对应的表格单元格信息\n * @param sortState\n * @returns\n */\n _getHeaderCellBySortState(sortState: SortState): CellAddress | undefined {\n const { layoutMap } = this.internalProps;\n let hd;\n if (sortState.fieldKey) {\n hd = layoutMap.headerObjects.find((col: any) => col && col.fieldKey === sortState.fieldKey);\n } else {\n hd = layoutMap.headerObjects.find((col: any) => col && col.field === sortState.field);\n }\n if (hd) {\n const headercell = layoutMap.getHeaderCellAdressById(hd.id as number);\n return headercell;\n }\n return undefined;\n }\n\n /**\n * 获取给定单元格的范围 如果是合并单元格,则返回合并单元格的范围\n */\n getCellRange(col: number, row: number): CellRange {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (customMerge && customMerge.range && customMerge.text) {\n return customMerge.range;\n }\n }\n return this.internalProps.layoutMap.getCellRange(col, row);\n }\n\n getCustomMerge(col: number, row: number) {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.internalProps.customMergeCell(col, row, this);\n if (customMerge && customMerge.range && customMerge.text) {\n if (customMerge.style) {\n const styleClass = this.internalProps.bodyHelper.getStyleClass('text');\n const style = customMerge.style;\n const fullStyle = <FullExtendStyle>columnStyleContents.of(\n style,\n this.theme.bodyStyle,\n {\n col,\n row,\n table: this,\n value: customMerge.text,\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText\n );\n customMerge.style = fullStyle;\n }\n return customMerge;\n }\n }\n return undefined;\n }\n\n /**\n * 判断两个单元格是否是属于同一个合并区域\n * @param col\n * @param row\n * @param targetCol\n * @param targetRow\n * @returns\n */\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n return this.internalProps.layoutMap.isCellRangeEqual(col, row, targetCol, targetRow);\n }\n /**\n * 根据行列号获取布局id\n * @param col\n * @param row\n * @returns\n */\n _getLayoutCellId(col: number, row: number): LayoutObjectId {\n return this.internalProps.layoutMap.getCellId(col, row);\n }\n /**\n * 获取表头的描述信息\n * @param col\n * @param row\n * @returns\n */\n getHeaderDescription(col: number, row: number): string | undefined {\n const field = this._getHeaderLayoutMap(col, row);\n const fieldDef = field?.define;\n const description = fieldDef?.description ?? field?.description;\n if (typeof description === 'function') {\n const arg: CellInfo = {\n col,\n row,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row)\n };\n return description(arg);\n }\n return description;\n }\n\n setDropDownMenuHighlight(cells: DropDownMenuHighlightInfo[]): void {\n this.stateManager.setDropDownMenuHighlight(cells);\n }\n _dropDownMenuIsHighlight(colNow: number, rowNow: number, index: number): boolean {\n return this.stateManager.dropDownMenuIsHighlight(colNow, rowNow, index);\n }\n\n /** 判断单元格是否属于表头部分 */\n isHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap && this.internalProps.layoutMap.isHeader(col, row);\n }\n /** 判断单元格是否属于列表头部分 */\n isColumnHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isColumnHeader(col, row);\n }\n /** 判断单元格是否属于行表头部分 */\n isRowHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isRowHeader(col, row);\n }\n /** 判断单元格是否属于角表头部分 */\n isCornerHeader(col: number, row: number): boolean {\n return this.internalProps.layoutMap?.isCornerHeader(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenColumn(col, row);\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isLeftFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenColumn(col, row);\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isRightFrozenColumn(col, row);\n }\n\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenRow(col, row);\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isTopFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isFrozenRow(col, row);\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n return this.internalProps.layoutMap?.isBottomFrozenRow(col, row);\n }\n /** 获取单元格的基本信息 目前主要组织单元格信息给事件传递给用户的参数使用 */\n getCellInfo(col: number, row: number): Omit<MousePointerCellEvent, 'target'> {\n const colDef = this.isHeader(col, row) ? this.getHeaderDefine(col, row) : this.getBodyColumnDefine(col, row);\n return {\n col,\n row,\n field: this.getHeaderField(col, row),\n cellHeaderPaths: this.internalProps.layoutMap.getCellHeaderPaths(col, row),\n title: colDef?.title,\n cellType: colDef?.cellType ? (typeof colDef.cellType === 'string' ? colDef.cellType : 'progressbar') : 'text',\n originData: this.getCellOriginRecord(col, row),\n cellRange: this.getCellRangeRelativeRect({ col, row }),\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n scaleRatio: this.canvas.getBoundingClientRect().width / this.canvas.offsetWidth\n };\n }\n /** @private */\n _hasField(field: FieldDef, col: number, row: number): boolean {\n if (field == null) {\n return false;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return false;\n }\n const index = table.getRecordShowIndexByCell(col, row);\n return table.internalProps.dataSource.hasField(index, field);\n }\n /**\n * 获取单元格的样式 内部逻辑使用 获取到的样式并不是计算后的\n * @param col\n * @param row\n * @returns\n */\n _getCellStyle(col: number, row: number): FullExtendStyle {\n const { layoutMap } = this.internalProps;\n const isHeader = layoutMap.isHeader(col, row);\n if (isHeader) {\n let cacheStyle = this.headerStyleCache.get(`${col}-${row}`);\n if (cacheStyle) {\n return cacheStyle;\n }\n const hd = layoutMap.getHeader(col, row);\n\n let paddingForAxis;\n if (this.isPivotChart() && isTopOrBottomAxis(col, row, layoutMap as PivotHeaderLayoutMap)) {\n // get chart padding for axis cell\n const chartColumn = layoutMap.getBody(col, this.rowHeaderLevelCount);\n const padding = (chartColumn.style as any)?.padding ?? this.theme.bodyStyle.padding;\n paddingForAxis = padding;\n } else if (this.isPivotChart() && isLeftOrRightAxis(col, row, layoutMap as PivotHeaderLayoutMap)) {\n // get chart padding for axis cell\n const chartColumn = layoutMap.getBody(this.columnHeaderLevelCount, row);\n const padding = (chartColumn.style as any)?.padding ?? this.theme.bodyStyle.padding;\n paddingForAxis = padding;\n }\n\n if (\n (!hd || hd.isEmpty) &&\n (layoutMap.isLeftBottomCorner(col, row) ||\n layoutMap.isRightBottomCorner(col, row) ||\n layoutMap.isCornerHeader(col, row) ||\n layoutMap.isRightTopCorner(col, row))\n ) {\n return EMPTY_STYLE;\n }\n\n const styleClass = this.internalProps.headerHelper.getStyleClass(hd?.headerType || 'text');\n if (layoutMap.isBottomFrozenRow(col, row) && this.theme.bottomFrozenStyle) {\n cacheStyle = <FullExtendStyle>headerStyleContents.of(\n paddingForAxis ? { padding: paddingForAxis } : {},\n this.theme.bottomFrozenStyle,\n {\n col,\n row,\n table: this as BaseTableAPI,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText\n );\n } else if (layoutMap.isRightFrozenColumn(col, row) && this.theme.rightFrozenStyle) {\n cacheStyle = <FullExtendStyle>headerStyleContents.of(\n paddingForAxis ? { padding: paddingForAxis } : {},\n this.theme.rightFrozenStyle,\n {\n col,\n row,\n table: this as BaseTableAPI,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText\n );\n } else {\n // const styleClass = hd.headerType.StyleClass; //BaseHeader文件\n // const { style } = hd;\n const style = hd?.style || {};\n if (paddingForAxis) {\n (style as any).padding = paddingForAxis;\n }\n cacheStyle = <FullExtendStyle>headerStyleContents.of(\n style,\n layoutMap.isColumnHeader(col, row) || layoutMap.isBottomFrozenRow(col, row)\n ? this.theme.headerStyle\n : layoutMap.isRowHeader(col, row) || layoutMap.isRightFrozenColumn(col, row)\n ? this.theme.rowHeaderStyle\n : this.theme.cornerHeaderStyle,\n {\n col,\n row,\n table: this as BaseTableAPI,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText\n );\n }\n this.headerStyleCache.set(`${col}-${row}`, cacheStyle);\n return cacheStyle;\n }\n let cacheKey;\n //如果是主体部分,获取相应的style\n if (\n (this.isListTable() && !(this as any).transpose) ||\n (this.isPivotTable() && (this.internalProps.layoutMap as PivotHeaderLayoutMap).indicatorsAsCol)\n ) {\n cacheKey = col;\n } else {\n cacheKey = row;\n }\n let cacheStyle = this.bodyStyleCache.get(cacheKey);\n if (cacheStyle) {\n return cacheStyle;\n }\n const column = layoutMap.getBody(col, row);\n // const styleClass = column?.cellType?.StyleClass; //BaseColumn文件\n const styleClass = this.internalProps.bodyHelper.getStyleClass(column.cellType);\n const style = column?.style;\n cacheStyle = <FullExtendStyle>columnStyleContents.of(\n style,\n this.theme.bodyStyle,\n {\n col,\n row,\n table: this,\n value: this.getCellValue(col, row),\n dataValue: this.getCellOriginValue(col, row),\n cellHeaderPaths: this.getCellHeaderPaths(col, row)\n },\n styleClass,\n this.options.autoWrapText\n );\n if (!isFunction(style)) {\n this.bodyStyleCache.set(cacheKey, cacheStyle);\n }\n return cacheStyle;\n }\n clearCellStyleCache() {\n this.headerStyleCache.clear();\n }\n /**\n * 清除行高度缓存对象\n */\n clearRowHeightCache() {\n this.internalProps._rowHeightsMap.clear();\n this._clearRowRangeHeightsMap();\n }\n /**\n * 清除列宽度缓存对象\n */\n clearColWidthCache() {\n this.internalProps._colWidthsMap.clear();\n this._clearColRangeWidthsMap();\n }\n /**\n * 该列是否可调整列宽\n * @param col\n * @returns\n */\n _canResizeColumn(col: number, row: number): boolean {\n if (!(col >= 0 && row >= 0)) {\n return false;\n }\n if (this.isCellRangeEqual(col, row, col + 1, row)) {\n return false;\n }\n\n if (this.internalProps.columnResizeMode === 'none') {\n return false;\n } else if (this.internalProps.columnResizeMode === 'header') {\n // 判断表头\n if (!this.isHeader(col, row)) {\n return false;\n }\n } else if (this.internalProps.columnResizeMode === 'body') {\n // 判断内容\n if (this.isHeader(col, row)) {\n return false;\n }\n }\n\n // if (this.rightFrozenColCount && col >= this.colCount - this.rightFrozenColCount - 1) {\n // // right frozen columns can not resize temply\n // return false;\n // }\n\n const limit = this.colWidthsLimit[col];\n if (!limit || !limit.min || !limit.max) {\n return true;\n }\n return limit.max !== limit.min;\n }\n /**\n * 选中位置是否可拖拽调整位置\n * @param col\n * @returns\n */\n _canDragHeaderPosition(col: number, row: number): boolean {\n if (this.isHeader(col, row) && this.stateManager.isSelected(col, row)) {\n const selectRange = this.stateManager.select.ranges[0];\n //判断是否整行或者整列选中\n if (this.isColumnHeader(col, row)) {\n if (selectRange.end.row !== this.rowCount - 1) {\n return false;\n }\n } else if (this.isRowHeader(col, row)) {\n if (selectRange.end.col !== this.colCount - 1) {\n return false;\n }\n } else {\n return false;\n }\n const define = this.getHeaderDefine(col, row);\n if (!define) {\n return false;\n }\n if (define.dragHeader === undefined) {\n if (this.internalProps.dragHeaderMode === 'all') {\n return true;\n } else if (this.internalProps.dragHeaderMode === 'column') {\n if (this.isColumnHeader(col, row)) {\n return true;\n }\n } else if (this.internalProps.dragHeaderMode === 'row') {\n if (this.isRowHeader(col, row)) {\n return true;\n }\n }\n return false;\n }\n return define.dragHeader;\n }\n return false;\n }\n\n /**\n * 获取某个单元格所配置的所有图标\n */\n getCellIcons(col: number, row: number): ColumnIconOption[] {\n let icons;\n if (this.isHeader(col, row)) {\n icons = this.internalProps.headerHelper.getIcons(col, row);\n } else {\n const cellValue = this.getCellValue(col, row);\n const dataValue = this.getCellOriginValue(col, row);\n const ctx = this.internalProps.context;\n icons = this.internalProps.bodyHelper.getIcons(col, row, cellValue, dataValue, ctx);\n }\n return icons;\n }\n\n /** 指定某个单元格显示下拉菜单【内容可以自定义为menu数组或者dom】 */\n showDropDownMenu(col: number, row: number, dropDownMenuOptions?: DropDownMenuOptions) {\n let menuType: MenuInstanceType = 'dropdown-menu';\n if (dropDownMenuOptions) {\n menuType = Array.isArray(dropDownMenuOptions.content) ? 'dropdown-menu' : 'container';\n }\n if (this.internalProps.menu.renderMode === 'html') {\n this.stateManager.menu.isShow = true;\n this.internalProps.menuHandler._bindToCell(col, row, menuType, dropDownMenuOptions);\n }\n // this.stateManager.showDropDownMenu(col,row,) //最好和这个保持一致\n }\n /** 暂时只支持全局设置了tooltip.renderMode='html',调用该接口才有效 */\n showTooltip(col: number, row: number, tooltipOptions?: TooltipOptions) {\n // this.drawHoverIconTooltip();\n if (this.internalProps.tooltip.renderMode === 'html') {\n this.internalProps.tooltipHandler._bindToCell(col, row, tooltipOptions);\n }\n }\n /**\n * 获取某个单元格的样式 供业务方调用\n * @param col\n * @param row\n */\n getCellStyle(col: number, row: number): CellStyle {\n const actStyle = this._getCellStyle(col, row);\n\n const theme = getStyleTheme(actStyle, this, col, row, getProp).theme;\n\n const { autoWrapText, lineClamp, textOverflow } = actStyle;\n\n return {\n textAlign: theme.text.textAlign,\n textBaseline: theme.text.textBaseline,\n bgColor: isBoolean(theme.group.fill)\n ? getProp('bgColor', actStyle, col, row, this)\n : (theme.group.fill as string),\n color: isBoolean(theme.text.fill) ? getProp('color', actStyle, col, row, this) : (theme.text.fill as string),\n fontFamily: theme.text.fontFamily,\n fontSize: theme.text.fontSize,\n fontWeight: theme.text.fontWeight,\n fontVariant: theme.text.fontVariant,\n fontStyle: theme.text.fontStyle,\n lineHeight: theme.text.lineHeight as number,\n autoWrapText: autoWrapText ?? false,\n lineClamp: lineClamp ?? 'auto',\n textOverflow,\n borderColor: isBoolean(theme.group.stroke)\n ? getProp('borderColor', actStyle, col, row, this)\n : (theme.group.stroke as string | string[]),\n borderLineWidth: theme.group.lineWidth,\n borderLineDash: theme.group.lineDash,\n underline: !!theme.text.underline,\n // underlineColor: theme.text.underlineColor,\n // underlineDash: theme.text.underlineDash,\n lineThrough: !!theme.text.lineThrough,\n // lineThroughColor: theme.text.lineThroughColor,\n // lineThroughDash: (theme.text as any).lineThroughDash\n padding: theme._vtable.padding,\n underlineWidth: theme.text.underline,\n lineThroughLineWidth: theme.text.lineThrough\n };\n }\n /**\n * 获取所有body单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllBodyCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: this.columnHeaderLevelCount };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有单元格数据信息\n * @param colMaxCount 限制获取最多列数\n * @param rowMaxCount 限制获取最多行数\n * @returns CellInfo[][]\n */\n getAllCells(colMaxCount?: number, rowMaxCount?: number): CellInfo[][] {\n const start = { col: 0, row: 0 };\n const end = { col: this.colCount - 1, row: this.rowCount - 1 };\n return Array(Math.min(rowMaxCount ?? 2000, end.row - start.row + 1, this.rowCount))\n .fill(0)\n .map((_, i) =>\n Array(Math.min(colMaxCount ?? 2000, end.col - start.col + 1, this.colCount))\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有列表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllColumnHeaderCells(): CellInfo[][] {\n const start = { col: this.rowHeaderLevelCount, row: 0 };\n const end = { col: this.colCount - 1, row: this.columnHeaderLevelCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 获取所有行表头单元格数据信息\n * @returns CellInfo[][]\n */\n getAllRowHeaderCells(): CellInfo[][] {\n const start = { col: 0, row: this.columnHeaderLevelCount };\n const end = { col: this.rowHeaderLevelCount - 1, row: this.rowCount - 1 };\n return Array(end.row - start.row + 1)\n .fill(0)\n .map((_, i) =>\n Array(end.col - start.col + 1)\n .fill(0)\n .map((_, j) => this.getCellInfo(j + start.col, i + start.row))\n );\n }\n /**\n * 滚动到具体某个单元格位置\n * @param cellAddr 要滚动到的单元格位置\n */\n scrollToCell(cellAddr: { col?: number; row?: number }) {\n const drawRange = this.getDrawRange();\n if (isValid(cellAddr.col) && cellAddr.col >= this.frozenColCount) {\n const frozenWidth = this.getFrozenColsWidth();\n const left = this.getColsWidth(0, cellAddr.col - 1);\n this.scrollLeft = Math.min(left - frozenWidth, this.getAllColsWidth() - drawRange.width);\n }\n if (isValid(cellAddr.row) && cellAddr.row >= this.frozenRowCount) {\n const frozenHeight = this.getFrozenRowsHeight();\n const top = this.getRowsHeight(0, cellAddr.row - 1);\n this.scrollTop = Math.min(top - frozenHeight, this.getAllRowsHeight() - drawRange.height);\n }\n this.render();\n }\n\n /**获取选中区域的内容 作为复制内容 */\n getCopyValue(): string | null {\n if (this.stateManager.select?.ranges?.length > 0) {\n const ranges = this.stateManager.select.ranges;\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n const getCopyCellValue = (col: number, row: number, range?: CellRange): string | Promise<string> | void => {\n const cellRange = this.getCellRange(col, row);\n let copyStartCol = cellRange.start.col;\n let copyStartRow = cellRange.start.row;\n if (range) {\n const rangeMinCol = Math.min(range.start.col, range.end.col);\n const rangeMinRow = Math.min(range.start.row, range.end.row);\n copyStartCol = Math.max(rangeMinCol, cellRange.start.col);\n copyStartRow = Math.max(rangeMinRow, cellRange.start.row);\n }\n\n if (copyStartCol !== col || copyStartRow !== row) {\n return '';\n }\n\n const value = this.getCellValue(col, row);\n return value;\n };\n let copyValue = '';\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const copyCellValue = getCopyCellValue(c, r, range);\n if (typeof Promise !== 'undefined' && copyCellValue instanceof Promise) {\n //无法获取异步数据\n } else {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const strCellValue = `${copyCellValue}`;\n if (/^\\[object .*\\]$/.exec(strCellValue)) {\n //object 对象忽略掉\n } else {\n copyValue += strCellValue;\n }\n }\n if (c < range.end.col || c < maxCol) {\n copyValue += '\\t';\n }\n } else {\n copyValue += '\\t';\n }\n }\n }\n copyValue += '\\n';\n }\n }\n return copyValue;\n }\n return '';\n }\n\n /**获取选中区域的每个单元格详情 */\n getSelectedCellInfos(): CellInfo[][] | null {\n if (!this.stateManager.select?.ranges) {\n return null;\n }\n\n const ranges = this.stateManager.select.ranges;\n if (!ranges.length) {\n return [];\n }\n let minCol = Math.min(ranges[0].start.col, ranges[0].end.col);\n let maxCol = Math.max(ranges[0].start.col, ranges[0].end.col);\n let minRow = Math.min(ranges[0].start.row, ranges[0].end.row);\n let maxRow = Math.max(ranges[0].start.row, ranges[0].end.row);\n ranges.forEach((a: CellRange) => {\n minCol = Math.min(minCol, a.start.col, a.end.col);\n maxCol = Math.max(maxCol, a.start.col, a.end.col);\n minRow = Math.min(minRow, a.start.row, a.end.row);\n maxRow = Math.max(maxRow, a.start.row, a.end.row);\n // return a.start.row - b.start.row || a.start.col - b.start.col\n });\n const isExistDataInRow = (r: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n if (minRow <= r && maxRow >= r) {\n isExist = true;\n }\n });\n return isExist;\n };\n const isExistDataInCol = (c: number) => {\n let isExist = false;\n ranges.forEach((range: CellRange) => {\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c) {\n isExist = true;\n }\n });\n return isExist;\n };\n\n const getRangeExistDataInCell = (c: number, r: number) => {\n let isExistRange;\n ranges.forEach((range: CellRange) => {\n const minRow = Math.min(range.start.row, range.end.row);\n const maxRow = Math.max(range.start.row, range.end.row);\n const minCol = Math.min(range.start.col, range.end.col);\n const maxCol = Math.max(range.start.col, range.end.col);\n if (minCol <= c && maxCol >= c && minRow <= r && maxRow >= r) {\n isExistRange = range;\n }\n });\n return isExistRange;\n };\n\n const cellInfoArray: CellInfo[][] = [];\n\n for (let r = minRow; r <= maxRow; r++) {\n const isExistData = isExistDataInRow(r);\n if (isExistData) {\n const cellInfoRow: CellInfo[] = [];\n for (let c = minCol; c <= maxCol; c++) {\n const isExistDataCol = isExistDataInCol(c);\n if (isExistDataCol) {\n const range: CellRange | undefined = getRangeExistDataInCell(c, r);\n if (range) {\n const cellInfo = this.getCellInfo(c, r);\n cellInfoRow.push(cellInfo);\n }\n }\n }\n cellInfoArray.push(cellInfoRow);\n }\n }\n return cellInfoArray;\n }\n /** 计算字体的宽度接口 */\n measureText(text: string, font: { fontSize: number; fontWeight: string | number; fontFamily: string }): ITextSize {\n return textMeasure.measureText(text, font);\n }\n\n /** 获取单元格上定义的自定义渲染配置 */\n getCustomRender(col: number, row: number): ICustomRender {\n let customRender;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customRender = define?.headerCustomRender;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customRender = define?.customRender || this.customRender;\n }\n return customRender;\n }\n /** 获取单元格上定义的自定义布局元素配置 */\n getCustomLayout(col: number, row: number): ICustomLayout {\n let customLayout;\n if (this.getCellLocation(col, row) !== 'body') {\n const define = this.getHeaderDefine(col, row);\n customLayout = define?.headerCustomLayout;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n customLayout = define?.customLayout;\n }\n return customLayout;\n }\n\n hasAutoImageColumn() {\n return (this.internalProps.layoutMap.columnObjects as ColumnData[]).find((column: ColumnData) => {\n if (\n (column.cellType === 'image' || typeof column.cellType === 'function') &&\n (column.define as ImageColumnDefine).imageAutoSizing\n ) {\n return true;\n }\n return false;\n });\n }\n /** 获取当前hover单元格的图表实例。这个方法hover实时获取有点缺陷:鼠标hover到单元格上触发了 chart.ts中的activate方法 但此时this.stateManager.hover?.cellPos?.col还是-1 */\n _getActiveChartInstance() {\n // 根据hover的单元格位置 获取单元格实例 拿到chart图元\n const cellGroup = this.scenegraph.getCell(\n this.stateManager.hover?.cellPos?.col,\n this.stateManager.hover?.cellPos?.row\n );\n return cellGroup?.getChildren()?.[0]?.type === 'chart'\n ? (cellGroup.getChildren()[0] as Chart).activeChartInstance\n : null;\n }\n\n /**\n * 判断单元格是否在显示区域\n * @param col\n * @param row\n */\n cellIsInVisualView(col: number, row: number) {\n const drawRange = this.getDrawRange();\n const rect = this.getCellRelativeRect(col, row);\n\n if (col < this.frozenColCount && row < this.frozenRowCount) {\n return true;\n }\n if (\n rect.top >= drawRange.top &&\n rect.bottom <= drawRange.bottom &&\n rect.left >= drawRange.left &&\n rect.right <= drawRange.right\n ) {\n return true;\n }\n return false;\n }\n\n getCustomMergeValue(col: number, row: number): string | undefined {\n if (this.internalProps.customMergeCell) {\n const customMerge = this.getCustomMerge(col, row);\n if (customMerge) {\n const { text } = customMerge;\n return text;\n }\n }\n return undefined;\n }\n\n /**\n * 导出表格中当前可视区域的图片\n * @returns base64图片\n */\n exportImg() {\n const c = this.scenegraph.stage.toCanvas();\n return c.toDataURL();\n }\n\n /**\n * 导出某个单元格图片\n * @returns base64图片\n */\n exportCellImg(col: number, row: number) {\n const isInView = this.cellIsInVisualView(col, row);\n const { scrollTop, scrollLeft } = this;\n if (!isInView) {\n this.scrollToCell({ col, row });\n }\n const cellRect = this.getCellRelativeRect(col, row);\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX,\n cellRect.bottom + this.tableY\n )\n );\n if (!isInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n // return c.toDataURL('image/jpeg', 0.5);\n return c.toDataURL();\n }\n\n /**\n * 导出某一片区域的图片\n * @returns base64图片\n */\n exportCellRangeImg(cellRange: CellRange) {\n const { scrollTop, scrollLeft } = this;\n const minCol = Math.min(cellRange.start.col, cellRange.end.col);\n const minRow = Math.min(cellRange.start.row, cellRange.end.row);\n const maxCol = Math.max(cellRange.start.col, cellRange.end.col);\n const maxRow = Math.max(cellRange.start.row, cellRange.end.row);\n const isInView = this.cellIsInVisualView(minCol, minRow);\n const isMaxCellInView = this.cellIsInVisualView(maxCol, maxRow);\n // 判断如果超出可视区域 做移动\n if (!isInView || !isMaxCellInView) {\n this.scrollToCell({ col: minCol, row: minRow });\n }\n\n const cellRect = this.getCellRangeRelativeRect({\n start: { col: minCol, row: minRow },\n end: { col: maxCol, row: maxRow }\n });\n const c = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(\n cellRect.left + this.tableX + 1,\n cellRect.top + this.tableY + 1,\n cellRect.right + this.tableX,\n cellRect.bottom + this.tableY\n )\n );\n const base64Image = c.toDataURL();\n // 前面做的移动需要再复原\n if (!isInView || !isMaxCellInView) {\n this.setScrollTop(scrollTop);\n this.setScrollLeft(scrollLeft);\n }\n return base64Image;\n }\n\n exportCanvas() {\n const c = this.scenegraph.stage.toCanvas();\n return c;\n }\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer(type: string = 'image/png') {\n if (this.options.mode !== 'node') {\n console.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n this.render();\n const stage = this.scenegraph.stage;\n if (stage) {\n const contentWidth = this.tableX + this.getAllColsWidth();\n const contentHeight = this.tableY + this.getAllRowsHeight();\n if (contentWidth >= this.canvasWidth && contentHeight >= this.canvasHeight) {\n stage.render();\n const buffer = stage.window.getImageBuffer(type);\n return buffer;\n }\n const newCanvas = this.scenegraph.stage.toCanvas(\n false,\n new AABBBounds().set(0, 0, Math.min(this.canvasWidth, contentWidth), Math.min(this.canvasHeight, contentHeight))\n );\n const buffer = (newCanvas as any).toBuffer(type);\n return buffer;\n }\n console.error(new ReferenceError(`stage is not defined`));\n\n return null;\n }\n}\n"]}