@revolist/revogrid 4.9.0 → 4.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/revogr-attribution_6.cjs.entry.js +14 -8
- package/dist/cjs/revogr-attribution_6.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js +5 -2
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-data_4.cjs.entry.js +17 -4
- package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
- package/dist/collection/components/clipboard/revogr-clipboard.js +66 -87
- package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -1
- package/dist/collection/components/header/header-renderer.js +18 -5
- package/dist/collection/components/header/header-renderer.js.map +1 -1
- package/dist/collection/components/header/revogr-header.js +2 -2
- package/dist/collection/components/overlay/autofill.service.js +6 -8
- package/dist/collection/components/overlay/autofill.service.js.map +1 -1
- package/dist/collection/components/overlay/revogr-overlay-selection.js +22 -10
- package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
- package/dist/collection/components/overlay/selection.utils.js +9 -1
- package/dist/collection/components/overlay/selection.utils.js.map +1 -1
- package/dist/collection/types/interfaces.js.map +1 -1
- package/dist/esm/revogr-attribution_6.entry.js +15 -9
- package/dist/esm/revogr-attribution_6.entry.js.map +1 -1
- package/dist/esm/revogr-clipboard_3.entry.js +5 -2
- package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
- package/dist/esm/revogr-data_4.entry.js +17 -4
- package/dist/esm/revogr-data_4.entry.js.map +1 -1
- package/dist/revo-grid/revogr-attribution_6.entry.js +1 -1
- package/dist/revo-grid/revogr-attribution_6.entry.js.map +1 -1
- package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
- package/dist/revo-grid/revogr-data_4.entry.js +1 -1
- package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
- package/dist/types/components/clipboard/revogr-clipboard.d.ts +32 -24
- package/dist/types/components/overlay/autofill.service.d.ts +3 -1
- package/dist/types/components/overlay/revogr-overlay-selection.d.ts +12 -3
- package/dist/types/components/overlay/selection.utils.d.ts +4 -1
- package/dist/types/components.d.ts +67 -42
- package/dist/types/types/interfaces.d.ts +16 -1
- package/hydrate/index.js +36 -14
- package/hydrate/index.mjs +36 -14
- package/package.json +1 -1
- package/readme.md +2 -0
- package/standalone/column.service.js +1 -2
- package/standalone/column.service.js.map +1 -1
- package/standalone/data.store.js +2950 -3
- package/standalone/data.store.js.map +1 -1
- package/standalone/debounce.js +1 -1
- package/standalone/dimension.helpers.js +2 -2
- package/standalone/revo-grid.js +1 -2
- package/standalone/revo-grid.js.map +1 -1
- package/standalone/revogr-clipboard2.js +5 -2
- package/standalone/revogr-clipboard2.js.map +1 -1
- package/standalone/revogr-data2.js +0 -1
- package/standalone/revogr-data2.js.map +1 -1
- package/standalone/revogr-focus2.js +0 -1
- package/standalone/revogr-focus2.js.map +1 -1
- package/standalone/revogr-header2.js +18 -6
- package/standalone/revogr-header2.js.map +1 -1
- package/standalone/revogr-order-editor2.js +0 -1
- package/standalone/revogr-order-editor2.js.map +1 -1
- package/standalone/revogr-overlay-selection2.js +8 -11
- package/standalone/revogr-overlay-selection2.js.map +1 -1
- package/standalone/revogr-row-headers2.js +0 -1
- package/standalone/revogr-row-headers2.js.map +1 -1
- package/standalone/selection.utils.js +10 -2
- package/standalone/selection.utils.js.map +1 -1
- package/standalone/toNumber.js +1 -1
- package/standalone/_baseIteratee.js +0 -2956
- package/standalone/_baseIteratee.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"revogr-overlay-selection2.js","mappings":";;;;;;;;;;;;;;;;AAuCA,MAAM,eAAe,GAAa;IAChC,WAAW,CAAC,GAAG;IACf,WAAW,CAAC,QAAQ;IACpB,WAAW,CAAC,UAAU;IACtB,WAAW,CAAC,UAAU;IACtB,WAAW,CAAC,WAAW;CACxB,CAAC;MACW,eAAe;IAC1B,YAAoB,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;KAAI;IAElC,MAAM,OAAO,CACX,CAAgB,EAChB,QAAiB,EACjB,UAAmB,EACnB,EAAE,KAAK,EAAE,KAAK,EAAsC;;QAGpD,IAAI,UAAU,EAAE;YACd,QAAQ,CAAC,CAAC,IAAI;gBACZ,KAAK,WAAW,CAAC,MAAM;oBACrB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;oBACjB,MAAM;gBACR,KAAK,WAAW,CAAC,GAAG;oBAClB,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBACrC,MAAM;aACT;YACD,OAAO;SACR;;;QAKD,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAC5B,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;SACR;;QAGD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;;QAGD,IAAI,WAAW,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE;YAC9B,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACrC,OAAO;SACR;;QAGD,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAC1B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;SACR;;QAGD,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;YACb,OAAO;SACR;;QAGD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YACZ,OAAO;SACR;;QAGD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;YACd,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO;SACR;;QAGD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YACZ,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACnB;YACD,OAAO;SACR;;QAGD,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;YAC1B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACtB,OAAO;SACR;;QAGD,IAAI,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE;YAC9C,OAAO;SACR;KACF;IAEO,SAAS,CAAC,CAAgB;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;;QAElD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;YACpB,OAAO;SACR;QACD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;KACrB;IAED,MAAM,kBAAkB,CAAC,CAAgB,EAAE,QAAiB;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;;;;QAKD,MAAM,OAAO,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;KACzE;IAED,iBAAiB,CACf,OAAsB,EACtB,KAAiB,EACjB,KAAY,EACZ,OAAO,GAAG,KAAK;QAEf,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QACD,MAAM,KAAK,GAAc,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,OAAO,EAAE;YACX,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACtE,OAAO,KAAK,CAAC;aACd;YACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAClB,IAAI,CAAC,KAAK,EACV,OAAO,EACP,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;cACnC,CAAC;cACD,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;kBACvB,CAAC,CAAC;kBACF,CAAC,CACR,CAAC;KACH;;IAGD,kBAAkB,CAChB,CAAgB,EAChB,QAAiB;QAEjB,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;QACvC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YACpC,CAAC,CAAC,cAAc,EAAE,CAAC;SACpB;QAED,IAAI,CAAC,CAAC,QAAQ,EAAE;YACd,QAAQ,CAAC,CAAC,IAAI;gBACZ,KAAK,WAAW,CAAC,GAAG;oBAClB,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;aACjD;SACF;QAED,QAAQ,CAAC,CAAC,IAAI;YACZ,KAAK,WAAW,CAAC,QAAQ;gBACvB,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;YACzC,KAAK,WAAW,CAAC,UAAU;gBACzB,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;YACxC,KAAK,WAAW,CAAC,UAAU;gBACzB,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;YACzC,KAAK,WAAW,CAAC,GAAG,CAAC;YACrB,KAAK,WAAW,CAAC,WAAW;gBAC1B,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;SACzC;KACF;;;MCtKU,eAAe;IAU1B,YAAoB,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;QATtB,iBAAY,GAAwB,IAAI,CAAC;QACzC,oBAAe,GAAgB,IAAI,CAAC;QACpC,kBAAa,GAAgB,IAAI,CAAC;QAClC,iBAAY,GAAgB,IAAI,CAAC;KAMP;;;;;;IAOlC,cAAc,CAAC,KAAgB,EAAE,cAAoB;QACnD,IAAI,YAAY,CAAC;QACjB,IAAI,KAAK,EAAE;YACT,YAAY,GAAG,OAAO,CACpB,KAAK,EACL,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAC1B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAC3B,CAAC;SACH;aAAM;YACL,YAAY,GAAG,OAAO,iCAEf,cAAc,KACjB,EAAE,EAAE,cAAc,CAAC,CAAC,EACpB,EAAE,EAAE,cAAc,CAAC,CAAC,KAEtB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAC1B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAC3B,CAAC;SACH;QACD,QACE,WACE,KAAK,EAAE;gBACL,CAAC,kBAAkB,GAAG,IAAI;gBAC1B,CAAC,YAAY,GAAG,IAAI;aACrB,EACD,KAAK,EAAE;gBACL,IAAI,EAAE,GAAG,YAAY,CAAC,KAAK,IAAI;gBAC/B,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,IAAI;aAChC,EACD,WAAW,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EACvD,YAAY,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GACxD,EACF;KACH;IAEO,eAAe,CACrB,CAA0B,EAC1B,IAAI;QAEJ,IAAI,MAAM,GAAmB,IAAI,CAAC;QAClC,IAAI,CAAC,CAAC,MAAM,YAAY,OAAO,EAAE;YAC/B,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;SACnB;QACD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,cAAc,EAAE,CAAC;KACpB;IAED,IAAI,UAAU;QACZ,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;KAC5B;;;;IAKD,kBAAkB,CAAC,CAA0B;;QAE3C,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7B,IAAI,CAAC,mBAAmB,GAAGA,UAAQ,CACjC,CAAC,CAA0B,EAAE,IAAe,KAC1C,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,EACnC,CAAC,CACF,CAAC;SACH;QACD,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;SAChD;KACF;IAEO,QAAQ,CAAC,KAAW,EAAE,KAAgB;;QAE5C,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE;YACnB,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;SACpC;QACD,OAAO,KAAK,IAAI,IAAI,CAAC;KACtB;;;;;IAMO,mBAAmB,CAAC,KAA8B,EAAE,IAAe;;QAEzE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,OAAO;SACR;QACD,MAAM,CAAC,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;;QAE/D,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;YAC5B,OAAO;SACR;QACD,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;;QAG/C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;aACxC;SACF;;QAGD,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;YACvC,OAAO;SACR;QACD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAE5B,MAAM,MAAM,GACV,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;;QAGvC,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SAC5B;aAAM;YACL,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC;gBACvD,IAAI,EAAE,IAAI,CAAC,YAAY;aACxB,CAAC,CAAC;SACJ;KACF;;;;;;;IAQD,cAAc,CACZ,MAAe,EACf,IAAe,EACf,IAAI;;QAGJ,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;KAChE;;;;IAKD,sBAAsB,CAAC,KAAW,EAAE,QAAmB;;QAErD,IAAI,IAAI,CAAC,eAAe,EAAE;;YAExB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;;YAGtD,IAAI,IAAI,CAAC,YAAY,6CAA4B;gBAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;;gBAGhE,IAAI,KAAK,EAAE;oBACT,MAAM,EACJ,gBAAgB,EAAE,SAAS,EAC3B,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAC5B,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC;wBAC9B,KAAK;qBACN,CAAC,CAAC;;oBAGH,IAAI,CAAC,SAAS,EAAE;wBACd,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;qBAC7C;yBAAM;;wBAEL,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;qBAC5B;iBACF;aACF;iBAAM;;gBAEL,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;aAC9D;SACF;;QAGD,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;;;;IAKO,kBAAkB;QACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC3B;;IAGD,YAAY,CAAC,IAAgB,EAAE,KAAgB;QAC7C,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,KAAK,IAAI,QAAQ,IAAI,IAAI,EAAE;YACzB,MAAM,CAAC,QAAQ,CAAC,GAAG,aAAa,CAC9B,IAAI,CAAC,EAAE,CAAC,SAAS,EACjB,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CACvB,CAAC;SACH;QACD,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;YACrB,IAAI;YACJ,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACzB;;IAGO,kBAAkB,CAAC,QAAmB,EAAE,QAAmB;QACjE,MAAM,SAAS,GAAiB;YAC9B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;YACnC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI;YACnC,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,EAAE;YACX,QAAQ;YACR,QAAQ;SACT,CAAC;QACF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAC7D,SAAS,EACT,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAC9B,CAAC;QACF,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;;QAG5C,IAAI,CAAC,CAAC,gBAAgB,EAAE;YACtB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;SACR;QAED,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,gBAAgB,EAAE;YACtB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO;SACR;QACD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;KAChD;;;;;IAMO,cAAc,CAAC,KAAY,EAAE,GAAU;;QAE7C,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;YAClB,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAC5B;;;ACjUH,MAAM,qBAAqB,GAAG,g7PAAg7P,CAAC;AAC/8P,qCAAe,qBAAqB;;MCgEvB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4MnB,oBAAe,GAA2B,IAAI,CAAC;QAC/C,oBAAe,GAA2B,IAAI,CAAC;QAE/C,eAAU,GAAiC,IAAI,CAAC;QAChD,8BAAyB,GAAmB,EAAE,CAAC;;;;;;;;;;;;mCAxJzB,KAAK;;;;;;IA8JnC,WAAW,CAAC,CAA0B;QACpC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACpC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;SAC5C;KACF;;;;;IASD,SAAS;;;;QAIP,IAAI,CAAC,eAAe,CAAC,sBAAsB,CACzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAChC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CACjC,CAAC;KACH;;;;;IAMwB,UAAU,CAAC,CAA8B;;;QAEhE,MAAA,IAAI,CAAC,WAAW,0CAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;KACvC;;;;;IAMwC,OAAO,CAAC,CAAgB;;QAE/D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC1B;;;;;IAM0C,SAAS,CAAC,CAAgB;;;QAEnE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAChD,OAAO;SACR;;QAED,MAAA,IAAI,CAAC,eAAe,0CAAE,OAAO,CAC3B,CAAC,EACD,IAAI,CAAC,KAAK,EACV,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EACjC;YACE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;SACxC,CACF,CAAC;KACH;;;;;IAMwB,mBAAmB,CAC1C,CAAkC;;QAGlC,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAExF,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC;YACzC,cAAc,EAAE,CAAC;YACjB,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACrC,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB;gBACnC,IAAI,iBAAiB,EAAE;oBACrB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrC,OAAO,KAAK,CAAC;iBACd;qBAAM;oBACL,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;iBACpC;aACF;YACD,MAAM,EAAE,GAAG;gBACT,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,OAAO;iBACR;gBACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAClB;YACD,MAAM,EAAE;gBACN,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;gBACtC,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB;YACD,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACnD,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;YACpE,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE;YAC7B,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;SACvC,CAAC,CAAC;QACH,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;;IAID,qBAAqB;QACnB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;YAEzB,mBAAmB,EAAE,CAAC,IACpB,IAAI,CAAC,oBAAoB,CAAC,IAAI,iCACzB,CAAC,GACD,IAAI,CAAC,KAAK,EACb;YACJ,YAAY,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,gBAAgB,EAAE,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAEnD,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,cAAc,EAAE,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YAEhD,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACxC,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE;SAC9B,CAAC,CAAC;KACJ;;IAKD,gBAAgB;;QACd,MAAA,IAAI,CAAC,aAAa,0CAAE,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAED,iBAAiB;QACf,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAC/C;IAED,oBAAoB;;;QAElB,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1C,MAAA,IAAI,CAAC,aAAa,0CAAE,OAAO,EAAE,CAAC;KAC/B;IAED,MAAM,mBAAmB;;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,EAAE;YACb,OAAM,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,gBAAgB,kDAAI,CAAA,CAAC;SAC7C;KACF;IAEO,WAAW,CAAC,KAAgB;QAClC,MAAM,KAAK,GAAG,UAAU,CACtB,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,KAAK,EACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CACxB,CAAC;QACF,OAAO;YACL,WAAK,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,IAC7C,IAAI,CAAC,cAAc,KAClB,WAAK,KAAK,EAAC,gBAAgB,IACzB,YAAM,KAAK,EAAE,YAAY,GAAS,EAClC,YAAM,KAAK,EAAE,YAAY,GAAS,CAC9B,CACP,CACG;SACP,CAAC;KACH;IAEO,YAAY;;QAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;;QAEjD,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;QACD,MAAM,GAAG,GACP,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,QAAQ,mCACT,QAAQ,GACR,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAC/D,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,iBAC5C,KAAK,kCACA,QAAQ,KACX,EAAE,EAAE,QAAQ,CAAC,CAAC,EACd,EAAE,EAAE,QAAQ,CAAC,CAAC,OAEb,IAAI,CAAC,KAAK,EACb,CAAC;;QAGH,IAAI,WAAW,CAAC,gBAAgB,EAAE;YAChC,OAAO,IAAI,CAAC;SACb;QAED,MAAM,KAAK,GAAG,UAAU,CACtB,WAAW,CAAC,MAAM,CAAC,KAAK,EACxB,IAAI,CAAC,YAAY,CAAC,KAAK,EACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CACxB,CAAC;QACF,QACE,mBACE,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EACjC,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,IAAI,CAAC,mBAAmB,EACrC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAC/D,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CACtC,QAAQ,CAAC,CAAC,EACV,QAAQ,CAAC,CAAC,EACV,IAAI,CAAC,OAAO,CACb,EACD,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EACnC,UAAU,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAClD,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;oBAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;iBAC9B;;gBAGD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;oBAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;iBAClB;aACF,GACD,EACF;KACH;IAED,MAAM;QACJ,MAAM,KAAK,GAAY,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;;QAGrC,IAAI,QAAQ,EAAE;YACZ,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtB;aAAM;YACL,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;;YAG/C,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY,EAAE;gBACzC,KAAK,CAAC,IAAI,CACR,wBACE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,YAAY,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EACxC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,EACvD,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAC9B,aAAa,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAC1C,CACH,CAAC;aACH;;YAGD,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;aACxC;;YAED,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;gBACzC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;aAC/D;;YAGD,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,KAAK,CAAC,IAAI,CACR,2BACE,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAChC,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,MAAM,EAAE,IAAI,CAAC,OAAO,EACpB,kBAAkB,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAC7C,CACH,CAAC;aACH;SACF;QACD,QACE,EAAC,IAAI,qDACH,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,EACtC,UAAU,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EACxD,WAAW,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAC1D,YAAY,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,IAEhE,KAAK,EACN,6DAAM,IAAI,EAAC,MAAM,GAAG,CACf,EACP;KACH;;;;IAKO,OAAO,CAAC,KAAW,EAAE,GAAS,EAAE,OAAuB;QAC7D,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACpD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CACjD,CAAC;QACF,IAAI,gBAAgB,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QACD,MAAM,MAAM,mBACV,KAAK,kCACA,KAAK,KACR,EAAE,EAAE,GAAG,CAAC,CAAC,EACT,EAAE,EAAE,GAAG,CAAC,CAAC,KAEX,IAAI,EAAE,OAAO,IACV,IAAI,CAAC,KAAK,CACd,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,UAAU,CAAC,gBAAgB,EAAE;YAC/B,OAAO,KAAK,CAAC;SACd;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,iBACzB,KAAK,EAAE;gBACL,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,CAAC,EAAE,KAAK,CAAC,CAAC;aACX,EACD,GAAG,EAAE;gBACH,CAAC,EAAE,KAAK,CAAC,EAAE;gBACX,CAAC,EAAE,KAAK,CAAC,EAAE;aACZ,IACE,UAAU,CAAC,MAAM,EACpB,CAAC,gBAAgB,CAAC;KACrB;IAEO,iBAAiB,CAAC,KAAgB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,iBAC3C,KAAK,oBAAO,KAAK,KACd,IAAI,CAAC,KAAK,EACb,CAAC;QACH,IAAI,UAAU,CAAC,gBAAgB,EAAE;YAC/B,OAAO,KAAK,CAAC;SACd;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,CACxD,UAAU,CAAC,MAAM,CAAC,KAAK,EACvB,IAAI,CAAC,SAAS,CACf,CAAC;QACF,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,iCAAM,UAAU,CAAC,MAAM,CAAC,KAAK,KAAE,IAAI,IAAG,CAAC;QAC7D,IAAI,CAAC,CAAC,gBAAgB,EAAE;YACtB,OAAO,KAAK,CAAC;SACd;QACD,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;KAC5B;;;;IAKO,iBAAiB,CAAC,CAAa;;;QAIrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,wBAAwB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE;YACd,OAAO;SACR;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;;;;IAKO,kBAAkB,CAAC,CAA0B,EAAE,KAAK,GAAG,KAAK;;QAElE,MAAM,aAAa,GAAG,CAAC,CAAC,MAAiC,CAAC;;QAE1D,IAAI,WAAW,CAAC,aAAa,CAAC,EAAE;YAC9B,OAAO;SACR;;QAGD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,wBAAwB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE;YACd,OAAO;SACR;;QAGD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;;QAGhD,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;;;YAInE,IAAI,CAAC,KAAK,EAAE;gBACV,CAAC,CAAC,cAAc,EAAE,CAAC;aACpB;iBAAM,IACL,iBAAiB,CAAE,CAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAC7D;;;gBAGA,CAAC,CAAC,cAAc,EAAE,CAAC;aACpB;SACF;KACF;;;;IAKS,MAAM,CAAC,GAAG,GAAG,EAAE;;QACvB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,iCACb,IAAI,KACP,GAAG,IACH,CAAC;SACJ;KACF;;;;;IAMO,SAAS,CAAC,CAAwB;QACxC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,EAAE;YACb,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;KACF;;;;;IAMS,QAAQ,CAAC,CAAkB;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACrC;IAEO,SAAS;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SAChC;QACD,OAAO,KAAK,CAAC;KACd;IACO,MAAM,CAAC,CAAe;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,YAAY,CAAC,gBAAgB,EAAE;YACjC,OAAO,KAAK,CAAC;SACd;QACD,IAAI,SAAqC,CAAC;QAE1C,IAAI,KAAK,EAAE;YACT,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CACzD,KAAK,EACL,IAAI,CAAC,SAAS,CACf,CAAC;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,iBACxC,KAAK;gBACL,IAAI;gBACJ,OAAO,IACJ,IAAI,CAAC,KAAK,EACb,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBAC3B,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;aAC/B;SACF;QAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;KACb;IAEO,OAAO,CAAC,IAAgB;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;QAC3D,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE;YACvB,OAAO;SACR;QACD,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,yBAAyB,CACnE,KAAK,EACL,IAAI,CACL,CAAC;QACF,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,iBAClE,IAAI,EAAE,OAAO,EACb,KAAK,IACF,IAAI,CAAC,KAAK,EACb,CAAC;QACH,IAAI,QAAQ,EAAE;YACZ,OAAO;SACR;QACD,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACnD;IAEO,MAAM,SAAS;QACrB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAC5D,IAAI,aAAa,CAAC,SAAS,EAAE;YAC3B,IAAI,EAAE,WAAW,CAAC,UAAU;SAC7B,CAAC,EACF,IAAI,CAAC,KAAK,CACX,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;KACF;IAES,SAAS;QACjB,IACE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;YAChC,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EACpD;YACA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAChD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAChC,EAAE,CACH,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;SAC3E;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,CAAC;gBACZ,KAAK,EAAE,OAAO,CAAC,CAAC;gBAChB,KAAK,EAAE,OAAO,CAAC,CAAC;gBAChB,GAAG,EAAE,EAAE;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAC;SACJ;KACF;IAEO,YAAY,CAAC,EAAE,MAAM,EAA6C;QACxE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC5E;;;;IAKS,OAAO;;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,KAAK,CAAC;SACd;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,KAAK,IAAI,EAAC,MAAA,IAAI,CAAC,aAAa,0CAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC;KACnE;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KACxC;;;;IAKD,KAAK,CAAC,IAAW,EAAE,WAAW,GAAG,KAAK;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,WAAW,IAAI,KAAK,EAAE;YACxB,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;SACrD;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAChC;IAED,IAAI,KAAK;QACP,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;YACnC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;SACjC,CAAC;KACH;;;;IAKS,OAAO;QACf,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,OAAO;YAChB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;YAC7B,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;SACxC,CAAC;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["debounce"],"sources":["src/components/overlay/keyboard.service.ts","src/components/overlay/autofill.service.tsx","src/components/overlay/revogr-overlay-style.scss?tag=revogr-overlay-selection","src/components/overlay/revogr-overlay-selection.tsx"],"sourcesContent":["import { getRange } from '@store';\nimport { codesLetter } from '../../utils/key.codes';\nimport {\n isAll,\n isClear,\n isCopy,\n isCut,\n isEnterKeyValue,\n isLetterKey,\n isPaste,\n} from '../../utils/key.utils';\nimport { timeout } from '../../utils';\nimport {\n EventData,\n getCoordinate,\n isAfterLast,\n isBeforeFirst,\n} from './selection.utils';\nimport { RESIZE_INTERVAL } from '../../utils/consts';\nimport { Cell, RangeArea, SelectionStoreState } from '@type';\nimport { Observable } from '../../utils/store.utils';\n\ntype Config = {\n selectionStore: Observable<SelectionStoreState>;\n\n // Apply changes from edit.\n change(val?: any): void;\n // Cancels edit. Escape changes.\n cancel(): void;\n\n clearCell(): void;\n focus(focus: Cell, changes: Partial<Cell>, focusNextViewport?: number): boolean;\n\n getData(): any;\n internalPaste(): void;\n range(range: RangeArea): boolean;\n selectAll(): void;\n};\n\nconst DIRECTION_CODES: string[] = [\n codesLetter.TAB,\n codesLetter.ARROW_UP,\n codesLetter.ARROW_DOWN,\n codesLetter.ARROW_LEFT,\n codesLetter.ARROW_RIGHT,\n];\nexport class KeyboardService {\n constructor(private sv: Config) {}\n\n async keyDown(\n e: KeyboardEvent,\n canRange: boolean,\n isEditMode: boolean,\n { range, focus }: Pick<EventData, 'range' | 'focus'>,\n ) {\n // IF EDIT MODE\n if (isEditMode) {\n switch (e.code) {\n case codesLetter.ESCAPE:\n this.sv.cancel();\n break;\n case codesLetter.TAB:\n this.keyChangeSelection(e, canRange);\n break;\n }\n return;\n }\n\n // IF NOT EDIT MODE\n\n // pressed clear key\n if (range && isClear(e.code)) {\n this.sv.clearCell();\n return;\n }\n\n // below works with focus only\n if (!focus) {\n return;\n }\n\n // tab key means same as arrow right\n if (codesLetter.TAB === e.code) {\n this.keyChangeSelection(e, canRange);\n return;\n }\n\n // pressed enter\n if (isEnterKeyValue(e.key)) {\n this.sv.change();\n return;\n }\n\n // copy operation\n if (isCopy(e)) {\n return;\n }\n\n // cut operation\n if (isCut(e)) {\n return;\n }\n\n // paste operation\n if (isPaste(e)) {\n this.sv.internalPaste();\n return;\n }\n\n // select all\n if (isAll(e)) {\n if (canRange) {\n this.selectAll(e);\n }\n return;\n }\n\n // pressed letter key\n if (isLetterKey(e.keyCode)) {\n this.sv.change(e.key);\n return;\n }\n\n // pressed arrow, change selection position\n if (await this.keyChangeSelection(e, canRange)) {\n return;\n }\n }\n\n private selectAll(e: KeyboardEvent) {\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n // if no range or focus - do nothing\n if (!range || !focus) {\n return;\n }\n e.preventDefault();\n this.sv.selectAll();\n }\n\n async keyChangeSelection(e: KeyboardEvent, canRange: boolean) {\n const data = this.changeDirectionKey(e, canRange);\n if (!data) {\n return false;\n }\n\n // this interval needed for several cases\n // grid could be resized before next click\n // at this case to avoid screen jump we use this interval\n await timeout(RESIZE_INTERVAL + 30);\n\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n return this.keyPositionChange(data.changes, range, focus, data.isMulti);\n }\n\n keyPositionChange(\n changes: Partial<Cell>,\n range?: RangeArea,\n focus?: Cell,\n isMulti = false,\n ) {\n if (!range || !focus) {\n return false;\n }\n const data = getCoordinate(range, focus, changes, isMulti);\n if (!data) {\n return false;\n }\n const eData: EventData = this.sv.getData();\n if (isMulti) {\n if (isAfterLast(data.end, eData.lastCell) || isBeforeFirst(data.start)) {\n return false;\n }\n const range = getRange(data.start, data.end);\n return this.sv.range(range);\n }\n return this.sv.focus(\n data.start,\n changes,\n isAfterLast(data.start, eData.lastCell)\n ? 1\n : isBeforeFirst(data.start)\n ? -1\n : 0,\n );\n }\n\n /** Monitor key direction changes */\n changeDirectionKey(\n e: KeyboardEvent,\n canRange: boolean,\n ): { changes: Partial<Cell>; isMulti?: boolean } | void {\n const isMulti = canRange && e.shiftKey;\n if (DIRECTION_CODES.includes(e.code)) {\n e.preventDefault();\n }\n\n if (e.shiftKey) {\n switch (e.code) {\n case codesLetter.TAB:\n return { changes: { x: -1 }, isMulti: false };\n }\n }\n \n switch (e.code) {\n case codesLetter.ARROW_UP:\n return { changes: { y: -1 }, isMulti };\n case codesLetter.ARROW_DOWN:\n return { changes: { y: 1 }, isMulti };\n case codesLetter.ARROW_LEFT:\n return { changes: { x: -1 }, isMulti };\n case codesLetter.TAB:\n case codesLetter.ARROW_RIGHT:\n return { changes: { x: 1 }, isMulti };\n }\n }\n}\n","import debounce from 'lodash/debounce';\nimport { DebouncedFunc } from 'lodash';\n\nimport { h } from '@stencil/core';\nimport { CELL_HANDLER_CLASS, MOBILE_CLASS } from '../../utils/consts';\nimport {\n EventData,\n getCell,\n getCurrentCell,\n isAfterLast,\n} from './selection.utils';\nimport { DSourceState, getSourceItem, getRange } from '@store';\nimport ColumnService from '../data/column.service';\nimport { getPropertyFromEvent } from '../../utils/events';\nimport {\n DataLookup,\n DataType,\n DimensionSettingsState,\n TempRange,\n ChangedRange,\n BeforeRangeSaveDataDetails,\n RangeArea,\n Cell,\n DimensionRows,\n} from '@type';\nimport { Observable } from '../../utils/store.utils';\n\ntype Config = {\n dimensionRow: Observable<DimensionSettingsState>;\n dimensionCol: Observable<DimensionSettingsState>;\n columnService: ColumnService;\n dataStore: Observable<DSourceState<DataType, DimensionRows>>;\n\n setTempRange(e: TempRange | null): Event;\n selectionChanged(e: ChangedRange): Event;\n rangeCopy(e: ChangedRange): Event;\n rangeDataApply(e: BeforeRangeSaveDataDetails): CustomEvent;\n setRange(e: RangeArea): boolean;\n clearRangeDataApply(e: { range: RangeArea }): CustomEvent<{\n range: RangeArea;\n }>;\n\n getData(): any;\n};\n\nconst enum AutoFillType {\n selection = 'Selection',\n autoFill = 'AutoFill',\n}\n\nexport class AutoFillService {\n private autoFillType: AutoFillType | null = null;\n private autoFillInitial: Cell | null = null;\n private autoFillStart: Cell | null = null;\n private autoFillLast: Cell | null = null;\n\n private onMouseMoveAutofill: DebouncedFunc<\n (e: MouseEvent | TouchEvent, data: EventData) => void\n >;\n\n constructor(private sv: Config) {}\n\n /**\n * Render autofill box\n * @param range\n * @param selectionFocus\n */\n renderAutofill(range: RangeArea, selectionFocus: Cell) {\n let handlerStyle;\n if (range) {\n handlerStyle = getCell(\n range,\n this.sv.dimensionRow.state,\n this.sv.dimensionCol.state,\n );\n } else {\n handlerStyle = getCell(\n {\n ...selectionFocus,\n x1: selectionFocus.x,\n y1: selectionFocus.y,\n },\n this.sv.dimensionRow.state,\n this.sv.dimensionCol.state,\n );\n }\n return (\n <div\n class={{\n [CELL_HANDLER_CLASS]: true,\n [MOBILE_CLASS]: true,\n }}\n style={{\n left: `${handlerStyle.right}px`,\n top: `${handlerStyle.bottom}px`,\n }}\n onMouseDown={(e: MouseEvent) => this.autoFillHandler(e)}\n onTouchStart={(e: TouchEvent) => this.autoFillHandler(e)}\n />\n );\n }\n\n private autoFillHandler(\n e: MouseEvent | TouchEvent,\n type = AutoFillType.autoFill,\n ) {\n let target: Element | null = null;\n if (e.target instanceof Element) {\n target = e.target;\n }\n if (!target) {\n return;\n }\n this.selectionStart(target, this.sv.getData(), type);\n e.preventDefault();\n }\n\n get isAutoFill() {\n return !!this.autoFillType;\n }\n\n /**\n * Process mouse move events\n */\n selectionMouseMove(e: MouseEvent | TouchEvent) {\n // initiate mouse move debounce if not present\n if (!this.onMouseMoveAutofill) {\n this.onMouseMoveAutofill = debounce(\n (e: MouseEvent | TouchEvent, data: EventData) =>\n this.doAutofillMouseMove(e, data),\n 5,\n );\n }\n if (this.isAutoFill) {\n this.onMouseMoveAutofill(e, this.sv.getData());\n }\n }\n\n private getFocus(focus: Cell, range: RangeArea) {\n // there was an issue that it was taking last cell from range but focus was out\n if (!focus && range) {\n focus = { x: range.x, y: range.y };\n }\n return focus || null;\n }\n\n /**\n * Autofill logic:\n * on mouse move apply based on previous direction (if present)\n */\n private doAutofillMouseMove(event: MouseEvent | TouchEvent, data: EventData) {\n // if no initial - not started\n if (!this.autoFillInitial) {\n return;\n }\n const x = getPropertyFromEvent(event, 'clientX', MOBILE_CLASS);\n const y = getPropertyFromEvent(event, 'clientY', MOBILE_CLASS);\n // skip touch\n if (x === null || y === null) {\n return;\n }\n const current = getCurrentCell({ x, y }, data);\n\n // first time or direction equal to start(same as first time)\n if (!this.autoFillLast) {\n if (!this.autoFillLast) {\n this.autoFillLast = this.autoFillStart;\n }\n }\n\n // check if not the latest, if latest - do nothing\n if (isAfterLast(current, data.lastCell)) {\n return;\n }\n this.autoFillLast = current;\n\n const isSame =\n current.x === this.autoFillInitial.x &&\n current.y === this.autoFillInitial.y;\n\n // if same as initial - clear\n if (isSame) {\n this.sv.setTempRange(null);\n } else {\n this.sv.setTempRange({\n area: getRange(this.autoFillInitial, this.autoFillLast),\n type: this.autoFillType,\n });\n }\n }\n\n /**\n * Range selection started\n * Mode @param type:\n * Can be triggered from MouseDown selection on element\n * Or can be triggered on corner square drag\n */\n selectionStart(\n target: Element,\n data: EventData,\n type = AutoFillType.selection,\n ) {\n /** Get cell by autofill element */\n const { top, left } = target.getBoundingClientRect();\n this.autoFillInitial = this.getFocus(data.focus, data.range);\n this.autoFillType = type;\n this.autoFillStart = getCurrentCell({ x: left, y: top }, data);\n }\n\n /**\n * Clear current range selection on mouse up and mouse leave events\n */\n clearAutoFillSelection(focus: Cell, oldRange: RangeArea) {\n // If autofill was active, apply autofill values\n if (this.autoFillInitial) {\n // Fetch latest focus\n this.autoFillInitial = this.getFocus(focus, oldRange);\n\n // Apply range data if autofill mode is active\n if (this.autoFillType === AutoFillType.autoFill) {\n const range = getRange(this.autoFillInitial, this.autoFillLast);\n\n // If range is present, apply data\n if (range) {\n const {\n defaultPrevented: stopApply,\n detail: { range: newRange },\n } = this.sv.clearRangeDataApply({\n range,\n });\n\n // If data apply was not prevented, apply new range\n if (!stopApply) {\n this.applyRangeWithData(newRange, oldRange);\n } else {\n // If data apply was prevented, clear temporary range\n this.sv.setTempRange(null);\n }\n }\n } else {\n // If not autofill mode, apply range only\n this.applyRangeOnly(this.autoFillInitial, this.autoFillLast);\n }\n }\n\n // Reset autofill state\n this.resetAutoFillState();\n }\n\n /**\n * Reset autofill state\n */\n private resetAutoFillState() {\n this.autoFillType = null;\n this.autoFillInitial = null;\n this.autoFillLast = null;\n this.autoFillStart = null;\n }\n\n /** Trigger range apply events and handle responses */\n onRangeApply(data: DataLookup, range: RangeArea) {\n const models: DataLookup = {};\n for (let rowIndex in data) {\n models[rowIndex] = getSourceItem(\n this.sv.dataStore,\n parseInt(rowIndex, 10),\n );\n }\n this.sv.rangeDataApply({\n data,\n models,\n type: this.sv.dataStore.get('type'),\n });\n\n this.sv.setRange(range);\n }\n\n /** Apply range and copy data during range application */\n private applyRangeWithData(newRange: RangeArea, oldRange: RangeArea) {\n const rangeData: ChangedRange = {\n type: this.sv.dataStore.get('type'),\n colType: this.sv.columnService.type,\n newData: {},\n mapping: {},\n newRange,\n oldRange,\n };\n const { mapping, changed } = this.sv.columnService.getRangeData(\n rangeData,\n this.sv.columnService.columns,\n );\n rangeData.newData = changed;\n rangeData.mapping = mapping;\n let e = this.sv.selectionChanged(rangeData);\n\n // if default prevented - clear range\n if (e.defaultPrevented) {\n this.sv.setTempRange(null);\n return;\n }\n\n e = this.sv.rangeCopy(rangeData);\n if (e.defaultPrevented) {\n this.sv.setRange(newRange);\n return;\n }\n this.onRangeApply(rangeData.newData, newRange);\n }\n\n /**\n * Update range selection only,\n * no data change (mouse selection)\n */\n private applyRangeOnly(start?: Cell, end?: Cell) {\n // no changes to apply\n if (!start || !end) {\n return;\n }\n\n const newRange = getRange(start, end);\n this.sv.setRange(newRange);\n }\n}\n","@mixin autofill-handle($handler-size: 14px, $icon-size: 10px) {\n .autofill-handle {\n position: absolute;\n width: $handler-size;\n height: $handler-size;\n margin-left: -$handler-size + 1;\n margin-top: -$handler-size + 1;\n z-index: 10;\n cursor: crosshair;\n\n &::before {\n content: '';\n position: absolute;\n right: 0;\n bottom: 0;\n width: $icon-size;\n height: $icon-size;\n background: $selection-border;\n border: 1px solid white;\n box-sizing: border-box;\n }\n }\n}\n\nrevogr-overlay-selection {\n display: block;\n position: relative;\n width: 100%;\n\n\n @include autofill-handle;\n\n &.mobile {\n @include autofill-handle(30px, 12px);\n }\n\n .selection-border-range {\n position: absolute;\n pointer-events: none;\n z-index: 9;\n\n .range-handlers {\n height: 100%;\n background-color: transparent;\n width: calc(50% + (50% / 2));\n max-width: 50px;\n min-width: 20px;\n left: 50%;\n transform: translateX(-50%);\n position: absolute;\n\n $btn-size: 20px;\n $handler-w: 15px;\n $handler-h: 5px;\n \n > span {\n pointer-events: auto;\n height: $btn-size;\n width: $btn-size;\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n\n\n &:before, &:after {\n position: absolute;\n border-radius: 5px;\n width: $handler-w;\n height: $handler-h;\n left: 50%;\n transform: translateX(-50%);\n background-color: rgba(black, 20%);\n }\n &:first-child {\n top: -($handler-h + 2px);\n &:before{\n content: '';\n top: 0;\n }\n }\n &:last-child {\n bottom: -($handler-h + 2px);\n &:after{\n content: '';\n bottom: 0;\n }\n }\n }\n }\n @include selection();\n }\n\n revogr-edit {\n z-index: 10;\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n VNode,\n Element,\n Watch,\n} from '@stencil/core';\nimport ColumnService from '../data/column.service';\nimport { codesLetter } from '../../utils/key.codes';\nimport { MOBILE_CLASS, SELECTION_BORDER_CLASS } from '../../utils/consts';\nimport { DSourceState } from '@store';\nimport {\n getRange,\n isRangeSingleCell,\n} from '@store';\nimport {\n EventData,\n getElStyle,\n getFocusCellBasedOnEvent,\n} from './selection.utils';\nimport { isEditInput } from '../editors/edit.utils';\nimport { KeyboardService } from './keyboard.service';\nimport { AutoFillService } from './autofill.service';\nimport { verifyTouchTarget } from '../../utils/events';\nimport {\n Observable,\n SelectionStoreState,\n DimensionSettingsState,\n DataType,\n DimensionRows,\n ColumnRegular,\n DimensionCols,\n Cell,\n DragStartEvent,\n} from '../../components';\nimport { EditCellStore, MultiDimensionType } from '@type';\nimport {\n FocusRenderEvent,\n ApplyFocusEvent,\n AllDimensionType,\n DataFormat,\n} from '@type';\nimport {\n Editors,\n BeforeSaveDataDetails,\n BeforeEdit,\n RangeArea,\n TempRange,\n ChangedRange,\n BeforeRangeSaveDataDetails,\n SaveDataDetails,\n} from '@type';\n\n/**\n * Component for overlaying the grid with the selection.\n */\n@Component({\n tag: 'revogr-overlay-selection',\n styleUrl: 'revogr-overlay-style.scss',\n})\nexport class OverlaySelection {\n // #region Properties\n /**\n * Readonly mode.\n */\n @Prop() readonly: boolean;\n /**\n * Range selection allowed.\n */\n @Prop() range: boolean;\n /**\n * Enable revogr-order-editor component (read more in revogr-order-editor component).\n * Allows D&D.\n */\n @Prop() canDrag: boolean;\n\n /**\n * Enable revogr-clipboard component (read more in revogr-clipboard component).\n * Allows copy/paste.\n */\n @Prop() useClipboard: boolean;\n\n /** Stores */\n /** Selection, range, focus. */\n @Prop() selectionStore: Observable<SelectionStoreState>;\n /** Dimension settings Y. */\n @Prop() dimensionRow: Observable<DimensionSettingsState>;\n /** Dimension settings X. */\n @Prop() dimensionCol: Observable<DimensionSettingsState>;\n\n // --------------------------------------------------------------------------\n //\n // Static stores, not expected to change during component lifetime\n //\n // --------------------------------------------------------------------------\n\n /**\n * Row data store.\n */\n @Prop() dataStore: Observable<DSourceState<DataType, DimensionRows>>;\n\n /**\n * Column data store.\n */\n @Prop() colData: Observable<DSourceState<ColumnRegular, DimensionCols>>;\n /**\n * Last real coordinates positions + 1.\n */\n @Prop() lastCell: Cell;\n /**\n * Custom editors register.\n */\n @Prop() editors: Editors;\n /**\n * If true applys changes when cell closes if not Escape.\n */\n @Prop() applyChangesOnClose = false;\n /**\n * Additional data to pass to renderer.\n */\n @Prop() additionalData: any;\n\n /**\n * Is mobile view mode.\n */\n @Prop() isMobileDevice: boolean;\n\n // #endregion\n\n // #region Events\n /**\n * Before clipboard copy happened. Validate data before copy.\n * To prevent the default behavior of editing data and use your own implementation, call `e.preventDefault()`.\n */\n @Event({ eventName: 'beforecopyregion', cancelable: true })\n beforeCopyRegion: EventEmitter;\n /**\n * Before region paste happened.\n */\n @Event({ eventName: 'beforepasteregion', cancelable: true })\n beforeRegionPaste: EventEmitter;\n\n /**\n * Cell edit apply to the data source.\n * Triggers datasource edit on the root level.\n */\n @Event({ eventName: 'celleditapply', cancelable: true })\n cellEditApply: EventEmitter<BeforeSaveDataDetails>;\n\n /**\n * Before cell focus.\n */\n @Event({ eventName: 'beforecellfocusinit', cancelable: true })\n beforeFocusCell: EventEmitter<BeforeSaveDataDetails>;\n\n\n /**\n * Fired when change of viewport happens.\n * Usually when we switch between pinned regions.\n */\n @Event({ eventName: 'beforenextvpfocus', cancelable: true })\n beforeNextViewportFocus: EventEmitter<Cell>;\n\n /**\n * Set edit cell.\n */\n @Event({ eventName: 'setedit' }) setEdit: EventEmitter<BeforeEdit>;\n\n /**\n * Before range applied.\n */\n @Event({ eventName: 'beforeapplyrange' })\n beforeApplyRange: EventEmitter<FocusRenderEvent>;\n /**\n * Before range selection applied.\n */\n @Event({ eventName: 'beforesetrange' }) beforeSetRange: EventEmitter;\n\n /**\n * Before editor render.\n */\n @Event({ eventName: 'beforeeditrender' })\n beforeEditRender: EventEmitter<FocusRenderEvent>;\n\n /**\n * Set range.\n */\n @Event({ eventName: 'setrange' }) setRange: EventEmitter<\n RangeArea & { type: MultiDimensionType }\n >;\n\n /** Select all. */\n @Event({ eventName: 'selectall' }) selectAll: EventEmitter;\n /**\n * Used for editors support when editor close requested.\n */\n @Event({ eventName: 'canceledit' }) cancelEdit: EventEmitter;\n\n /**\n * Set temp range area during autofill.\n */\n @Event({ eventName: 'settemprange' })\n setTempRange: EventEmitter<TempRange | null>;\n\n /**\n * Before cell get focused.\n * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.\n */\n @Event({ eventName: 'applyfocus' })\n applyFocus: EventEmitter<FocusRenderEvent>;\n\n /**\n * Cell get focused.\n * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.\n */\n @Event({ eventName: 'focuscell' }) focusCell: EventEmitter<ApplyFocusEvent>;\n /** Range data apply. */\n @Event({ eventName: 'beforerangedataapply' })\n beforeRangeDataApply: EventEmitter<FocusRenderEvent>;\n /** Selection range changed. */\n @Event({ eventName: 'selectionchangeinit', cancelable: true })\n selectionChange: EventEmitter<ChangedRange>;\n /** Before range copy. */\n @Event({ eventName: 'beforerangecopyapply', cancelable: true, bubbles: true })\n beforeRangeCopyApply: EventEmitter<ChangedRange>;\n\n /** Range data apply.\n * Triggers datasource edit on the root level.\n */\n @Event({ eventName: 'rangeeditapply', cancelable: true })\n rangeEditApply: EventEmitter<BeforeRangeSaveDataDetails>;\n /** Range copy. */\n @Event({ eventName: 'clipboardrangecopy', cancelable: true })\n rangeClipboardCopy: EventEmitter;\n @Event({ eventName: 'clipboardrangepaste', cancelable: true })\n rangeClipboardPaste: EventEmitter;\n\n /**\n * Before key up event proxy, used to prevent key up trigger.\n * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.\n * Call preventDefault().\n */\n @Event({ eventName: 'beforekeydown' })\n beforeKeyDown: EventEmitter<KeyboardEvent>;\n /**\n * Before key down event proxy, used to prevent key down trigger.\n * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.\n * Call preventDefault().\n */\n @Event({ eventName: 'beforekeyup' }) beforeKeyUp: EventEmitter<KeyboardEvent>;\n /**\n * Runs before cell save.\n * Can be used to override or cancel original save.\n */\n @Event({ eventName: 'beforecellsave', cancelable: true })\n beforeCellSave: EventEmitter;\n\n // #endregion\n\n // #region Private Properties\n @Element() element: HTMLElement;\n private clipboard: HTMLRevogrClipboardElement;\n\n protected columnService: ColumnService;\n private keyboardService: KeyboardService | null = null;\n private autoFillService: AutoFillService | null = null;\n private orderEditor: HTMLRevogrOrderEditorElement;\n private revogrEdit: HTMLRevogrEditElement | null = null;\n private unsubscribeSelectionStore: { (): void }[] = [];\n // #endregion\n\n // #region Listeners\n @Listen('touchmove', { target: 'document' })\n @Listen('mousemove', { target: 'document' })\n onMouseMove(e: MouseEvent | TouchEvent) {\n if (this.selectionStore.get('focus')) {\n this.autoFillService.selectionMouseMove(e);\n }\n }\n\n /**\n * Action finished inside of the document.\n * Pointer left document, clear any active operation.\n */\n @Listen('touchend', { target: 'document' })\n @Listen('mouseup', { target: 'document' })\n @Listen('mouseleave', { target: 'document' })\n onMouseUp() {\n // Clear auto fill selection\n // when pointer left document,\n // clear any active operation.\n this.autoFillService.clearAutoFillSelection(\n this.selectionStore.get('focus'),\n this.selectionStore.get('range'),\n );\n }\n\n /**\n * Row drag started.\n * This event is fired when drag action started on cell.\n */\n @Listen('dragstartcell') onCellDrag(e: CustomEvent<DragStartEvent>) {\n // Invoke drag start on order editor.\n this.orderEditor?.dragStart(e.detail);\n }\n\n /**\n * Get keyboard down from element.\n * This event is fired when keyboard key is released.\n */\n @Listen('keyup', { target: 'document' }) onKeyUp(e: KeyboardEvent) {\n // Emit before key up event.\n this.beforeKeyUp.emit(e);\n }\n\n /**\n * Get keyboard down from element.\n * This event is fired when keyboard key is pressed.\n */\n @Listen('keydown', { target: 'document' }) onKeyDown(e: KeyboardEvent) {\n // Emit before key down event and check if default prevention is set.\n const proxy = this.beforeKeyDown.emit(e);\n if (e.defaultPrevented || proxy.defaultPrevented) {\n return;\n }\n // Invoke key down on keyboard service.\n this.keyboardService?.keyDown(\n e,\n this.range,\n !!this.selectionStore.get('edit'),\n {\n focus: this.selectionStore.get('focus'),\n range: this.selectionStore.get('range'),\n },\n );\n }\n // #endregion\n\n /**\n * Selection & Keyboard\n */\n @Watch('selectionStore') selectionServiceSet(\n s: Observable<SelectionStoreState>,\n ) {\n // clear subscriptions\n this.unsubscribeSelectionStore.forEach(v => v());\n this.unsubscribeSelectionStore.length = 0;\n this.unsubscribeSelectionStore.push(s.onChange('nextFocus', (v) => this.doFocus(v, v)));\n\n this.keyboardService = new KeyboardService({\n selectionStore: s,\n range: r => this.triggerRangeEvent(r),\n focus: (f, changes, focusNextViewport) => {\n if (focusNextViewport) {\n this.beforeNextViewportFocus.emit(f);\n return false;\n } else {\n return this.doFocus(f, f, changes);\n }\n },\n change: val => {\n if (this.readonly) {\n return;\n }\n this.doEdit(val);\n },\n cancel: async () => {\n await this.revogrEdit.cancelChanges();\n this.closeEdit();\n },\n clearCell: () => !this.readonly && this.clearCell(),\n internalPaste: () => !this.readonly && this.beforeRegionPaste.emit(),\n getData: () => this.getData(),\n selectAll: () => this.selectAll.emit(),\n });\n this.createAutoFillService();\n }\n /** Autofill */\n @Watch('dimensionRow')\n @Watch('dimensionCol')\n createAutoFillService() {\n this.autoFillService = new AutoFillService({\n dimensionRow: this.dimensionRow,\n dimensionCol: this.dimensionCol,\n columnService: this.columnService,\n dataStore: this.dataStore,\n\n clearRangeDataApply: e =>\n this.beforeRangeDataApply.emit({\n ...e,\n ...this.types,\n }),\n setTempRange: e => this.setTempRange.emit(e),\n selectionChanged: e => this.selectionChange.emit(e),\n\n rangeCopy: e => this.beforeRangeCopyApply.emit(e),\n rangeDataApply: e => this.rangeEditApply.emit(e),\n\n setRange: e => this.triggerRangeEvent(e),\n getData: () => this.getData(),\n });\n }\n\n /** Columns */\n @Watch('dataStore')\n @Watch('colData')\n columnServiceSet() {\n this.columnService?.destroy();\n this.columnService = new ColumnService(this.dataStore, this.colData);\n this.createAutoFillService();\n }\n\n connectedCallback() {\n this.columnServiceSet();\n this.selectionServiceSet(this.selectionStore);\n }\n\n disconnectedCallback() {\n // clear subscriptions\n this.unsubscribeSelectionStore.forEach(v => v());\n this.unsubscribeSelectionStore.length = 0;\n this.columnService?.destroy();\n }\n\n async componentWillRender() {\n const editCell = this.selectionStore.get('edit');\n if (!editCell) {\n await this.revogrEdit?.beforeDisconnect?.();\n }\n }\n\n private renderRange(range: RangeArea) {\n const style = getElStyle(\n range,\n this.dimensionRow.state,\n this.dimensionCol.state,\n );\n return [\n <div class={SELECTION_BORDER_CLASS} style={style}>\n {this.isMobileDevice && (\n <div class=\"range-handlers\">\n <span class={MOBILE_CLASS}></span>\n <span class={MOBILE_CLASS}></span>\n </div>\n )}\n </div>,\n ];\n }\n\n private renderEditor() {\n // Check if edit access\n const editCell = this.selectionStore.get('edit');\n // Readonly or Editor closed\n if (this.readonly || !editCell) {\n return null;\n }\n const val =\n editCell.val || this.columnService.getCellData(editCell.y, editCell.x);\n const editable = {\n ...editCell,\n ...this.columnService.getSaveData(editCell.y, editCell.x, val),\n };\n const renderEvent = this.beforeEditRender.emit({\n range: {\n ...editCell,\n x1: editCell.x,\n y1: editCell.y,\n },\n ...this.types,\n });\n\n // Render prevented\n if (renderEvent.defaultPrevented) {\n return null;\n }\n\n const style = getElStyle(\n renderEvent.detail.range,\n this.dimensionRow.state,\n this.dimensionCol.state,\n );\n return (\n <revogr-edit\n style={style}\n ref={el => (this.revogrEdit = el)}\n additionalData={this.additionalData}\n editCell={editable}\n saveOnClose={this.applyChangesOnClose}\n column={this.columnService.rowDataModel(editCell.y, editCell.x)}\n editor={this.columnService.getCellEditor(\n editCell.y,\n editCell.x,\n this.editors,\n )}\n onCloseedit={e => this.closeEdit(e)}\n onCelledit={e => {\n const saveEv = this.beforeCellSave.emit(e.detail);\n if (!saveEv.defaultPrevented) {\n this.cellEdit(saveEv.detail);\n }\n\n // if not clear navigate to next cell after edit\n if (!saveEv.detail.preventFocus) {\n this.focusNext();\n }\n }}\n />\n );\n }\n\n render() {\n const nodes: VNode[] = [];\n const editCell = this.renderEditor();\n\n // Editor\n if (editCell) {\n nodes.push(editCell);\n } else {\n const range = this.selectionStore.get('range');\n const focus = this.selectionStore.get('focus');\n\n // Clipboard\n if ((range || focus) && this.useClipboard) {\n nodes.push(\n <revogr-clipboard\n readonly={this.readonly}\n onCopyregion={e => this.onCopy(e.detail)}\n onClearregion={() => !this.readonly && this.clearCell()}\n ref={e => (this.clipboard = e)}\n onPasteregion={e => this.onPaste(e.detail)}\n />,\n );\n }\n\n // Range\n if (range) {\n nodes.push(...this.renderRange(range));\n }\n // Autofill\n if (focus && !this.readonly && this.range) {\n nodes.push(this.autoFillService.renderAutofill(range, focus));\n }\n\n // Order\n if (this.canDrag) {\n nodes.push(\n <revogr-order-editor\n ref={e => (this.orderEditor = e)}\n dataStore={this.dataStore}\n dimensionRow={this.dimensionRow}\n dimensionCol={this.dimensionCol}\n parent={this.element}\n onRowdragstartinit={e => this.rowDragStart(e)}\n />,\n );\n }\n }\n return (\n <Host\n class={{ mobile: this.isMobileDevice }}\n onDblClick={(e: MouseEvent) => this.onElementDblClick(e)}\n onMouseDown={(e: MouseEvent) => this.onElementMouseDown(e)}\n onTouchStart={(e: TouchEvent) => this.onElementMouseDown(e, true)}\n >\n {nodes}\n <slot name=\"data\" />\n </Host>\n );\n }\n\n /**\n * Executes the focus operation on the specified range of cells.\n */\n private doFocus(focus: Cell, end: Cell, changes?: Partial<Cell>) {\n const { defaultPrevented } = this.beforeFocusCell.emit(\n this.columnService.getSaveData(focus.y, focus.x),\n );\n if (defaultPrevented) {\n return false;\n }\n const evData: FocusRenderEvent = {\n range: {\n ...focus,\n x1: end.x,\n y1: end.y,\n },\n next: changes,\n ...this.types,\n };\n const applyEvent = this.applyFocus.emit(evData);\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const { range } = applyEvent.detail;\n return !this.focusCell.emit({\n focus: {\n x: range.x,\n y: range.y,\n },\n end: {\n x: range.x1,\n y: range.y1,\n },\n ...applyEvent.detail,\n }).defaultPrevented;\n }\n\n private triggerRangeEvent(range: RangeArea) {\n const type = this.types.rowType;\n const applyEvent = this.beforeApplyRange.emit({\n range: { ...range },\n ...this.types,\n });\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const data = this.columnService.getRangeTransformedToProps(\n applyEvent.detail.range,\n this.dataStore,\n );\n let e = this.beforeSetRange.emit(data);\n e = this.setRange.emit({ ...applyEvent.detail.range, type });\n if (e.defaultPrevented) {\n return false;\n }\n return !e.defaultPrevented;\n }\n\n /**\n * Open Editor on DblClick\n */\n private onElementDblClick(e: MouseEvent) {\n // DblClick prevented outside - Editor will not open\n \n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n this.doEdit();\n }\n\n /**\n * Handle mouse down event on Host element\n */\n private onElementMouseDown(e: MouseEvent | TouchEvent, touch = false) {\n // Get the target element from the event object\n const targetElement = e.target as HTMLElement | undefined;\n // Ignore focus if clicked input\n if (isEditInput(targetElement)) {\n return;\n }\n\n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n\n // Set focus on the current cell\n this.focus(focusCell, this.range && e.shiftKey);\n\n // Initiate autofill selection\n if (this.range) {\n this.autoFillService.selectionStart(targetElement, this.getData());\n\n // Prevent default behavior for mouse events,\n // but only if target element is not a mobile input\n if (!touch) {\n e.preventDefault();\n } else if (\n verifyTouchTarget((e as TouchEvent).touches[0], MOBILE_CLASS)\n ) {\n // Prevent default behavior for touch events\n // if target element is a mobile input\n e.preventDefault();\n }\n }\n }\n\n /**\n * Start cell editing\n */\n protected doEdit(val = '') {\n if (this.canEdit()) {\n const focus = this.selectionStore.get('focus');\n\n const data = this.columnService.getSaveData(focus.y, focus.x);\n this.setEdit?.emit({\n ...data,\n val,\n });\n }\n }\n\n /**\n * Close editor event triggered\n * @param details - if requires focus next\n */\n private closeEdit(e?: CustomEvent<boolean>) {\n this.cancelEdit.emit();\n if (e?.detail) {\n this.focusNext();\n }\n }\n\n /**\n * Edit finished.\n * Close Editor and save.\n */\n protected cellEdit(e: SaveDataDetails) {\n const dataToSave = this.columnService.getSaveData(e.rgRow, e.rgCol, e.val);\n this.cellEditApply.emit(dataToSave);\n }\n\n private getRegion() {\n const focus = this.selectionStore.get('focus');\n let range = this.selectionStore.get('range');\n if (!range) {\n range = getRange(focus, focus);\n }\n return range;\n }\n private onCopy(e: DataTransfer) {\n const range = this.getRegion();\n const canCopyEvent = this.beforeCopyRegion.emit(range);\n if (canCopyEvent.defaultPrevented) {\n return false;\n }\n let rangeData: DataFormat[][] | undefined;\n\n if (range) {\n const { data, mapping } = this.columnService.copyRangeArray(\n range,\n this.dataStore,\n );\n const event = this.rangeClipboardCopy.emit({\n range,\n data,\n mapping,\n ...this.types,\n });\n if (!event.defaultPrevented) {\n rangeData = event.detail.data;\n }\n }\n\n this.clipboard.doCopy(e, rangeData);\n return true;\n }\n\n private onPaste(data: string[][]) {\n const focus = this.selectionStore.get('focus');\n const isEditing = this.selectionStore.get('edit') !== null;\n if (!focus || isEditing) {\n return;\n }\n let { changed, range } = this.columnService.getTransformedDataToApply(\n focus,\n data,\n );\n const { defaultPrevented: canPaste } = this.rangeClipboardPaste.emit({\n data: changed,\n range,\n ...this.types,\n });\n if (canPaste) {\n return;\n }\n this.autoFillService.onRangeApply(changed, range);\n }\n\n private async focusNext() {\n const canFocus = await this.keyboardService.keyChangeSelection(\n new KeyboardEvent('keydown', {\n code: codesLetter.ARROW_DOWN,\n }),\n this.range,\n );\n if (!canFocus) {\n this.closeEdit();\n }\n }\n\n protected clearCell() {\n if (\n this.selectionStore.get('range') &&\n !isRangeSingleCell(this.selectionStore.get('range'))\n ) {\n const data = this.columnService.getRangeStaticData(\n this.selectionStore.get('range'),\n '',\n );\n this.autoFillService.onRangeApply(data, this.selectionStore.get('range'));\n } else if (this.canEdit()) {\n const focused = this.selectionStore.get('focus');\n const cell = this.columnService.getSaveData(focused.y, focused.x);\n this.cellEdit({\n rgRow: focused.y,\n rgCol: focused.x,\n val: '',\n type: cell.type,\n prop: cell.prop,\n });\n }\n }\n\n private rowDragStart({ detail }: CustomEvent<{ cell: Cell; text: string }>) {\n detail.text = this.columnService.getCellData(detail.cell.y, detail.cell.x);\n }\n\n /**\n * Verify if edit allowed.\n */\n protected canEdit() {\n if (this.readonly) {\n return false;\n }\n const focus = this.selectionStore.get('focus');\n return focus && !this.columnService?.isReadOnly(focus.y, focus.x);\n }\n\n get edited(): EditCellStore {\n return this.selectionStore.get('edit');\n }\n\n /**\n * Sets the focus on a cell and optionally edits a range.\n */\n focus(cell?: Cell, isRangeEdit = false) {\n if (!cell) return false;\n\n const end = cell;\n const start = this.selectionStore.get('focus');\n\n if (isRangeEdit && start) {\n return this.triggerRangeEvent(getRange(start, end));\n }\n\n return this.doFocus(cell, end);\n }\n\n get types(): AllDimensionType {\n return {\n rowType: this.dataStore.get('type'),\n colType: this.columnService.type,\n };\n }\n\n /**\n * Collect data\n */\n protected getData(): EventData {\n return {\n el: this.element,\n rows: this.dimensionRow.state,\n cols: this.dimensionCol.state,\n lastCell: this.lastCell,\n focus: this.selectionStore.get('focus'),\n range: this.selectionStore.get('range'),\n };\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"revogr-overlay-selection2.js","mappings":"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","names":["debounce"],"sources":["src/components/overlay/keyboard.service.ts","src/components/overlay/autofill.service.tsx","src/components/overlay/revogr-overlay-style.scss?tag=revogr-overlay-selection","src/components/overlay/revogr-overlay-selection.tsx"],"sourcesContent":["import { getRange } from '@store';\nimport { codesLetter } from '../../utils/key.codes';\nimport {\n isAll,\n isClear,\n isCopy,\n isCut,\n isEnterKeyValue,\n isLetterKey,\n isPaste,\n} from '../../utils/key.utils';\nimport { timeout } from '../../utils';\nimport {\n EventData,\n getCoordinate,\n isAfterLast,\n isBeforeFirst,\n} from './selection.utils';\nimport { RESIZE_INTERVAL } from '../../utils/consts';\nimport { Cell, RangeArea, SelectionStoreState } from '@type';\nimport { Observable } from '../../utils/store.utils';\n\ntype Config = {\n selectionStore: Observable<SelectionStoreState>;\n\n // Apply changes from edit.\n change(val?: any): void;\n // Cancels edit. Escape changes.\n cancel(): void;\n\n clearCell(): void;\n focus(focus: Cell, changes: Partial<Cell>, focusNextViewport?: number): boolean;\n\n getData(): any;\n internalPaste(): void;\n range(range: RangeArea): boolean;\n selectAll(): void;\n};\n\nconst DIRECTION_CODES: string[] = [\n codesLetter.TAB,\n codesLetter.ARROW_UP,\n codesLetter.ARROW_DOWN,\n codesLetter.ARROW_LEFT,\n codesLetter.ARROW_RIGHT,\n];\nexport class KeyboardService {\n constructor(private sv: Config) {}\n\n async keyDown(\n e: KeyboardEvent,\n canRange: boolean,\n isEditMode: boolean,\n { range, focus }: Pick<EventData, 'range' | 'focus'>,\n ) {\n // IF EDIT MODE\n if (isEditMode) {\n switch (e.code) {\n case codesLetter.ESCAPE:\n this.sv.cancel();\n break;\n case codesLetter.TAB:\n this.keyChangeSelection(e, canRange);\n break;\n }\n return;\n }\n\n // IF NOT EDIT MODE\n\n // pressed clear key\n if (range && isClear(e.code)) {\n this.sv.clearCell();\n return;\n }\n\n // below works with focus only\n if (!focus) {\n return;\n }\n\n // tab key means same as arrow right\n if (codesLetter.TAB === e.code) {\n this.keyChangeSelection(e, canRange);\n return;\n }\n\n // pressed enter\n if (isEnterKeyValue(e.key)) {\n this.sv.change();\n return;\n }\n\n // copy operation\n if (isCopy(e)) {\n return;\n }\n\n // cut operation\n if (isCut(e)) {\n return;\n }\n\n // paste operation\n if (isPaste(e)) {\n this.sv.internalPaste();\n return;\n }\n\n // select all\n if (isAll(e)) {\n if (canRange) {\n this.selectAll(e);\n }\n return;\n }\n\n // pressed letter key\n if (isLetterKey(e.keyCode)) {\n this.sv.change(e.key);\n return;\n }\n\n // pressed arrow, change selection position\n if (await this.keyChangeSelection(e, canRange)) {\n return;\n }\n }\n\n private selectAll(e: KeyboardEvent) {\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n // if no range or focus - do nothing\n if (!range || !focus) {\n return;\n }\n e.preventDefault();\n this.sv.selectAll();\n }\n\n async keyChangeSelection(e: KeyboardEvent, canRange: boolean) {\n const data = this.changeDirectionKey(e, canRange);\n if (!data) {\n return false;\n }\n\n // this interval needed for several cases\n // grid could be resized before next click\n // at this case to avoid screen jump we use this interval\n await timeout(RESIZE_INTERVAL + 30);\n\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n return this.keyPositionChange(data.changes, range, focus, data.isMulti);\n }\n\n keyPositionChange(\n changes: Partial<Cell>,\n range?: RangeArea,\n focus?: Cell,\n isMulti = false,\n ) {\n if (!range || !focus) {\n return false;\n }\n const data = getCoordinate(range, focus, changes, isMulti);\n if (!data) {\n return false;\n }\n const eData: EventData = this.sv.getData();\n if (isMulti) {\n if (isAfterLast(data.end, eData.lastCell) || isBeforeFirst(data.start)) {\n return false;\n }\n const range = getRange(data.start, data.end);\n return this.sv.range(range);\n }\n return this.sv.focus(\n data.start,\n changes,\n isAfterLast(data.start, eData.lastCell)\n ? 1\n : isBeforeFirst(data.start)\n ? -1\n : 0,\n );\n }\n\n /** Monitor key direction changes */\n changeDirectionKey(\n e: KeyboardEvent,\n canRange: boolean,\n ): { changes: Partial<Cell>; isMulti?: boolean } | void {\n const isMulti = canRange && e.shiftKey;\n if (DIRECTION_CODES.includes(e.code)) {\n e.preventDefault();\n }\n\n if (e.shiftKey) {\n switch (e.code) {\n case codesLetter.TAB:\n return { changes: { x: -1 }, isMulti: false };\n }\n }\n \n switch (e.code) {\n case codesLetter.ARROW_UP:\n return { changes: { y: -1 }, isMulti };\n case codesLetter.ARROW_DOWN:\n return { changes: { y: 1 }, isMulti };\n case codesLetter.ARROW_LEFT:\n return { changes: { x: -1 }, isMulti };\n case codesLetter.TAB:\n case codesLetter.ARROW_RIGHT:\n return { changes: { x: 1 }, isMulti };\n }\n }\n}\n","import debounce from 'lodash/debounce';\nimport { DebouncedFunc } from 'lodash';\n\nimport { h } from '@stencil/core';\nimport { CELL_HANDLER_CLASS, MOBILE_CLASS } from '../../utils/consts';\nimport {\n collectModelsOfRange,\n EventData,\n getCell,\n getCurrentCell,\n isAfterLast,\n} from './selection.utils';\nimport { DSourceState, getSourceItem, getRange } from '@store';\nimport ColumnService from '../data/column.service';\nimport { getPropertyFromEvent } from '../../utils/events';\nimport {\n DataLookup,\n DataType,\n DimensionSettingsState,\n TempRange,\n ChangedRange,\n BeforeRangeSaveDataDetails,\n RangeArea,\n Cell,\n DimensionRows,\n} from '@type';\nimport { Observable } from '../../utils/store.utils';\n\ntype Config = {\n dimensionRow: Observable<DimensionSettingsState>;\n dimensionCol: Observable<DimensionSettingsState>;\n columnService: ColumnService;\n dataStore: Observable<DSourceState<DataType, DimensionRows>>;\n\n setTempRange(e: TempRange | null): Event;\n selectionChanged(e: ChangedRange): Event;\n rangeCopy(e: ChangedRange): Event;\n rangeDataApply(e: BeforeRangeSaveDataDetails): CustomEvent;\n setRange(e: RangeArea): boolean;\n clearRangeDataApply(e: { range: RangeArea }): CustomEvent<{\n range: RangeArea;\n }>;\n\n getData(): any;\n};\n\nconst enum AutoFillType {\n selection = 'Selection',\n autoFill = 'AutoFill',\n}\n\nexport class AutoFillService {\n private autoFillType: AutoFillType | null = null;\n private autoFillInitial: Cell | null = null;\n private autoFillStart: Cell | null = null;\n private autoFillLast: Cell | null = null;\n\n private onMouseMoveAutofill: DebouncedFunc<\n (e: MouseEvent | TouchEvent, data: EventData) => void\n >;\n\n constructor(private sv: Config) {}\n\n /**\n * Render autofill box\n * @param range\n * @param selectionFocus\n */\n renderAutofill(range: RangeArea, selectionFocus: Cell) {\n let handlerStyle;\n if (range) {\n handlerStyle = getCell(\n range,\n this.sv.dimensionRow.state,\n this.sv.dimensionCol.state,\n );\n } else {\n handlerStyle = getCell(\n {\n ...selectionFocus,\n x1: selectionFocus.x,\n y1: selectionFocus.y,\n },\n this.sv.dimensionRow.state,\n this.sv.dimensionCol.state,\n );\n }\n return (\n <div\n class={{\n [CELL_HANDLER_CLASS]: true,\n [MOBILE_CLASS]: true,\n }}\n style={{\n left: `${handlerStyle.right}px`,\n top: `${handlerStyle.bottom}px`,\n }}\n onMouseDown={(e: MouseEvent) => this.autoFillHandler(e)}\n onTouchStart={(e: TouchEvent) => this.autoFillHandler(e)}\n />\n );\n }\n\n private autoFillHandler(\n e: MouseEvent | TouchEvent,\n type = AutoFillType.autoFill,\n ) {\n let target: Element | null = null;\n if (e.target instanceof Element) {\n target = e.target;\n }\n if (!target) {\n return;\n }\n this.selectionStart(target, this.sv.getData(), type);\n e.preventDefault();\n }\n\n get isAutoFill() {\n return !!this.autoFillType;\n }\n\n /**\n * Process mouse move events\n */\n selectionMouseMove(e: MouseEvent | TouchEvent) {\n // initiate mouse move debounce if not present\n if (!this.onMouseMoveAutofill) {\n this.onMouseMoveAutofill = debounce(\n (e: MouseEvent | TouchEvent, data: EventData) =>\n this.doAutofillMouseMove(e, data),\n 5,\n );\n }\n if (this.isAutoFill) {\n this.onMouseMoveAutofill(e, this.sv.getData());\n }\n }\n\n private getFocus(focus: Cell, range: RangeArea) {\n // there was an issue that it was taking last cell from range but focus was out\n if (!focus && range) {\n focus = { x: range.x, y: range.y };\n }\n return focus || null;\n }\n\n /**\n * Autofill logic:\n * on mouse move apply based on previous direction (if present)\n */\n private doAutofillMouseMove(event: MouseEvent | TouchEvent, data: EventData) {\n // if no initial - not started\n if (!this.autoFillInitial) {\n return;\n }\n const x = getPropertyFromEvent(event, 'clientX', MOBILE_CLASS);\n const y = getPropertyFromEvent(event, 'clientY', MOBILE_CLASS);\n // skip touch\n if (x === null || y === null) {\n return;\n }\n const current = getCurrentCell({ x, y }, data);\n\n // first time or direction equal to start(same as first time)\n if (!this.autoFillLast) {\n if (!this.autoFillLast) {\n this.autoFillLast = this.autoFillStart;\n }\n }\n\n // check if not the latest, if latest - do nothing\n if (isAfterLast(current, data.lastCell)) {\n return;\n }\n this.autoFillLast = current;\n\n const isSame =\n current.x === this.autoFillInitial.x &&\n current.y === this.autoFillInitial.y;\n\n // if same as initial - clear\n if (isSame) {\n this.sv.setTempRange(null);\n } else {\n this.sv.setTempRange({\n area: getRange(this.autoFillInitial, this.autoFillLast),\n type: this.autoFillType,\n });\n }\n }\n\n /**\n * Range selection started\n * Mode @param type:\n * Can be triggered from MouseDown selection on element\n * Or can be triggered on corner square drag\n */\n selectionStart(\n target: Element,\n data: EventData,\n type = AutoFillType.selection,\n ) {\n /** Get cell by autofill element */\n const { top, left } = target.getBoundingClientRect();\n this.autoFillInitial = this.getFocus(data.focus, data.range);\n this.autoFillType = type;\n this.autoFillStart = getCurrentCell({ x: left, y: top }, data);\n }\n\n /**\n * Clear current range selection on mouse up and mouse leave events\n */\n clearAutoFillSelection(focus: Cell, oldRange: RangeArea) {\n // If autofill was active, apply autofill values\n if (this.autoFillInitial) {\n // Fetch latest focus\n this.autoFillInitial = this.getFocus(focus, oldRange);\n\n // Apply range data if autofill mode is active\n if (this.autoFillType === AutoFillType.autoFill) {\n const range = getRange(this.autoFillInitial, this.autoFillLast);\n\n // If range is present, apply data\n if (range) {\n const {\n defaultPrevented: stopApply,\n detail: { range: newRange },\n } = this.sv.clearRangeDataApply({\n range,\n });\n\n // If data apply was not prevented, apply new range\n if (!stopApply) {\n this.applyRangeWithData(newRange, oldRange);\n } else {\n // If data apply was prevented, clear temporary range\n this.sv.setTempRange(null);\n }\n }\n } else {\n // If not autofill mode, apply range only\n this.applyRangeOnly(this.autoFillInitial, this.autoFillLast);\n }\n }\n\n // Reset autofill state\n this.resetAutoFillState();\n }\n\n /**\n * Reset autofill state\n */\n private resetAutoFillState() {\n this.autoFillType = null;\n this.autoFillInitial = null;\n this.autoFillLast = null;\n this.autoFillStart = null;\n }\n\n /**\n * Trigger range apply events and handle responses\n */\n onRangeApply(data: DataLookup, range: RangeArea) {\n this.sv.rangeDataApply({\n data,\n models: collectModelsOfRange(data, this.sv.dataStore),\n type: this.sv.dataStore.get('type'),\n });\n\n this.sv.setRange(range);\n }\n\n /** Apply range and copy data during range application */\n private applyRangeWithData(newRange: RangeArea, oldRange: RangeArea) {\n const rangeData: ChangedRange = {\n type: this.sv.dataStore.get('type'),\n colType: this.sv.columnService.type,\n newData: {},\n mapping: {},\n newRange,\n oldRange,\n };\n const { mapping, changed } = this.sv.columnService.getRangeData(\n rangeData,\n this.sv.columnService.columns,\n );\n rangeData.newData = changed;\n rangeData.mapping = mapping;\n let e = this.sv.selectionChanged(rangeData);\n\n // if default prevented - clear range\n if (e.defaultPrevented) {\n this.sv.setTempRange(null);\n return;\n }\n\n e = this.sv.rangeCopy(rangeData);\n if (e.defaultPrevented) {\n this.sv.setRange(newRange);\n return;\n }\n this.onRangeApply(rangeData.newData, newRange);\n }\n\n /**\n * Update range selection only,\n * no data change (mouse selection)\n */\n private applyRangeOnly(start?: Cell, end?: Cell) {\n // no changes to apply\n if (!start || !end) {\n return;\n }\n\n const newRange = getRange(start, end);\n this.sv.setRange(newRange);\n }\n}\n","@mixin autofill-handle($handler-size: 14px, $icon-size: 10px) {\n .autofill-handle {\n position: absolute;\n width: $handler-size;\n height: $handler-size;\n margin-left: -$handler-size + 1;\n margin-top: -$handler-size + 1;\n z-index: 10;\n cursor: crosshair;\n\n &::before {\n content: '';\n position: absolute;\n right: 0;\n bottom: 0;\n width: $icon-size;\n height: $icon-size;\n background: $selection-border;\n border: 1px solid white;\n box-sizing: border-box;\n }\n }\n}\n\nrevogr-overlay-selection {\n display: block;\n position: relative;\n width: 100%;\n\n\n @include autofill-handle;\n\n &.mobile {\n @include autofill-handle(30px, 12px);\n }\n\n .selection-border-range {\n position: absolute;\n pointer-events: none;\n z-index: 9;\n\n .range-handlers {\n height: 100%;\n background-color: transparent;\n width: calc(50% + (50% / 2));\n max-width: 50px;\n min-width: 20px;\n left: 50%;\n transform: translateX(-50%);\n position: absolute;\n\n $btn-size: 20px;\n $handler-w: 15px;\n $handler-h: 5px;\n \n > span {\n pointer-events: auto;\n height: $btn-size;\n width: $btn-size;\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n\n\n &:before, &:after {\n position: absolute;\n border-radius: 5px;\n width: $handler-w;\n height: $handler-h;\n left: 50%;\n transform: translateX(-50%);\n background-color: rgba(black, 20%);\n }\n &:first-child {\n top: -($handler-h + 2px);\n &:before{\n content: '';\n top: 0;\n }\n }\n &:last-child {\n bottom: -($handler-h + 2px);\n &:after{\n content: '';\n bottom: 0;\n }\n }\n }\n }\n @include selection();\n }\n\n revogr-edit {\n z-index: 10;\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n VNode,\n Element,\n Watch,\n} from '@stencil/core';\nimport ColumnService from '../data/column.service';\nimport { codesLetter } from '../../utils/key.codes';\nimport { MOBILE_CLASS, SELECTION_BORDER_CLASS } from '../../utils/consts';\nimport { DSourceState } from '@store';\nimport {\n getRange,\n isRangeSingleCell,\n} from '@store';\nimport {\n collectModelsOfRange,\n EventData,\n getElStyle,\n getFocusCellBasedOnEvent,\n} from './selection.utils';\nimport { isEditInput } from '../editors/edit.utils';\nimport { KeyboardService } from './keyboard.service';\nimport { AutoFillService } from './autofill.service';\nimport { verifyTouchTarget } from '../../utils/events';\nimport {\n Observable,\n SelectionStoreState,\n DimensionSettingsState,\n DataType,\n DimensionRows,\n ColumnRegular,\n DimensionCols,\n Cell,\n DragStartEvent,\n} from '../../components';\nimport { EditCellStore, MultiDimensionType, RangeClipboardCopyEventProps, RangeClipboardPasteEvent } from '@type';\nimport {\n FocusRenderEvent,\n ApplyFocusEvent,\n AllDimensionType,\n DataFormat,\n} from '@type';\nimport {\n Editors,\n BeforeSaveDataDetails,\n BeforeEdit,\n RangeArea,\n TempRange,\n ChangedRange,\n BeforeRangeSaveDataDetails,\n SaveDataDetails,\n} from '@type';\n\n/**\n * Component for overlaying the grid with the selection.\n */\n@Component({\n tag: 'revogr-overlay-selection',\n styleUrl: 'revogr-overlay-style.scss',\n})\nexport class OverlaySelection {\n // #region Properties\n /**\n * Readonly mode.\n */\n @Prop() readonly: boolean;\n /**\n * Range selection allowed.\n */\n @Prop() range: boolean;\n /**\n * Enable revogr-order-editor component (read more in revogr-order-editor component).\n * Allows D&D.\n */\n @Prop() canDrag: boolean;\n\n /**\n * Enable revogr-clipboard component (read more in revogr-clipboard component).\n * Allows copy/paste.\n */\n @Prop() useClipboard: boolean;\n\n /** Stores */\n /** Selection, range, focus. */\n @Prop() selectionStore: Observable<SelectionStoreState>;\n /** Dimension settings Y. */\n @Prop() dimensionRow: Observable<DimensionSettingsState>;\n /** Dimension settings X. */\n @Prop() dimensionCol: Observable<DimensionSettingsState>;\n\n // --------------------------------------------------------------------------\n //\n // Static stores, not expected to change during component lifetime\n //\n // --------------------------------------------------------------------------\n\n /**\n * Row data store.\n */\n @Prop() dataStore: Observable<DSourceState<DataType, DimensionRows>>;\n\n /**\n * Column data store.\n */\n @Prop() colData: Observable<DSourceState<ColumnRegular, DimensionCols>>;\n /**\n * Last real coordinates positions + 1.\n */\n @Prop() lastCell: Cell;\n /**\n * Custom editors register.\n */\n @Prop() editors: Editors;\n /**\n * If true applys changes when cell closes if not Escape.\n */\n @Prop() applyChangesOnClose = false;\n /**\n * Additional data to pass to renderer.\n */\n @Prop() additionalData: any;\n\n /**\n * Is mobile view mode.\n */\n @Prop() isMobileDevice: boolean;\n\n // #endregion\n\n // #region Events\n /**\n * Before clipboard copy happened. Validate data before copy.\n * To prevent the default behavior of editing data and use your own implementation, call `e.preventDefault()`.\n */\n @Event({ eventName: 'beforecopyregion', cancelable: true })\n beforeCopyRegion: EventEmitter;\n /**\n * Before region paste happened.\n */\n @Event({ eventName: 'beforepasteregion', cancelable: true })\n beforeRegionPaste: EventEmitter;\n\n /**\n * Cell edit apply to the data source.\n * Triggers datasource edit on the root level.\n */\n @Event({ eventName: 'celleditapply', cancelable: true })\n cellEditApply: EventEmitter<BeforeSaveDataDetails>;\n\n /**\n * Before cell focus.\n */\n @Event({ eventName: 'beforecellfocusinit', cancelable: true })\n beforeFocusCell: EventEmitter<BeforeSaveDataDetails>;\n\n\n /**\n * Fired when change of viewport happens.\n * Usually when we switch between pinned regions.\n */\n @Event({ eventName: 'beforenextvpfocus', cancelable: true })\n beforeNextViewportFocus: EventEmitter<Cell>;\n\n /**\n * Set edit cell.\n */\n @Event({ eventName: 'setedit' }) setEdit: EventEmitter<BeforeEdit>;\n\n /**\n * Before range applied.\n */\n @Event({ eventName: 'beforeapplyrange' })\n beforeApplyRange: EventEmitter<FocusRenderEvent>;\n /**\n * Before range selection applied.\n */\n @Event({ eventName: 'beforesetrange' }) beforeSetRange: EventEmitter;\n\n /**\n * Before editor render.\n */\n @Event({ eventName: 'beforeeditrender' })\n beforeEditRender: EventEmitter<FocusRenderEvent>;\n\n /**\n * Set range.\n */\n @Event({ eventName: 'setrange' }) setRange: EventEmitter<\n RangeArea & { type: MultiDimensionType }\n >;\n\n /** Select all. */\n @Event({ eventName: 'selectall' }) selectAll: EventEmitter;\n /**\n * Used for editors support when editor close requested.\n */\n @Event({ eventName: 'canceledit' }) cancelEdit: EventEmitter;\n\n /**\n * Set temp range area during autofill.\n */\n @Event({ eventName: 'settemprange' })\n setTempRange: EventEmitter<TempRange | null>;\n\n /**\n * Before cell get focused.\n * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.\n */\n @Event({ eventName: 'applyfocus' })\n applyFocus: EventEmitter<FocusRenderEvent>;\n\n /**\n * Cell get focused.\n * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.\n */\n @Event({ eventName: 'focuscell' }) focusCell: EventEmitter<ApplyFocusEvent>;\n /** Range data apply. */\n @Event({ eventName: 'beforerangedataapply' })\n beforeRangeDataApply: EventEmitter<FocusRenderEvent>;\n /** Selection range changed. */\n @Event({ eventName: 'selectionchangeinit', cancelable: true })\n selectionChange: EventEmitter<ChangedRange>;\n /** Before range copy. */\n @Event({ eventName: 'beforerangecopyapply', cancelable: true, bubbles: true })\n beforeRangeCopyApply: EventEmitter<ChangedRange>;\n\n /** Range data apply.\n * Triggers datasource edit on the root level.\n */\n @Event({ eventName: 'rangeeditapply', cancelable: true })\n rangeEditApply: EventEmitter<BeforeRangeSaveDataDetails>;\n /** Range copy. */\n @Event({ eventName: 'clipboardrangecopy', cancelable: true })\n /**\n * Range copy event.\n * This event is triggered when data is ready to be copied to the clipboard.\n * If you want to prevent the default behavior of copying data, you can call `e.preventDefault()`.\n * If you want to modify the data that will be copied to the clipboard, modify the `data` property of the event object.\n */\n rangeClipboardCopy: EventEmitter<RangeClipboardCopyEventProps>;\n\n /**\n * Range paste event.\n */\n @Event({ eventName: 'clipboardrangepaste', cancelable: true })\n rangeClipboardPaste: EventEmitter<RangeClipboardPasteEvent>;\n\n /**\n * Before key up event proxy, used to prevent key up trigger.\n * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.\n * Call preventDefault().\n */\n @Event({ eventName: 'beforekeydown' })\n beforeKeyDown: EventEmitter<KeyboardEvent>;\n /**\n * Before key down event proxy, used to prevent key down trigger.\n * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.\n * Call preventDefault().\n */\n @Event({ eventName: 'beforekeyup' }) beforeKeyUp: EventEmitter<KeyboardEvent>;\n /**\n * Runs before cell save.\n * Can be used to override or cancel original save.\n */\n @Event({ eventName: 'beforecellsave', cancelable: true })\n beforeCellSave: EventEmitter;\n\n // #endregion\n\n // #region Private Properties\n @Element() element: HTMLElement;\n private clipboard: HTMLRevogrClipboardElement;\n\n protected columnService: ColumnService;\n private keyboardService: KeyboardService | null = null;\n private autoFillService: AutoFillService | null = null;\n private orderEditor: HTMLRevogrOrderEditorElement;\n private revogrEdit: HTMLRevogrEditElement | null = null;\n private unsubscribeSelectionStore: { (): void }[] = [];\n // #endregion\n\n // #region Listeners\n @Listen('touchmove', { target: 'document' })\n @Listen('mousemove', { target: 'document' })\n onMouseMove(e: MouseEvent | TouchEvent) {\n if (this.selectionStore.get('focus')) {\n this.autoFillService.selectionMouseMove(e);\n }\n }\n\n /**\n * Action finished inside of the document.\n * Pointer left document, clear any active operation.\n */\n @Listen('touchend', { target: 'document' })\n @Listen('mouseup', { target: 'document' })\n @Listen('mouseleave', { target: 'document' })\n onMouseUp() {\n // Clear auto fill selection\n // when pointer left document,\n // clear any active operation.\n this.autoFillService.clearAutoFillSelection(\n this.selectionStore.get('focus'),\n this.selectionStore.get('range'),\n );\n }\n\n /**\n * Row drag started.\n * This event is fired when drag action started on cell.\n */\n @Listen('dragstartcell') onCellDrag(e: CustomEvent<DragStartEvent>) {\n // Invoke drag start on order editor.\n this.orderEditor?.dragStart(e.detail);\n }\n\n /**\n * Get keyboard down from element.\n * This event is fired when keyboard key is released.\n */\n @Listen('keyup', { target: 'document' }) onKeyUp(e: KeyboardEvent) {\n // Emit before key up event.\n this.beforeKeyUp.emit(e);\n }\n\n /**\n * Get keyboard down from element.\n * This event is fired when keyboard key is pressed.\n */\n @Listen('keydown', { target: 'document' }) onKeyDown(e: KeyboardEvent) {\n // Emit before key down event and check if default prevention is set.\n const proxy = this.beforeKeyDown.emit(e);\n if (e.defaultPrevented || proxy.defaultPrevented) {\n return;\n }\n // Invoke key down on keyboard service.\n this.keyboardService?.keyDown(\n e,\n this.range,\n !!this.selectionStore.get('edit'),\n {\n focus: this.selectionStore.get('focus'),\n range: this.selectionStore.get('range'),\n },\n );\n }\n // #endregion\n\n /**\n * Selection & Keyboard\n */\n @Watch('selectionStore') selectionServiceSet(\n s: Observable<SelectionStoreState>,\n ) {\n // clear subscriptions\n this.unsubscribeSelectionStore.forEach(v => v());\n this.unsubscribeSelectionStore.length = 0;\n this.unsubscribeSelectionStore.push(s.onChange('nextFocus', (v) => this.doFocus(v, v)));\n\n this.keyboardService = new KeyboardService({\n selectionStore: s,\n range: r => this.triggerRangeEvent(r),\n focus: (f, changes, focusNextViewport) => {\n if (focusNextViewport) {\n this.beforeNextViewportFocus.emit(f);\n return false;\n } else {\n return this.doFocus(f, f, changes);\n }\n },\n change: val => {\n if (this.readonly) {\n return;\n }\n this.doEdit(val);\n },\n cancel: async () => {\n await this.revogrEdit.cancelChanges();\n this.closeEdit();\n },\n clearCell: () => !this.readonly && this.clearCell(),\n internalPaste: () => !this.readonly && this.beforeRegionPaste.emit(),\n getData: () => this.getData(),\n selectAll: () => this.selectAll.emit(),\n });\n this.createAutoFillService();\n }\n /** Autofill */\n @Watch('dimensionRow')\n @Watch('dimensionCol')\n createAutoFillService() {\n this.autoFillService = new AutoFillService({\n dimensionRow: this.dimensionRow,\n dimensionCol: this.dimensionCol,\n columnService: this.columnService,\n dataStore: this.dataStore,\n\n clearRangeDataApply: e =>\n this.beforeRangeDataApply.emit({\n ...e,\n ...this.types,\n }),\n setTempRange: e => this.setTempRange.emit(e),\n selectionChanged: e => this.selectionChange.emit(e),\n\n rangeCopy: e => this.beforeRangeCopyApply.emit(e),\n rangeDataApply: e => this.rangeEditApply.emit(e),\n\n setRange: e => this.triggerRangeEvent(e),\n getData: () => this.getData(),\n });\n }\n\n /** Columns */\n @Watch('dataStore')\n @Watch('colData')\n columnServiceSet() {\n this.columnService?.destroy();\n this.columnService = new ColumnService(this.dataStore, this.colData);\n this.createAutoFillService();\n }\n\n connectedCallback() {\n this.columnServiceSet();\n this.selectionServiceSet(this.selectionStore);\n }\n\n disconnectedCallback() {\n // clear subscriptions\n this.unsubscribeSelectionStore.forEach(v => v());\n this.unsubscribeSelectionStore.length = 0;\n this.columnService?.destroy();\n }\n\n async componentWillRender() {\n const editCell = this.selectionStore.get('edit');\n if (!editCell) {\n await this.revogrEdit?.beforeDisconnect?.();\n }\n }\n\n private renderRange(range: RangeArea) {\n const style = getElStyle(\n range,\n this.dimensionRow.state,\n this.dimensionCol.state,\n );\n return [\n <div class={SELECTION_BORDER_CLASS} style={style}>\n {this.isMobileDevice && (\n <div class=\"range-handlers\">\n <span class={MOBILE_CLASS}></span>\n <span class={MOBILE_CLASS}></span>\n </div>\n )}\n </div>,\n ];\n }\n\n private renderEditor() {\n // Check if edit access\n const editCell = this.selectionStore.get('edit');\n // Readonly or Editor closed\n if (this.readonly || !editCell) {\n return null;\n }\n const val =\n editCell.val || this.columnService.getCellData(editCell.y, editCell.x);\n const editable = {\n ...editCell,\n ...this.columnService.getSaveData(editCell.y, editCell.x, val),\n };\n const renderEvent = this.beforeEditRender.emit({\n range: {\n ...editCell,\n x1: editCell.x,\n y1: editCell.y,\n },\n ...this.types,\n });\n\n // Render prevented\n if (renderEvent.defaultPrevented) {\n return null;\n }\n\n const style = getElStyle(\n renderEvent.detail.range,\n this.dimensionRow.state,\n this.dimensionCol.state,\n );\n return (\n <revogr-edit\n style={style}\n ref={el => (this.revogrEdit = el)}\n additionalData={this.additionalData}\n editCell={editable}\n saveOnClose={this.applyChangesOnClose}\n column={this.columnService.rowDataModel(editCell.y, editCell.x)}\n editor={this.columnService.getCellEditor(\n editCell.y,\n editCell.x,\n this.editors,\n )}\n onCloseedit={e => this.closeEdit(e)}\n onCelledit={e => {\n const saveEv = this.beforeCellSave.emit(e.detail);\n if (!saveEv.defaultPrevented) {\n this.cellEdit(saveEv.detail);\n }\n\n // if not clear navigate to next cell after edit\n if (!saveEv.detail.preventFocus) {\n this.focusNext();\n }\n }}\n />\n );\n }\n\n render() {\n const nodes: VNode[] = [];\n const editCell = this.renderEditor();\n\n // Editor\n if (editCell) {\n nodes.push(editCell);\n } else {\n const range = this.selectionStore.get('range');\n const focus = this.selectionStore.get('focus');\n\n // Clipboard\n if ((range || focus) && this.useClipboard) {\n nodes.push(\n <revogr-clipboard\n readonly={this.readonly}\n onCopyregion={e => this.onCopy(e.detail)}\n onClearregion={() => !this.readonly && this.clearCell()}\n ref={e => (this.clipboard = e)}\n onPasteregion={e => this.onPaste(e.detail)}\n />,\n );\n }\n\n // Range\n if (range) {\n nodes.push(...this.renderRange(range));\n }\n // Autofill\n if (focus && !this.readonly && this.range) {\n nodes.push(this.autoFillService.renderAutofill(range, focus));\n }\n\n // Order\n if (this.canDrag) {\n nodes.push(\n <revogr-order-editor\n ref={e => (this.orderEditor = e)}\n dataStore={this.dataStore}\n dimensionRow={this.dimensionRow}\n dimensionCol={this.dimensionCol}\n parent={this.element}\n onRowdragstartinit={e => this.rowDragStart(e)}\n />,\n );\n }\n }\n return (\n <Host\n class={{ mobile: this.isMobileDevice }}\n onDblClick={(e: MouseEvent) => this.onElementDblClick(e)}\n onMouseDown={(e: MouseEvent) => this.onElementMouseDown(e)}\n onTouchStart={(e: TouchEvent) => this.onElementMouseDown(e, true)}\n >\n {nodes}\n <slot name=\"data\" />\n </Host>\n );\n }\n\n /**\n * Executes the focus operation on the specified range of cells.\n */\n private doFocus(focus: Cell, end: Cell, changes?: Partial<Cell>) {\n const { defaultPrevented } = this.beforeFocusCell.emit(\n this.columnService.getSaveData(focus.y, focus.x),\n );\n if (defaultPrevented) {\n return false;\n }\n const evData: FocusRenderEvent = {\n range: {\n ...focus,\n x1: end.x,\n y1: end.y,\n },\n next: changes,\n ...this.types,\n };\n const applyEvent = this.applyFocus.emit(evData);\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const { range } = applyEvent.detail;\n return !this.focusCell.emit({\n focus: {\n x: range.x,\n y: range.y,\n },\n end: {\n x: range.x1,\n y: range.y1,\n },\n ...applyEvent.detail,\n }).defaultPrevented;\n }\n\n private triggerRangeEvent(range: RangeArea) {\n const type = this.types.rowType;\n const applyEvent = this.beforeApplyRange.emit({\n range: { ...range },\n ...this.types,\n });\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const data = this.columnService.getRangeTransformedToProps(\n applyEvent.detail.range,\n this.dataStore,\n );\n let e = this.beforeSetRange.emit(data);\n e = this.setRange.emit({ ...applyEvent.detail.range, type });\n if (e.defaultPrevented) {\n return false;\n }\n return !e.defaultPrevented;\n }\n\n /**\n * Open Editor on DblClick\n */\n private onElementDblClick(e: MouseEvent) {\n // DblClick prevented outside - Editor will not open\n \n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n this.doEdit();\n }\n\n /**\n * Handle mouse down event on Host element\n */\n private onElementMouseDown(e: MouseEvent | TouchEvent, touch = false) {\n // Get the target element from the event object\n const targetElement = e.target as HTMLElement | undefined;\n // Ignore focus if clicked input\n if (isEditInput(targetElement)) {\n return;\n }\n\n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n\n // Set focus on the current cell\n this.focus(focusCell, this.range && e.shiftKey);\n\n // Initiate autofill selection\n if (this.range) {\n this.autoFillService.selectionStart(targetElement, this.getData());\n\n // Prevent default behavior for mouse events,\n // but only if target element is not a mobile input\n if (!touch) {\n e.preventDefault();\n } else if (\n verifyTouchTarget((e as TouchEvent).touches[0], MOBILE_CLASS)\n ) {\n // Prevent default behavior for touch events\n // if target element is a mobile input\n e.preventDefault();\n }\n }\n }\n\n /**\n * Start cell editing\n */\n protected doEdit(val = '') {\n if (this.canEdit()) {\n const focus = this.selectionStore.get('focus');\n\n const data = this.columnService.getSaveData(focus.y, focus.x);\n this.setEdit?.emit({\n ...data,\n val,\n });\n }\n }\n\n /**\n * Close editor event triggered\n * @param details - if requires focus next\n */\n private closeEdit(e?: CustomEvent<boolean>) {\n this.cancelEdit.emit();\n if (e?.detail) {\n this.focusNext();\n }\n }\n\n /**\n * Edit finished.\n * Close Editor and save.\n */\n protected cellEdit(e: SaveDataDetails) {\n const dataToSave = this.columnService.getSaveData(e.rgRow, e.rgCol, e.val);\n this.cellEditApply.emit(dataToSave);\n }\n\n private getRegion() {\n const focus = this.selectionStore.get('focus');\n let range = this.selectionStore.get('range');\n if (!range) {\n range = getRange(focus, focus);\n }\n return range;\n }\n private onCopy(e: DataTransfer) {\n const range = this.getRegion();\n const canCopyEvent = this.beforeCopyRegion.emit(range);\n if (canCopyEvent.defaultPrevented) {\n return false;\n }\n let rangeData: DataFormat[][] | undefined;\n\n if (range) {\n const { data, mapping } = this.columnService.copyRangeArray(\n range,\n this.dataStore,\n );\n const event = this.rangeClipboardCopy.emit({\n range,\n data,\n mapping,\n ...this.types,\n });\n if (!event.defaultPrevented) {\n rangeData = event.detail.data;\n }\n }\n\n this.clipboard.doCopy(e, rangeData);\n return true;\n }\n\n private onPaste(data: string[][]) {\n const focus = this.selectionStore.get('focus');\n const isEditing = this.selectionStore.get('edit') !== null;\n if (!focus || isEditing) {\n return;\n }\n let { changed, range } = this.columnService.getTransformedDataToApply(\n focus,\n data,\n );\n const { defaultPrevented: canPaste } = this.rangeClipboardPaste.emit({\n data: changed,\n models: collectModelsOfRange(changed, this.dataStore),\n range,\n ...this.types,\n });\n if (canPaste) {\n return;\n }\n this.autoFillService.onRangeApply(changed, range);\n }\n\n private async focusNext() {\n const canFocus = await this.keyboardService.keyChangeSelection(\n new KeyboardEvent('keydown', {\n code: codesLetter.ARROW_DOWN,\n }),\n this.range,\n );\n if (!canFocus) {\n this.closeEdit();\n }\n }\n\n protected clearCell() {\n if (\n this.selectionStore.get('range') &&\n !isRangeSingleCell(this.selectionStore.get('range'))\n ) {\n const data = this.columnService.getRangeStaticData(\n this.selectionStore.get('range'),\n '',\n );\n this.autoFillService.onRangeApply(data, this.selectionStore.get('range'));\n } else if (this.canEdit()) {\n const focused = this.selectionStore.get('focus');\n const cell = this.columnService.getSaveData(focused.y, focused.x);\n this.cellEdit({\n rgRow: focused.y,\n rgCol: focused.x,\n val: '',\n type: cell.type,\n prop: cell.prop,\n });\n }\n }\n\n private rowDragStart({ detail }: CustomEvent<{ cell: Cell; text: string }>) {\n detail.text = this.columnService.getCellData(detail.cell.y, detail.cell.x);\n }\n\n /**\n * Verify if edit allowed.\n */\n protected canEdit() {\n if (this.readonly) {\n return false;\n }\n const focus = this.selectionStore.get('focus');\n return focus && !this.columnService?.isReadOnly(focus.y, focus.x);\n }\n\n get edited(): EditCellStore {\n return this.selectionStore.get('edit');\n }\n\n /**\n * Sets the focus on a cell and optionally edits a range.\n */\n focus(cell?: Cell, isRangeEdit = false) {\n if (!cell) return false;\n\n const end = cell;\n const start = this.selectionStore.get('focus');\n\n if (isRangeEdit && start) {\n return this.triggerRangeEvent(getRange(start, end));\n }\n\n return this.doFocus(cell, end);\n }\n\n get types(): AllDimensionType {\n return {\n rowType: this.dataStore.get('type'),\n colType: this.columnService.type,\n };\n }\n\n /**\n * Collect data\n */\n protected getData(): EventData {\n return {\n el: this.element,\n rows: this.dimensionRow.state,\n cols: this.dimensionCol.state,\n lastCell: this.lastCell,\n focus: this.selectionStore.get('focus'),\n range: this.selectionStore.get('range'),\n };\n }\n}\n"],"version":3}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
|
|
5
5
|
import { i as createStore, h as setStore, D as DataStore } from './data.store.js';
|
|
6
|
-
import './_baseIteratee.js';
|
|
7
6
|
import './toNumber.js';
|
|
8
7
|
import { g as getItemByPosition } from './dimension.helpers.js';
|
|
9
8
|
import { e as ROW_HEADER_TYPE } from './consts.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"revogr-row-headers2.js","mappings":"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","names":[],"sources":["src/store/vp/viewport.helpers.ts","src/store/vp/viewport.store.ts","src/utils/row-header-utils.ts","src/components/rowHeaders/row-header-render.tsx","src/components/rowHeaders/revogr-row-headers.tsx"],"sourcesContent":["import {\n DimensionSettingsState,\n PositionItem,\n ViewSettingSizeProp,\n ViewportStateItems,\n VirtualPositionItem,\n Range,\n} from '@type';\n\nimport { getItemByPosition } from '../dimension/dimension.helpers';\n\nexport type DimensionDataViewport = Pick<\n DimensionSettingsState,\n | 'indexes'\n | 'positionIndexes'\n | 'positionIndexToItem'\n | 'sizes'\n | 'originItemSize'\n | 'realSize'\n>;\n\nexport type ItemsToUpdate = Pick<ViewportStateItems, 'items' | 'start' | 'end'>;\n/**\n * Update items based on new scroll position\n * If viewport wasn't changed fully simple recombination of positions\n * Otherwise rebuild viewport items\n */\nexport function getUpdatedItemsByPosition<T extends ItemsToUpdate>(\n pos: number, // coordinate\n items: T,\n realCount: number,\n virtualSize: number,\n dimension: DimensionDataViewport,\n): ItemsToUpdate {\n const activeItem: PositionItem = getItemByPosition(dimension, pos);\n const firstItem: PositionItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate;\n // do simple position recombination if items already present in viewport\n if (firstItem) {\n let changedOffsetStart = activeItem.itemIndex - (firstItem.itemIndex || 0);\n // if item changed\n if (changedOffsetStart) {\n // simple recombination\n toUpdate = recombineByOffset(Math.abs(changedOffsetStart), {\n positiveDirection: changedOffsetStart > -1,\n ...dimension,\n ...items,\n });\n }\n }\n\n const maxSizeVirtualSize = getMaxVirtualSize(\n virtualSize,\n dimension.realSize,\n activeItem,\n );\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(\n activeItem,\n realCount,\n maxSizeVirtualSize,\n toUpdate,\n dimension,\n );\n if (extra.length) {\n updateMissingAndRange(toUpdate.items, extra, toUpdate);\n }\n }\n\n // new collection if no items after replacement full replacement\n if (!toUpdate) {\n const items = getItems({\n firstItemStart: activeItem.start,\n firstItemIndex: activeItem.itemIndex,\n origSize: dimension.originItemSize,\n maxSize: maxSizeVirtualSize,\n maxCount: realCount,\n sizes: dimension.sizes,\n });\n\n // range now comes from 0 to length - 1\n toUpdate = {\n items,\n start: 0,\n end: items.length - 1,\n };\n }\n return toUpdate;\n}\n\n// virtual size can differ based on scroll position if some big items are present\n// scroll can be in the middle of item and virtual size will be larger\n// so we need to exclude this part from virtual size hence it's already passed\nfunction getMaxVirtualSize(\n virtualSize: number,\n realSize: number,\n activeItem: PositionItem,\n) {\n return Math.min(virtualSize + (activeItem.end - activeItem.start), realSize);\n}\n\nexport function updateMissingAndRange(\n items: VirtualPositionItem[],\n missing: VirtualPositionItem[],\n range: Range,\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (\n range.start >= range.end &&\n !(range.start === range.end && range.start === 0)\n ) {\n range.start += missing.length;\n }\n range.end += missing.length;\n}\n\n/**\n * If partial replacement\n * this function adds items if viewport has some space left\n */\nexport function addMissingItems<T extends ItemsToUpdate>(\n firstItem: PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): VirtualPositionItem[] {\n const lastItem: VirtualPositionItem = getLastItem(existingCollection);\n const items = getItems({\n sizes: dimension.sizes,\n firstItemStart: lastItem.end,\n firstItemIndex: lastItem.itemIndex + 1,\n origSize: dimension.originItemSize,\n maxSize: virtualSize - (lastItem.end - firstItem.start),\n maxCount: realCount,\n });\n return items;\n}\n\n/**\n * Get wiewport items parameters\n * caching position and calculating items count in viewport\n */\nexport function getItems(\n opt: {\n firstItemIndex: number;\n firstItemStart: number;\n origSize: number;\n maxSize: number; // virtual size\n maxCount: number; // real item count, where the last item\n sizes?: ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: VirtualPositionItem[] = [];\n\n let index = opt.firstItemIndex;\n let size = currentSize;\n\n // max size or max count\n while (size <= opt.maxSize && index < opt.maxCount) {\n const newSize = getItemSize(index, opt.sizes, opt.origSize);\n items.push({\n start: opt.firstItemStart + size,\n end: opt.firstItemStart + size + newSize,\n itemIndex: index,\n size: newSize,\n });\n size += newSize;\n index++;\n }\n return items;\n}\n\n/**\n * Do batch items recombination\n * If items not overlapped with existing viewport returns null\n */\ntype RecombindDimensionData = Pick<\n DimensionSettingsState,\n 'sizes' | 'realSize' | 'originItemSize'\n>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate &\n RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData,\n): ItemsToUpdate | null {\n const newItems = [...data.items];\n const itemsCount = newItems.length;\n let newRange = {\n start: data.start,\n end: data.end,\n };\n\n // if offset out of revo-viewport, makes sense whole redraw\n if (offset > itemsCount) {\n return null;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: VirtualPositionItem = getLastItem(data);\n\n let i = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex = lastItem.itemIndex + 1;\n const size = getItemSize(\n newIndex,\n data.sizes,\n data.originItemSize,\n );\n\n // if item overlapped limit break a loop\n if (lastItem.end + size > data.realSize) {\n break;\n }\n\n // new item index to recombine\n let newEnd = i % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newEnd]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newEnd] = lastItem = {\n start: lastItem.end,\n end: lastItem.end + size,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start++;\n newRange.end = newEnd;\n }\n\n // direction is negative\n } else {\n // push item to the start\n let firstItem: VirtualPositionItem = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex = firstItem.itemIndex - 1;\n const size = getItemSize(\n newIndex,\n data.sizes,\n data.originItemSize,\n );\n\n // new item index to recombine\n let newStart = end - i;\n newStart = (newStart < 0 ? itemsCount + newStart : newStart) % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newStart]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newStart] = firstItem = {\n start: firstItem.start - size,\n end: firstItem.start,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start:\n (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) %\n itemsCount,\n end:\n (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) %\n itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(\n index: number,\n sizes?: ViewSettingSizeProp,\n origSize = 0,\n): number {\n if (sizes && sizes[index]) {\n return sizes[index];\n }\n return origSize;\n}\n\n/**\n * Verify if position is in range of the PositionItem, start and end are included\n */\nexport function isActiveRange(\n pos: number,\n realSize: number,\n first?: PositionItem,\n last?: PositionItem,\n): boolean {\n if (!first || !last) {\n return false;\n }\n // if position is in range of first item\n // or position is after first item and last item is the last item in real size\n return (\n (pos >= first.start && pos <= first.end) ||\n (pos > first.end && last.end === realSize)\n );\n}\n\nexport function isActiveRangeOutsideLastItem(\n pos: number,\n virtualSize: number,\n firstItem?: PositionItem,\n lastItem?: PositionItem,\n) {\n // if no first item, means no items in viewport\n if (!firstItem) {\n return false;\n }\n return virtualSize + pos > lastItem?.end;\n}\n\nexport function getFirstItem(\n s: ItemsToUpdate,\n): VirtualPositionItem | undefined {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): VirtualPositionItem {\n return s.items[s.end];\n}\n\n/**\n * Set items sizes from start index to end\n * @param vpItems\n * @param start\n * @param size\n * @param lastCoordinate\n * @returns\n */\nexport function setItemSizes(\n vpItems: VirtualPositionItem[],\n initialIndex: number,\n size: number,\n lastCoordinate: number,\n) {\n const items = [...vpItems];\n const count = items.length;\n\n let pos = lastCoordinate;\n let i = 0;\n let start = initialIndex;\n\n // viewport not inited\n if (!count) {\n return [];\n }\n // loop through array from initial item after recombination\n while (i < count) {\n const item = items[start];\n item.start = pos;\n item.size = size;\n item.end = item.start + size;\n pos = item.end;\n // loop by start index\n start++;\n i++;\n\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n return items;\n}\n","import {\n DimensionDataViewport,\n addMissingItems,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n isActiveRangeOutsideLastItem,\n ItemsToUpdate,\n} from './viewport.helpers';\nimport { createStore } from '@stencil/store';\nimport { type Observable, setStore } from '../../utils/store.utils';\nimport type {\n VirtualPositionItem,\n ViewportState,\n MultiDimensionType,\n} from '@type';\n\n/**\n * Viewport store\n * Used for virtualization (process of rendering only visible part of data)\n * Redraws viewport based on position and dimension\n */\nfunction initialState(): ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\n end: 0,\n\n // size of viewport in px\n virtualSize: 0,\n\n // total number of items\n realCount: 0,\n };\n}\n\n/**\n * Viewport store class\n */\nexport class ViewportStore {\n readonly store: Observable<ViewportState>;\n\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: MultiDimensionType) {\n this.store = createStore(initialState());\n // drop items on real size change, require a new item set\n this.store.onChange('realCount', () => this.clearItems());\n // drop items on virtual size change, require a new item set\n this.store.onChange('virtualSize', () => this.clearItems());\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n * Use force if you want to re-render viewport\n */\n setViewPortCoordinate(position: number, dimension: DimensionDataViewport, force = false) {\n const viewportSize = this.store.get('virtualSize');\n // no visible data to calculate\n if (!viewportSize) {\n return;\n }\n\n const frameOffset = 1;\n const singleOffsetInPx = dimension.originItemSize * frameOffset;\n // add offset to virtual size from both sides\n const outsize = singleOffsetInPx * 2;\n // math virtual size is based on visible area + 2 items outside of visible area\n const virtualSize = viewportSize + outsize;\n\n // expected no scroll if real size less than virtual size, position is 0\n let maxCoordinate = 0;\n // if there is nodes outside of viewport, max coordinate has to be adjusted\n if (dimension.realSize > viewportSize) {\n // max coordinate is real size minus virtual/rendered space\n maxCoordinate = dimension.realSize - viewportSize - singleOffsetInPx;\n }\n\n let pos = position;\n // limit position to max and min coordinates\n if (pos < 0) {\n pos = 0;\n } else if (pos > maxCoordinate) {\n pos = maxCoordinate;\n }\n\n // store last coordinate for further restore on redraw\n this.lastCoordinate = pos;\n\n // actual position is less than first item start based on offset\n pos -= singleOffsetInPx;\n pos = pos < 0 ? 0 : pos < maxCoordinate ? pos : maxCoordinate;\n\n let allItems: ItemsToUpdate;\n // if force clear all items and start from 0\n if (force) {\n allItems = {\n items: [],\n start: 0,\n end: 0,\n };\n } else {\n allItems = this.getItems()\n }\n\n const firstItem: VirtualPositionItem | undefined = getFirstItem(allItems);\n const lastItem: VirtualPositionItem | undefined = getLastItem(allItems);\n\n let toUpdate: Partial<ViewportState> = {};\n\n // left position changed\n // verify if new position is in range of previously rendered first item\n if (!isActiveRange(pos, dimension.realSize, firstItem, lastItem)) {\n toUpdate = {\n ...toUpdate,\n ...getUpdatedItemsByPosition(\n pos,\n allItems,\n this.store.get('realCount'),\n virtualSize,\n dimension,\n ),\n };\n this.setViewport({ ...toUpdate });\n // verify is render area is outside of last item\n } else if (\n isActiveRangeOutsideLastItem(pos, virtualSize, firstItem, lastItem)\n ) {\n const items = [...allItems.items];\n // check is any item missing for full fill content\n const missing = addMissingItems(\n firstItem,\n this.store.get('realCount'),\n virtualSize + pos - firstItem.start,\n allItems,\n {\n sizes: dimension.sizes,\n originItemSize: dimension.originItemSize,\n },\n );\n\n // update missing items\n if (missing.length) {\n const range = {\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n updateMissingAndRange(items, missing, range);\n toUpdate = {\n ...toUpdate,\n items: [...items],\n ...range,\n };\n this.setViewport({ ...toUpdate });\n }\n }\n }\n\n /**\n * Set sizes for existing items\n */\n setOriginalSizes(size: number) {\n const items = this.store.get('items');\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n setStore(this.store, {\n items: setItemSizes(\n items,\n this.store.get('start'),\n size,\n this.lastCoordinate,\n ),\n });\n }\n\n getItems(): ItemsToUpdate {\n return {\n items: this.store.get('items'),\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n }\n\n setViewport(data: Partial<ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n","import { RowHeaders } from '..';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (\n itemsLength: number,\n rowHeaderColumn?: RowHeaders,\n minWidth = 50,\n) => {\n return (\n rowHeaderColumn?.size ||\n Math.max((itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE, minWidth)\n );\n};\n","import { VNode } from '@stencil/core';\nimport { HyperFunc } from '@type';\n\ntype HeaderRender = {\n (start: number): (h: HyperFunc<VNode>, e: { rowIndex: number }) => number;\n};\nexport const RowHeaderRender: HeaderRender = s => (__, { rowIndex: i }) => s + i;\n","import { h, Host, Component, Prop, Event, EventEmitter } from '@stencil/core';\nimport { JSXBase } from '@stencil/core/internal';\n\nimport { ViewportStore, DataStore } from '@store';\n\nimport { ROW_HEADER_TYPE } from '../../utils/consts';\nimport { RowHeaderRender } from './row-header-render';\nimport { calculateRowHeaderSize } from '../../utils/row-header-utils';\nimport { HEADER_SLOT } from '../revoGrid/viewport.helpers';\nimport {\n RowHeaders,\n ViewPortScrollEvent,\n DataType,\n ColumnRegular,\n ViewportData,\n ElementScroll,\n DimensionRows,\n DimensionCols,\n} from '@type';\nimport { JSX } from '../../components';\n\n/**\n * Row headers component\n * Visible on the left side of the table\n */\n\n@Component({ tag: 'revogr-row-headers' })\nexport class RevogrRowHeaders {\n // #region Properties\n /**\n * Header height to setup row headers\n */\n @Prop() height: number;\n\n /**\n * Viewport data\n */\n @Prop() dataPorts: ViewportData[];\n /**\n * Header props\n */\n @Prop() headerProp: Record<string, any>;\n\n /**\n * Row class\n */\n @Prop() rowClass: string;\n\n /**\n * Enable resize\n */\n @Prop() resize: boolean;\n /**\n * Row header column\n */\n @Prop() rowHeaderColumn: RowHeaders;\n /**\n * Additional data to pass to renderer\n */\n @Prop() additionalData: any;\n /**\n * Prevent rendering until job is done.\n * Can be used for initial rendering performance improvement.\n * When several plugins require initial rendering this will prevent double initial rendering.\n */\n @Prop() jobsBeforeRender: Promise<any>[] = [];\n // #endregion\n\n /**\n * Scroll viewport\n */\n @Event({ eventName: 'scrollview', bubbles: false })\n scrollViewport: EventEmitter<ViewPortScrollEvent>;\n /**\n * Register element to scroll\n */\n @Event({ eventName: 'ref', bubbles: false })\n elementToScroll: EventEmitter<ElementScroll>;\n\n render() {\n const dataViews: HTMLElement[] = [];\n const viewport = new ViewportStore('colPinStart');\n\n /** render viewports rows */\n let totalLength = 1;\n // todo: this part could be optimized to avoid to often re-render dataPorts can be cached\n for (let data of this.dataPorts) {\n const itemCount = data.dataStore.get('items').length;\n\n // initiate row data\n const dataStore = new DataStore<DataType, DimensionRows>(data.type, {\n ...data.dataStore.state,\n });\n\n // initiate column data\n const colData = new DataStore<ColumnRegular, DimensionCols>(\n 'colPinStart',\n );\n const column: ColumnRegular = {\n cellTemplate: RowHeaderRender(totalLength),\n ...this.rowHeaderColumn,\n };\n colData.updateData([column]);\n dataViews.push(\n <revogr-data\n {...data}\n colType=\"rowHeaders\"\n jobsBeforeRender={this.jobsBeforeRender}\n rowClass={this.rowClass}\n dataStore={dataStore.store}\n colData={colData.store}\n viewportCol={viewport.store}\n readonly={true}\n range={false}\n />,\n );\n totalLength += itemCount;\n }\n\n const colSize = calculateRowHeaderSize(totalLength, this.rowHeaderColumn);\n viewport.setViewport({\n realCount: 1,\n virtualSize: 0,\n items: [\n {\n size: colSize,\n start: 0,\n end: colSize,\n itemIndex: 0,\n },\n ],\n });\n\n const viewportScroll: JSX.RevogrViewportScroll &\n JSXBase.HTMLAttributes<HTMLRevogrViewportScrollElement> = {\n contentHeight: this.height,\n contentWidth: 0,\n style: { minWidth: `${colSize}px` },\n colType: 'rowHeaders',\n ref: (el: ElementScroll) => this.elementToScroll.emit(el),\n onScrollviewport: (e: CustomEvent) => this.scrollViewport.emit(e.detail),\n };\n const viewportHeader: JSX.RevogrHeader & { slot: string } = {\n ...this.headerProp,\n colData:\n typeof this.rowHeaderColumn === 'object' ? [this.rowHeaderColumn] : [],\n viewportCol: viewport.store,\n canResize: false,\n type: ROW_HEADER_TYPE,\n // parent,\n slot: HEADER_SLOT,\n };\n return (\n <Host class={{ [ROW_HEADER_TYPE]: true }} key={ROW_HEADER_TYPE}>\n <revogr-viewport-scroll {...viewportScroll} row-header={true}>\n <revogr-header {...viewportHeader} />\n {dataViews}\n </revogr-viewport-scroll>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"revogr-row-headers2.js","mappings":"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","names":[],"sources":["src/store/vp/viewport.helpers.ts","src/store/vp/viewport.store.ts","src/utils/row-header-utils.ts","src/components/rowHeaders/row-header-render.tsx","src/components/rowHeaders/revogr-row-headers.tsx"],"sourcesContent":["import {\n DimensionSettingsState,\n PositionItem,\n ViewSettingSizeProp,\n ViewportStateItems,\n VirtualPositionItem,\n Range,\n} from '@type';\n\nimport { getItemByPosition } from '../dimension/dimension.helpers';\n\nexport type DimensionDataViewport = Pick<\n DimensionSettingsState,\n | 'indexes'\n | 'positionIndexes'\n | 'positionIndexToItem'\n | 'sizes'\n | 'originItemSize'\n | 'realSize'\n>;\n\nexport type ItemsToUpdate = Pick<ViewportStateItems, 'items' | 'start' | 'end'>;\n/**\n * Update items based on new scroll position\n * If viewport wasn't changed fully simple recombination of positions\n * Otherwise rebuild viewport items\n */\nexport function getUpdatedItemsByPosition<T extends ItemsToUpdate>(\n pos: number, // coordinate\n items: T,\n realCount: number,\n virtualSize: number,\n dimension: DimensionDataViewport,\n): ItemsToUpdate {\n const activeItem: PositionItem = getItemByPosition(dimension, pos);\n const firstItem: PositionItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate;\n // do simple position recombination if items already present in viewport\n if (firstItem) {\n let changedOffsetStart = activeItem.itemIndex - (firstItem.itemIndex || 0);\n // if item changed\n if (changedOffsetStart) {\n // simple recombination\n toUpdate = recombineByOffset(Math.abs(changedOffsetStart), {\n positiveDirection: changedOffsetStart > -1,\n ...dimension,\n ...items,\n });\n }\n }\n\n const maxSizeVirtualSize = getMaxVirtualSize(\n virtualSize,\n dimension.realSize,\n activeItem,\n );\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(\n activeItem,\n realCount,\n maxSizeVirtualSize,\n toUpdate,\n dimension,\n );\n if (extra.length) {\n updateMissingAndRange(toUpdate.items, extra, toUpdate);\n }\n }\n\n // new collection if no items after replacement full replacement\n if (!toUpdate) {\n const items = getItems({\n firstItemStart: activeItem.start,\n firstItemIndex: activeItem.itemIndex,\n origSize: dimension.originItemSize,\n maxSize: maxSizeVirtualSize,\n maxCount: realCount,\n sizes: dimension.sizes,\n });\n\n // range now comes from 0 to length - 1\n toUpdate = {\n items,\n start: 0,\n end: items.length - 1,\n };\n }\n return toUpdate;\n}\n\n// virtual size can differ based on scroll position if some big items are present\n// scroll can be in the middle of item and virtual size will be larger\n// so we need to exclude this part from virtual size hence it's already passed\nfunction getMaxVirtualSize(\n virtualSize: number,\n realSize: number,\n activeItem: PositionItem,\n) {\n return Math.min(virtualSize + (activeItem.end - activeItem.start), realSize);\n}\n\nexport function updateMissingAndRange(\n items: VirtualPositionItem[],\n missing: VirtualPositionItem[],\n range: Range,\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (\n range.start >= range.end &&\n !(range.start === range.end && range.start === 0)\n ) {\n range.start += missing.length;\n }\n range.end += missing.length;\n}\n\n/**\n * If partial replacement\n * this function adds items if viewport has some space left\n */\nexport function addMissingItems<T extends ItemsToUpdate>(\n firstItem: PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): VirtualPositionItem[] {\n const lastItem: VirtualPositionItem = getLastItem(existingCollection);\n const items = getItems({\n sizes: dimension.sizes,\n firstItemStart: lastItem.end,\n firstItemIndex: lastItem.itemIndex + 1,\n origSize: dimension.originItemSize,\n maxSize: virtualSize - (lastItem.end - firstItem.start),\n maxCount: realCount,\n });\n return items;\n}\n\n/**\n * Get wiewport items parameters\n * caching position and calculating items count in viewport\n */\nexport function getItems(\n opt: {\n firstItemIndex: number;\n firstItemStart: number;\n origSize: number;\n maxSize: number; // virtual size\n maxCount: number; // real item count, where the last item\n sizes?: ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: VirtualPositionItem[] = [];\n\n let index = opt.firstItemIndex;\n let size = currentSize;\n\n // max size or max count\n while (size <= opt.maxSize && index < opt.maxCount) {\n const newSize = getItemSize(index, opt.sizes, opt.origSize);\n items.push({\n start: opt.firstItemStart + size,\n end: opt.firstItemStart + size + newSize,\n itemIndex: index,\n size: newSize,\n });\n size += newSize;\n index++;\n }\n return items;\n}\n\n/**\n * Do batch items recombination\n * If items not overlapped with existing viewport returns null\n */\ntype RecombindDimensionData = Pick<\n DimensionSettingsState,\n 'sizes' | 'realSize' | 'originItemSize'\n>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate &\n RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData,\n): ItemsToUpdate | null {\n const newItems = [...data.items];\n const itemsCount = newItems.length;\n let newRange = {\n start: data.start,\n end: data.end,\n };\n\n // if offset out of revo-viewport, makes sense whole redraw\n if (offset > itemsCount) {\n return null;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: VirtualPositionItem = getLastItem(data);\n\n let i = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex = lastItem.itemIndex + 1;\n const size = getItemSize(\n newIndex,\n data.sizes,\n data.originItemSize,\n );\n\n // if item overlapped limit break a loop\n if (lastItem.end + size > data.realSize) {\n break;\n }\n\n // new item index to recombine\n let newEnd = i % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newEnd]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newEnd] = lastItem = {\n start: lastItem.end,\n end: lastItem.end + size,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start++;\n newRange.end = newEnd;\n }\n\n // direction is negative\n } else {\n // push item to the start\n let firstItem: VirtualPositionItem = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex = firstItem.itemIndex - 1;\n const size = getItemSize(\n newIndex,\n data.sizes,\n data.originItemSize,\n );\n\n // new item index to recombine\n let newStart = end - i;\n newStart = (newStart < 0 ? itemsCount + newStart : newStart) % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newStart]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newStart] = firstItem = {\n start: firstItem.start - size,\n end: firstItem.start,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start:\n (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) %\n itemsCount,\n end:\n (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) %\n itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(\n index: number,\n sizes?: ViewSettingSizeProp,\n origSize = 0,\n): number {\n if (sizes && sizes[index]) {\n return sizes[index];\n }\n return origSize;\n}\n\n/**\n * Verify if position is in range of the PositionItem, start and end are included\n */\nexport function isActiveRange(\n pos: number,\n realSize: number,\n first?: PositionItem,\n last?: PositionItem,\n): boolean {\n if (!first || !last) {\n return false;\n }\n // if position is in range of first item\n // or position is after first item and last item is the last item in real size\n return (\n (pos >= first.start && pos <= first.end) ||\n (pos > first.end && last.end === realSize)\n );\n}\n\nexport function isActiveRangeOutsideLastItem(\n pos: number,\n virtualSize: number,\n firstItem?: PositionItem,\n lastItem?: PositionItem,\n) {\n // if no first item, means no items in viewport\n if (!firstItem) {\n return false;\n }\n return virtualSize + pos > lastItem?.end;\n}\n\nexport function getFirstItem(\n s: ItemsToUpdate,\n): VirtualPositionItem | undefined {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): VirtualPositionItem {\n return s.items[s.end];\n}\n\n/**\n * Set items sizes from start index to end\n * @param vpItems\n * @param start\n * @param size\n * @param lastCoordinate\n * @returns\n */\nexport function setItemSizes(\n vpItems: VirtualPositionItem[],\n initialIndex: number,\n size: number,\n lastCoordinate: number,\n) {\n const items = [...vpItems];\n const count = items.length;\n\n let pos = lastCoordinate;\n let i = 0;\n let start = initialIndex;\n\n // viewport not inited\n if (!count) {\n return [];\n }\n // loop through array from initial item after recombination\n while (i < count) {\n const item = items[start];\n item.start = pos;\n item.size = size;\n item.end = item.start + size;\n pos = item.end;\n // loop by start index\n start++;\n i++;\n\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n return items;\n}\n","import {\n DimensionDataViewport,\n addMissingItems,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n isActiveRangeOutsideLastItem,\n ItemsToUpdate,\n} from './viewport.helpers';\nimport { createStore } from '@stencil/store';\nimport { type Observable, setStore } from '../../utils/store.utils';\nimport type {\n VirtualPositionItem,\n ViewportState,\n MultiDimensionType,\n} from '@type';\n\n/**\n * Viewport store\n * Used for virtualization (process of rendering only visible part of data)\n * Redraws viewport based on position and dimension\n */\nfunction initialState(): ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\n end: 0,\n\n // size of viewport in px\n virtualSize: 0,\n\n // total number of items\n realCount: 0,\n };\n}\n\n/**\n * Viewport store class\n */\nexport class ViewportStore {\n readonly store: Observable<ViewportState>;\n\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: MultiDimensionType) {\n this.store = createStore(initialState());\n // drop items on real size change, require a new item set\n this.store.onChange('realCount', () => this.clearItems());\n // drop items on virtual size change, require a new item set\n this.store.onChange('virtualSize', () => this.clearItems());\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n * Use force if you want to re-render viewport\n */\n setViewPortCoordinate(position: number, dimension: DimensionDataViewport, force = false) {\n const viewportSize = this.store.get('virtualSize');\n // no visible data to calculate\n if (!viewportSize) {\n return;\n }\n\n const frameOffset = 1;\n const singleOffsetInPx = dimension.originItemSize * frameOffset;\n // add offset to virtual size from both sides\n const outsize = singleOffsetInPx * 2;\n // math virtual size is based on visible area + 2 items outside of visible area\n const virtualSize = viewportSize + outsize;\n\n // expected no scroll if real size less than virtual size, position is 0\n let maxCoordinate = 0;\n // if there is nodes outside of viewport, max coordinate has to be adjusted\n if (dimension.realSize > viewportSize) {\n // max coordinate is real size minus virtual/rendered space\n maxCoordinate = dimension.realSize - viewportSize - singleOffsetInPx;\n }\n\n let pos = position;\n // limit position to max and min coordinates\n if (pos < 0) {\n pos = 0;\n } else if (pos > maxCoordinate) {\n pos = maxCoordinate;\n }\n\n // store last coordinate for further restore on redraw\n this.lastCoordinate = pos;\n\n // actual position is less than first item start based on offset\n pos -= singleOffsetInPx;\n pos = pos < 0 ? 0 : pos < maxCoordinate ? pos : maxCoordinate;\n\n let allItems: ItemsToUpdate;\n // if force clear all items and start from 0\n if (force) {\n allItems = {\n items: [],\n start: 0,\n end: 0,\n };\n } else {\n allItems = this.getItems()\n }\n\n const firstItem: VirtualPositionItem | undefined = getFirstItem(allItems);\n const lastItem: VirtualPositionItem | undefined = getLastItem(allItems);\n\n let toUpdate: Partial<ViewportState> = {};\n\n // left position changed\n // verify if new position is in range of previously rendered first item\n if (!isActiveRange(pos, dimension.realSize, firstItem, lastItem)) {\n toUpdate = {\n ...toUpdate,\n ...getUpdatedItemsByPosition(\n pos,\n allItems,\n this.store.get('realCount'),\n virtualSize,\n dimension,\n ),\n };\n this.setViewport({ ...toUpdate });\n // verify is render area is outside of last item\n } else if (\n isActiveRangeOutsideLastItem(pos, virtualSize, firstItem, lastItem)\n ) {\n const items = [...allItems.items];\n // check is any item missing for full fill content\n const missing = addMissingItems(\n firstItem,\n this.store.get('realCount'),\n virtualSize + pos - firstItem.start,\n allItems,\n {\n sizes: dimension.sizes,\n originItemSize: dimension.originItemSize,\n },\n );\n\n // update missing items\n if (missing.length) {\n const range = {\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n updateMissingAndRange(items, missing, range);\n toUpdate = {\n ...toUpdate,\n items: [...items],\n ...range,\n };\n this.setViewport({ ...toUpdate });\n }\n }\n }\n\n /**\n * Set sizes for existing items\n */\n setOriginalSizes(size: number) {\n const items = this.store.get('items');\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n setStore(this.store, {\n items: setItemSizes(\n items,\n this.store.get('start'),\n size,\n this.lastCoordinate,\n ),\n });\n }\n\n getItems(): ItemsToUpdate {\n return {\n items: this.store.get('items'),\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n }\n\n setViewport(data: Partial<ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n","import { RowHeaders } from '..';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (\n itemsLength: number,\n rowHeaderColumn?: RowHeaders,\n minWidth = 50,\n) => {\n return (\n rowHeaderColumn?.size ||\n Math.max((itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE, minWidth)\n );\n};\n","import { VNode } from '@stencil/core';\nimport { HyperFunc } from '@type';\n\ntype HeaderRender = {\n (start: number): (h: HyperFunc<VNode>, e: { rowIndex: number }) => number;\n};\nexport const RowHeaderRender: HeaderRender = s => (__, { rowIndex: i }) => s + i;\n","import { h, Host, Component, Prop, Event, EventEmitter } from '@stencil/core';\nimport { JSXBase } from '@stencil/core/internal';\n\nimport { ViewportStore, DataStore } from '@store';\n\nimport { ROW_HEADER_TYPE } from '../../utils/consts';\nimport { RowHeaderRender } from './row-header-render';\nimport { calculateRowHeaderSize } from '../../utils/row-header-utils';\nimport { HEADER_SLOT } from '../revoGrid/viewport.helpers';\nimport {\n RowHeaders,\n ViewPortScrollEvent,\n DataType,\n ColumnRegular,\n ViewportData,\n ElementScroll,\n DimensionRows,\n DimensionCols,\n} from '@type';\nimport { JSX } from '../../components';\n\n/**\n * Row headers component\n * Visible on the left side of the table\n */\n\n@Component({ tag: 'revogr-row-headers' })\nexport class RevogrRowHeaders {\n // #region Properties\n /**\n * Header height to setup row headers\n */\n @Prop() height: number;\n\n /**\n * Viewport data\n */\n @Prop() dataPorts: ViewportData[];\n /**\n * Header props\n */\n @Prop() headerProp: Record<string, any>;\n\n /**\n * Row class\n */\n @Prop() rowClass: string;\n\n /**\n * Enable resize\n */\n @Prop() resize: boolean;\n /**\n * Row header column\n */\n @Prop() rowHeaderColumn: RowHeaders;\n /**\n * Additional data to pass to renderer\n */\n @Prop() additionalData: any;\n /**\n * Prevent rendering until job is done.\n * Can be used for initial rendering performance improvement.\n * When several plugins require initial rendering this will prevent double initial rendering.\n */\n @Prop() jobsBeforeRender: Promise<any>[] = [];\n // #endregion\n\n /**\n * Scroll viewport\n */\n @Event({ eventName: 'scrollview', bubbles: false })\n scrollViewport: EventEmitter<ViewPortScrollEvent>;\n /**\n * Register element to scroll\n */\n @Event({ eventName: 'ref', bubbles: false })\n elementToScroll: EventEmitter<ElementScroll>;\n\n render() {\n const dataViews: HTMLElement[] = [];\n const viewport = new ViewportStore('colPinStart');\n\n /** render viewports rows */\n let totalLength = 1;\n // todo: this part could be optimized to avoid to often re-render dataPorts can be cached\n for (let data of this.dataPorts) {\n const itemCount = data.dataStore.get('items').length;\n\n // initiate row data\n const dataStore = new DataStore<DataType, DimensionRows>(data.type, {\n ...data.dataStore.state,\n });\n\n // initiate column data\n const colData = new DataStore<ColumnRegular, DimensionCols>(\n 'colPinStart',\n );\n const column: ColumnRegular = {\n cellTemplate: RowHeaderRender(totalLength),\n ...this.rowHeaderColumn,\n };\n colData.updateData([column]);\n dataViews.push(\n <revogr-data\n {...data}\n colType=\"rowHeaders\"\n jobsBeforeRender={this.jobsBeforeRender}\n rowClass={this.rowClass}\n dataStore={dataStore.store}\n colData={colData.store}\n viewportCol={viewport.store}\n readonly={true}\n range={false}\n />,\n );\n totalLength += itemCount;\n }\n\n const colSize = calculateRowHeaderSize(totalLength, this.rowHeaderColumn);\n viewport.setViewport({\n realCount: 1,\n virtualSize: 0,\n items: [\n {\n size: colSize,\n start: 0,\n end: colSize,\n itemIndex: 0,\n },\n ],\n });\n\n const viewportScroll: JSX.RevogrViewportScroll &\n JSXBase.HTMLAttributes<HTMLRevogrViewportScrollElement> = {\n contentHeight: this.height,\n contentWidth: 0,\n style: { minWidth: `${colSize}px` },\n colType: 'rowHeaders',\n ref: (el: ElementScroll) => this.elementToScroll.emit(el),\n onScrollviewport: (e: CustomEvent) => this.scrollViewport.emit(e.detail),\n };\n const viewportHeader: JSX.RevogrHeader & { slot: string } = {\n ...this.headerProp,\n colData:\n typeof this.rowHeaderColumn === 'object' ? [this.rowHeaderColumn] : [],\n viewportCol: viewport.store,\n canResize: false,\n type: ROW_HEADER_TYPE,\n // parent,\n slot: HEADER_SLOT,\n };\n return (\n <Host class={{ [ROW_HEADER_TYPE]: true }} key={ROW_HEADER_TYPE}>\n <revogr-viewport-scroll {...viewportScroll} row-header={true}>\n <revogr-header {...viewportHeader} />\n {dataViews}\n </revogr-viewport-scroll>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built by Revolist OU ❤️
|
|
3
3
|
*/
|
|
4
|
-
import './
|
|
4
|
+
import { b as getSourceItem } from './data.store.js';
|
|
5
5
|
import './toNumber.js';
|
|
6
6
|
import '@stencil/core/internal/client';
|
|
7
7
|
import { g as getItemByPosition, a as getItemByIndex } from './dimension.helpers.js';
|
|
@@ -42,6 +42,14 @@ function getPropertyFromEvent(e, prop, focusClass // for touch events
|
|
|
42
42
|
return e[prop] || 0;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
function collectModelsOfRange(data, store) {
|
|
46
|
+
const models = {};
|
|
47
|
+
for (let i in data) {
|
|
48
|
+
const rowIndex = parseInt(i, 10);
|
|
49
|
+
models[rowIndex] = getSourceItem(store, rowIndex);
|
|
50
|
+
}
|
|
51
|
+
return models;
|
|
52
|
+
}
|
|
45
53
|
function getFocusCellBasedOnEvent(e, data) {
|
|
46
54
|
// If event default is prevented, return
|
|
47
55
|
if (e.defaultPrevented) {
|
|
@@ -169,6 +177,6 @@ function getElStyle(range, dimensionRow, dimensionCol) {
|
|
|
169
177
|
return styleByCellProps(styles);
|
|
170
178
|
}
|
|
171
179
|
|
|
172
|
-
export { getElStyle as a, getCoordinate as b, isBeforeFirst as c, getCell as d, getCurrentCell as e,
|
|
180
|
+
export { getElStyle as a, getCoordinate as b, isBeforeFirst as c, getCell as d, getCurrentCell as e, collectModelsOfRange as f, getPropertyFromEvent as g, getFocusCellBasedOnEvent as h, isAfterLast as i, verifyTouchTarget as v };
|
|
173
181
|
|
|
174
182
|
//# sourceMappingURL=selection.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"selection.utils.js","mappings":"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","names":[],"sources":["src/utils/events.ts","src/components/overlay/selection.utils.ts"],"sourcesContent":["function isTouch(e: MouseEvent | TouchEvent): e is TouchEvent {\n return !!(e as TouchEvent).touches;\n}\n\nexport function verifyTouchTarget(touchEvent?: Touch, focusClass?: string) {\n if (focusClass && touchEvent) {\n if (!(touchEvent.target instanceof Element && touchEvent.target.classList.contains(focusClass))) { \n return false;\n }\n }\n return true;\n}\n\n\n/**\n * Function to get the value of a specific property from a MouseEvent or TouchEvent object.\n */\nexport function getPropertyFromEvent(\n e: MouseEvent | TouchEvent,\n prop: keyof Pick<Touch, 'clientX' | 'clientY' | 'screenX' | 'screenY'>,\n focusClass?: string // for touch events\n): number | null {\n // Check if the event is a touch event\n if (isTouch(e)) {\n // If the event has touches, get the first touch\n if (e.touches.length > 0) {\n const touchEvent = e.touches[0];\n // Check if the target of the touch event is the specified element\n if (!verifyTouchTarget(touchEvent, focusClass)) {\n // If not, return null\n return null;\n }\n // Get the value of the specified property from the touch event and return it\n return (touchEvent[prop] as number) || 0;\n }\n // If there are no touches, return null\n return null;\n }\n // If the event is not a touch event, get the value of the specified property from the event and return it\n return e[prop] || 0;\n}\n","import {\n getItemByIndex,\n getItemByPosition,\n} from '@store';\nimport { DimensionSettingsState, Cell, RangeArea, RangeAreaCss } from '@type';\nimport { getPropertyFromEvent } from '../../utils/events';\n\nexport type EventData = {\n el: HTMLElement;\n rows: DimensionSettingsState;\n cols: DimensionSettingsState;\n lastCell: Cell;\n focus: Cell;\n range: RangeArea;\n};\n\nexport function getFocusCellBasedOnEvent(\n e: MouseEvent | TouchEvent,\n data: EventData,\n): Cell | null {\n // If event default is prevented, return\n if (e.defaultPrevented) {\n return null;\n }\n\n // Get coordinates from event object\n const x = getPropertyFromEvent(e, 'clientX');\n const y = getPropertyFromEvent(e, 'clientY');\n\n // If coordinates are not available, return\n if (x === null || y === null) {\n return null;\n }\n\n // Get current cell based on coordinates and data\n const focusCell = getCurrentCell({ x, y }, data);\n // If current cell is not available, return\n if (isAfterLast(focusCell, data.lastCell)) {\n return null;\n }\n\n return focusCell;\n}\n\n/**\n * Calculate cell based on x, y position\n */\nexport function getCurrentCell(\n { x, y }: Cell,\n { el, rows, cols }: Pick<EventData, 'el' | 'rows' | 'cols'>,\n): Cell {\n // Get the bounding rectangle of the element\n const { top, left, height, width } = el.getBoundingClientRect();\n\n // Calculate the cell position relative to the element\n let cellY = y - top;\n let cellX = x - left;\n\n // Limit the cell position to the element height\n if (cellY >= height) {\n cellY = height - 1;\n }\n\n // Limit the cell position to the element width\n if (cellX >= width) {\n cellX = width - 1;\n }\n\n // Get the row and column items based on the cell position\n const rgRow = getItemByPosition(rows, cellY);\n const rgCol = getItemByPosition(cols, cellX);\n\n // Set the row and column index to 0 if they are before the first item\n if (rgCol.itemIndex < 0) {\n rgCol.itemIndex = 0;\n }\n\n if (rgRow.itemIndex < 0) {\n rgRow.itemIndex = 0;\n }\n\n return { x: rgCol.itemIndex, y: rgRow.itemIndex };\n}\n\nexport function getCoordinate(\n range: RangeArea,\n focus: Cell,\n changes: Partial<Cell>,\n isMulti = false,\n) {\n const updateCoordinate = (c: keyof Cell) => {\n const start = { x: range.x, y: range.y };\n const end = isMulti ? { x: range.x1, y: range.y1 } : start;\n const point = end[c] > focus[c] ? end : start;\n point[c] += changes[c];\n return { start, end };\n };\n\n if (changes.x) {\n return updateCoordinate('x');\n }\n if (changes.y) {\n return updateCoordinate('y');\n }\n return null;\n}\n\n/**\n * Check if the x coordinate of the cell position is after or equal to the x coordinate of the last cell position\n * or if the y coordinate of the cell position is after or equal to the y coordinate of the last cell position\n */\nexport function isAfterLast({ x, y }: Cell, lastCell: Cell) {\n return x >= lastCell.x || y >= lastCell.y;\n}\n\n/** check if out of range */\nexport function isBeforeFirst({ x, y }: Cell) {\n return x < 0 || y < 0;\n}\n\n/** Compare cells, only 1 coordinate difference is possible */\n// export function getDirectionCoordinate(initial: Cell, last: Cell): Partial<Cell> | null {\n// const c: (keyof Cell)[] = ['x', 'y'];\n// for (let k of c) {\n// if (initial[k] !== last[k]) {\n// return { [k]: 1 };\n// }\n// }\n// return null;\n// }\n\n// export function getLargestAxis(initial: Cell, last: Cell): Partial<Cell> | null {\n// const cell: Partial<Cell> = {};\n// const c: (keyof Cell)[] = ['x', 'y'];\n// for (let k of c) {\n// cell[k] = Math.abs(initial[k] - last[k]);\n// }\n// if (cell.x > cell.y) {\n// return { x: 1 };\n// }\n// if (cell.y > cell.x) {\n// return { y: 1 };\n// }\n// return null;\n// }\n\nfunction styleByCellProps(styles: { [key: string]: number }): RangeAreaCss {\n return {\n left: `${styles.left}px`,\n top: `${styles.top}px`,\n width: `${styles.width}px`,\n height: `${styles.height}px`,\n };\n}\n\nexport function getCell(\n { x, y, x1, y1 }: RangeArea,\n dimensionRow: DimensionSettingsState,\n dimensionCol: DimensionSettingsState,\n) {\n const top = getItemByIndex(dimensionRow, y).start;\n const left = getItemByIndex(dimensionCol, x).start;\n const bottom = getItemByIndex(dimensionRow, y1).end;\n const right = getItemByIndex(dimensionCol, x1).end;\n\n return {\n left,\n right,\n top,\n bottom,\n width: right - left,\n height: bottom - top,\n };\n}\n\nexport function getElStyle(\n range: RangeArea,\n dimensionRow: DimensionSettingsState,\n dimensionCol: DimensionSettingsState,\n): RangeAreaCss {\n const styles = getCell(range, dimensionRow, dimensionCol);\n return styleByCellProps(styles);\n}\n"],"version":3}
|
|
1
|
+
{"file":"selection.utils.js","mappings":"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","names":[],"sources":["src/utils/events.ts","src/components/overlay/selection.utils.ts"],"sourcesContent":["function isTouch(e: MouseEvent | TouchEvent): e is TouchEvent {\n return !!(e as TouchEvent).touches;\n}\n\nexport function verifyTouchTarget(touchEvent?: Touch, focusClass?: string) {\n if (focusClass && touchEvent) {\n if (!(touchEvent.target instanceof Element && touchEvent.target.classList.contains(focusClass))) { \n return false;\n }\n }\n return true;\n}\n\n\n/**\n * Function to get the value of a specific property from a MouseEvent or TouchEvent object.\n */\nexport function getPropertyFromEvent(\n e: MouseEvent | TouchEvent,\n prop: keyof Pick<Touch, 'clientX' | 'clientY' | 'screenX' | 'screenY'>,\n focusClass?: string // for touch events\n): number | null {\n // Check if the event is a touch event\n if (isTouch(e)) {\n // If the event has touches, get the first touch\n if (e.touches.length > 0) {\n const touchEvent = e.touches[0];\n // Check if the target of the touch event is the specified element\n if (!verifyTouchTarget(touchEvent, focusClass)) {\n // If not, return null\n return null;\n }\n // Get the value of the specified property from the touch event and return it\n return (touchEvent[prop] as number) || 0;\n }\n // If there are no touches, return null\n return null;\n }\n // If the event is not a touch event, get the value of the specified property from the event and return it\n return e[prop] || 0;\n}\n","import {\n DSourceState,\n getItemByIndex,\n getItemByPosition,\n getSourceItem,\n} from '@store';\nimport { DimensionSettingsState, Cell, RangeArea, RangeAreaCss, DataLookup, DimensionRows, DataType } from '@type';\nimport { getPropertyFromEvent } from '../../utils/events';\nimport { Observable } from '../../utils/store.utils';\n\nexport type EventData = {\n el: HTMLElement;\n rows: DimensionSettingsState;\n cols: DimensionSettingsState;\n lastCell: Cell;\n focus: Cell;\n range: RangeArea;\n};\n\nexport function collectModelsOfRange(data: DataLookup, store: Observable<DSourceState<DataType, DimensionRows>>) {\n const models: DataLookup = {};\n for (let i in data) {\n const rowIndex = parseInt(i, 10);\n models[rowIndex] = getSourceItem(\n store,\n rowIndex,\n );\n }\n\n return models;\n}\n\nexport function getFocusCellBasedOnEvent(\n e: MouseEvent | TouchEvent,\n data: EventData,\n): Cell | null {\n // If event default is prevented, return\n if (e.defaultPrevented) {\n return null;\n }\n\n // Get coordinates from event object\n const x = getPropertyFromEvent(e, 'clientX');\n const y = getPropertyFromEvent(e, 'clientY');\n\n // If coordinates are not available, return\n if (x === null || y === null) {\n return null;\n }\n\n // Get current cell based on coordinates and data\n const focusCell = getCurrentCell({ x, y }, data);\n // If current cell is not available, return\n if (isAfterLast(focusCell, data.lastCell)) {\n return null;\n }\n\n return focusCell;\n}\n\n/**\n * Calculate cell based on x, y position\n */\nexport function getCurrentCell(\n { x, y }: Cell,\n { el, rows, cols }: Pick<EventData, 'el' | 'rows' | 'cols'>,\n): Cell {\n // Get the bounding rectangle of the element\n const { top, left, height, width } = el.getBoundingClientRect();\n\n // Calculate the cell position relative to the element\n let cellY = y - top;\n let cellX = x - left;\n\n // Limit the cell position to the element height\n if (cellY >= height) {\n cellY = height - 1;\n }\n\n // Limit the cell position to the element width\n if (cellX >= width) {\n cellX = width - 1;\n }\n\n // Get the row and column items based on the cell position\n const rgRow = getItemByPosition(rows, cellY);\n const rgCol = getItemByPosition(cols, cellX);\n\n // Set the row and column index to 0 if they are before the first item\n if (rgCol.itemIndex < 0) {\n rgCol.itemIndex = 0;\n }\n\n if (rgRow.itemIndex < 0) {\n rgRow.itemIndex = 0;\n }\n\n return { x: rgCol.itemIndex, y: rgRow.itemIndex };\n}\n\nexport function getCoordinate(\n range: RangeArea,\n focus: Cell,\n changes: Partial<Cell>,\n isMulti = false,\n) {\n const updateCoordinate = (c: keyof Cell) => {\n const start = { x: range.x, y: range.y };\n const end = isMulti ? { x: range.x1, y: range.y1 } : start;\n const point = end[c] > focus[c] ? end : start;\n point[c] += changes[c];\n return { start, end };\n };\n\n if (changes.x) {\n return updateCoordinate('x');\n }\n if (changes.y) {\n return updateCoordinate('y');\n }\n return null;\n}\n\n/**\n * Check if the x coordinate of the cell position is after or equal to the x coordinate of the last cell position\n * or if the y coordinate of the cell position is after or equal to the y coordinate of the last cell position\n */\nexport function isAfterLast({ x, y }: Cell, lastCell: Cell) {\n return x >= lastCell.x || y >= lastCell.y;\n}\n\n/** check if out of range */\nexport function isBeforeFirst({ x, y }: Cell) {\n return x < 0 || y < 0;\n}\n\n/** Compare cells, only 1 coordinate difference is possible */\n// export function getDirectionCoordinate(initial: Cell, last: Cell): Partial<Cell> | null {\n// const c: (keyof Cell)[] = ['x', 'y'];\n// for (let k of c) {\n// if (initial[k] !== last[k]) {\n// return { [k]: 1 };\n// }\n// }\n// return null;\n// }\n\n// export function getLargestAxis(initial: Cell, last: Cell): Partial<Cell> | null {\n// const cell: Partial<Cell> = {};\n// const c: (keyof Cell)[] = ['x', 'y'];\n// for (let k of c) {\n// cell[k] = Math.abs(initial[k] - last[k]);\n// }\n// if (cell.x > cell.y) {\n// return { x: 1 };\n// }\n// if (cell.y > cell.x) {\n// return { y: 1 };\n// }\n// return null;\n// }\n\nfunction styleByCellProps(styles: { [key: string]: number }): RangeAreaCss {\n return {\n left: `${styles.left}px`,\n top: `${styles.top}px`,\n width: `${styles.width}px`,\n height: `${styles.height}px`,\n };\n}\n\nexport function getCell(\n { x, y, x1, y1 }: RangeArea,\n dimensionRow: DimensionSettingsState,\n dimensionCol: DimensionSettingsState,\n) {\n const top = getItemByIndex(dimensionRow, y).start;\n const left = getItemByIndex(dimensionCol, x).start;\n const bottom = getItemByIndex(dimensionRow, y1).end;\n const right = getItemByIndex(dimensionCol, x1).end;\n\n return {\n left,\n right,\n top,\n bottom,\n width: right - left,\n height: bottom - top,\n };\n}\n\nexport function getElStyle(\n range: RangeArea,\n dimensionRow: DimensionSettingsState,\n dimensionCol: DimensionSettingsState,\n): RangeAreaCss {\n const styles = getCell(range, dimensionRow, dimensionCol);\n return styleByCellProps(styles);\n}\n"],"version":3}
|
package/standalone/toNumber.js
CHANGED
|
@@ -326,6 +326,6 @@ function toNumber(value) {
|
|
|
326
326
|
|
|
327
327
|
var toNumber_1 = toNumber;
|
|
328
328
|
|
|
329
|
-
export { _baseGetTag as _, isObject_1 as a,
|
|
329
|
+
export { _baseGetTag as _, isObject_1 as a, _root as b, _Symbol as c, _freeGlobal as d, isSymbol_1 as e, isObjectLike_1 as i, toNumber_1 as t };
|
|
330
330
|
|
|
331
331
|
//# sourceMappingURL=toNumber.js.map
|